225 lines
6.5 KiB
YAML
225 lines
6.5 KiB
YAML
################
|
|
# 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"
|