################ # Drupal GitLabCI template # # Based off GitlabCI templates project: https://git.drupalcode.org/project/gitlab_templates # Guide: https://www.drupal.org/docs/develop/git/using-gitlab-to-contribute-to-drupal/gitlab-ci # # With thanks to: # - The GitLab Acceleration Initiative participants # - DrupalSpoons ################ ################ # Workflow # # Define conditions for when the pipeline will run. # For example: # * On commit # * On merge request # * On manual trigger # * etc. # https://docs.gitlab.com/ee/ci/jobs/job_control.html#specify-when-jobs-run-with-rules # # Pipelines can also be configured to run on a schedule,though they still must meet the conditions defined in Workflow and Rules. This can be used, for example, to do nightly regression testing: # https://gitlab.com/help/ci/pipelines/schedules ################ workflow: rules: # These 3 rules from https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Workflows/MergeRequest-Pipelines.gitlab-ci.yml # Run on merge requests - if: $CI_PIPELINE_SOURCE == 'merge_request_event' # Run when called from an upstream pipeline https://docs.gitlab.com/ee/ci/pipelines/downstream_pipelines.html?tab=Multi-project+pipeline#use-rules-to-control-downstream-pipeline-jobs - if: $CI_PIPELINE_SOURCE == 'pipeline' # Run on commits. - if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_ROOT_NAMESPACE == "project" # The last rule above blocks manual and scheduled pipelines on non-default branch. The rule below allows them: - if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_ROOT_NAMESPACE == "project" # Run if triggered from Web using 'Run Pipelines' - if: $CI_PIPELINE_SOURCE == "web" # Run if triggered from WebIDE - if: $CI_PIPELINE_SOURCE == "webide" ################ # Variables # # Overriding variables # - To override one or more of these variables, simply declare your own # variables keyword. # - Keywords declared directly in .gitlab-ci.yml take precedence over include # files. # - Documentation: https://docs.gitlab.com/ee/ci/variables/ # - Predefined variables: https://docs.gitlab.com/ee/ci/variables/predefined_variables.html # ################ variables: _CONFIG_DOCKERHUB_ROOT: "drupalci" _TARGET_PHP: "8.1" CONCURRENCY: 15 GIT_DEPTH: "3" COMPOSER_ALLOW_SUPERUSER: 1 ################ # Stages # # Each job is assigned to a stage, defining the order in which the jobs are executed. # Jobs in the same stage run in parallel. # # If all jobs in a stage succeed, the pipeline will proceed to the next stage. # If any job in the stage fails, the pipeline will exit early. ################ stages: ################ # Code quality checks # # This stage includes any codebase validation that we want to perform # before running functional tests. ################ - ๐Ÿช„ Lint ################ # Test # # The test phase actually executes the tests, as well as gathering results # and artifacts. ################ - ๐Ÿ—œ๏ธ Test ############# # Templates # ############# .run-on-mr: &run-on-mr if: $CI_PIPELINE_SOURCE == "merge_request_event" .run-on-mr-manual: &run-on-mr-manual if: $CI_PIPELINE_SOURCE == "merge_request_event" when: manual allow_failure: true .run-on-commit: &run-on-commit if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_ROOT_NAMESPACE == "project" .run-daily: &run-daily if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_ROOT_NAMESPACE == "project" .default-stage: &default-stage stage: ๐Ÿ—œ๏ธ Test trigger: # Rely on the status of the child pipeline. strategy: depend include: - local: .gitlab-ci/pipeline.yml rules: - <<: *run-on-commit - <<: *run-on-mr-manual ################ # Jobs # # Jobs define what scripts are actually executed in each stage. ################ '๐Ÿงน PHP Compatibility checks (PHPCS)': stage: ๐Ÿช„ Lint variables: PHPCS_PHP_VERSION: "5.6" KUBERNETES_CPU_REQUEST: "16" interruptible: true allow_failure: true retry: max: 2 when: - unknown_failure - api_failure - stuck_or_timeout_failure - runner_system_failure - scheduler_failure image: name: $_CONFIG_DOCKERHUB_ROOT/php-$_TARGET_PHP-apache:production artifacts: expire_in: 6 mos paths: - phpcs-quality-report.json reports: codequality: phpcs-quality-report.json rules: - <<: *run-on-mr before_script: - echo "{}" > composer.json - composer config allow-plugins true -n - composer require --dev drupal/coder:^8.2@stable micheh/phpcs-gitlab phpcompatibility/php-compatibility dealerdirect/phpcodesniffer-composer-installer - export TARGET_BRANCH=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}${CI_COMMIT_BRANCH} script: - git fetch -vn --depth=$GIT_DEPTH origin "+refs/heads/$TARGET_BRANCH:refs/heads/$TARGET_BRANCH" - export MODIFIED=`git diff --name-only refs/heads/$TARGET_BRANCH|while read r;do echo "$CI_PROJECT_DIR/$r";done|tr "\n" " "` - echo -e "$MODIFIED" | tr " " "\n" - echo "If this list contains more files than what you changed, then you need to rebase your branch." - vendor/bin/phpcs --basepath=$CI_PROJECT_DIR --report-\\Micheh\\PhpCodeSniffer\\Report\\Gitlab=phpcs-quality-report.json --report-full --report-summary --standard=PHPCompatibility --runtime-set testVersion $PHPCS_PHP_VERSION --extensions=php,module,inc,install,test,profile,theme $MODIFIED # Default job. 'PHP 8.1 MySQL 5.7': <<: *default-stage variables: _TARGET_PHP: "8.1" _TARGET_DB: "mysql-5.7" rules: - <<: *run-on-commit - <<: *run-on-mr 'PHP 5.6 MySQL 5.5': <<: *default-stage variables: _TARGET_PHP: "5.6" _TARGET_DB: "mysql-5.5" 'PHP 7.2 MySQL 5.7': <<: *default-stage variables: _TARGET_PHP: "7.2" _TARGET_DB: "mysql-5.7" 'PHP 7.4 MySQL 5.7': <<: *default-stage variables: _TARGET_PHP: "7.4" _TARGET_DB: "mysql-5.7" 'PHP 8.0 MySQL 5.7': <<: *default-stage variables: _TARGET_PHP: "8.0" _TARGET_DB: "mysql-5.7" 'PHP 8.2 MySQL 8': <<: *default-stage variables: _TARGET_PHP: "8.2" _TARGET_DB: "mysql-8" 'PHP 7.4 PostgreSQL 9.5': <<: *default-stage variables: _TARGET_PHP: "7.4" _TARGET_DB: "pgsql-9.5" 'PHP 8.1 PostgreSQL 14.1': <<: *default-stage variables: _TARGET_PHP: "8.1" _TARGET_DB: "pgsql-14.1" 'PHP 7.4 SQLite 3.27.0': <<: *default-stage variables: _TARGET_PHP: "7.4" _TARGET_DB: "sqlite-3" 'PHP 8.1 MariaDB 10.3.22': <<: *default-stage variables: _TARGET_PHP: "8.1" _TARGET_DB: "mariadb-10.3.22"