mirror of
https://github.com/tag1consulting/d7_to_d10_migration.git
synced 2024-12-01 17:53:26 +00:00
161 lines
6 KiB
YAML
161 lines
6 KiB
YAML
|
stages:
|
|||
|
################
|
|||
|
# Test
|
|||
|
#
|
|||
|
# The test phase actually executes the tests, as well as gathering results
|
|||
|
# and artifacts.
|
|||
|
################
|
|||
|
- 🗜️ Test
|
|||
|
|
|||
|
#############
|
|||
|
# Templates #
|
|||
|
#############
|
|||
|
|
|||
|
.default-job-settings: &default-job-settings
|
|||
|
interruptible: true
|
|||
|
allow_failure: false
|
|||
|
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
|
|||
|
rules:
|
|||
|
- if: $CI_PIPELINE_SOURCE == "parent_pipeline"
|
|||
|
|
|||
|
.test-variables: &test-variables
|
|||
|
FF_NETWORK_PER_BUILD: 1
|
|||
|
SIMPLETEST_BASE_URL: http://localhost/subdirectory
|
|||
|
DB_DRIVER: mysql
|
|||
|
MYSQL_ROOT_PASSWORD: root
|
|||
|
MYSQL_DATABASE: drupal
|
|||
|
MYSQL_USER: drupaltestbot
|
|||
|
MYSQL_PASSWORD: drupaltestbotpw
|
|||
|
POSTGRES_DB: drupaltestbot
|
|||
|
POSTGRES_USER: drupaltestbot
|
|||
|
POSTGRES_PASSWORD: drupaltestbotpw
|
|||
|
CI_PARALLEL_NODE_INDEX: $CI_NODE_INDEX
|
|||
|
CI_PARALLEL_NODE_TOTAL: $CI_NODE_TOTAL
|
|||
|
|
|||
|
.with-database: &with-database
|
|||
|
name: $_CONFIG_DOCKERHUB_ROOT/$_TARGET_DB:production
|
|||
|
alias: database
|
|||
|
|
|||
|
.with-chrome: &with-chrome
|
|||
|
name: $_CONFIG_DOCKERHUB_ROOT/chromedriver:production
|
|||
|
alias: chrome
|
|||
|
entrypoint:
|
|||
|
- chromedriver
|
|||
|
- "--no-sandbox"
|
|||
|
- "--log-path=/tmp/chromedriver.log"
|
|||
|
- "--verbose"
|
|||
|
- "--whitelisted-ips="
|
|||
|
|
|||
|
.phpunit-artifacts: &phpunit-artifacts
|
|||
|
artifacts:
|
|||
|
when: always
|
|||
|
expire_in: 6 mos
|
|||
|
reports:
|
|||
|
junit: ./sites/default/files/simpletest/*.xml
|
|||
|
paths:
|
|||
|
- ./sites/default/files/simpletest
|
|||
|
|
|||
|
.setup-webroot: &setup-webserver
|
|||
|
before_script:
|
|||
|
- ln -s $CI_PROJECT_DIR /var/www/html/subdirectory
|
|||
|
- cp $CI_PROJECT_DIR/.gitlab-ci/.htaccess-parent /var/www/html/.htaccess
|
|||
|
- sudo service apache2 start
|
|||
|
|
|||
|
.get-simpletest-db: &get-simpletest-db
|
|||
|
- |
|
|||
|
# Assume SQLite unless we have another known target.
|
|||
|
export SIMPLETEST_DB=sqlite://localhost/$CI_PROJECT_DIR/sites/default/files/db.sqlite
|
|||
|
[[ $_TARGET_DB == mysql* ]] && export SIMPLETEST_DB=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE
|
|||
|
[[ $_TARGET_DB == mariadb* ]] && export SIMPLETEST_DB=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE
|
|||
|
[[ $_TARGET_DB == pgsql* ]] && export SIMPLETEST_DB=pgsql://$POSTGRES_USER:$POSTGRES_PASSWORD@database/$POSTGRES_DB
|
|||
|
- echo "SIMPLETEST_DB = $SIMPLETEST_DB"
|
|||
|
|
|||
|
.prepare-dirs: &prepare-dirs
|
|||
|
- mkdir -p ./sites/default/files ./sites/default/files/simpletest ./build/logs/junit
|
|||
|
- chown -R www-data:www-data ./sites ./build/logs/junit /var/www/
|
|||
|
- sudo -u www-data git config --global --add safe.directory $CI_PROJECT_DIR
|
|||
|
|
|||
|
.install-drupal: &install-drupal
|
|||
|
- sudo -u www-data /usr/local/bin/drush si -y --db-url=$SIMPLETEST_DB --clean-url=0 --account-name=admin --account-pass=drupal --account-mail=admin@example.com
|
|||
|
- sudo -u www-data /usr/local/bin/drush vset simpletest_clear_results '0'
|
|||
|
- sudo -u www-data /usr/local/bin/drush vset simpletest_verbose '1'
|
|||
|
- sudo -u www-data /usr/local/bin/drush en -y simpletest
|
|||
|
|
|||
|
.run-tests: &run-tests
|
|||
|
script:
|
|||
|
- *get-simpletest-db
|
|||
|
- *prepare-dirs
|
|||
|
- *install-drupal
|
|||
|
# We need to pass this along directly even though it's set in the environment parameters.
|
|||
|
- sudo -u www-data php ./scripts/run-tests.sh --color --concurrency "$CONCURRENCY" --url "$SIMPLETEST_BASE_URL" --verbose --fail-only --all --xml "$CI_PROJECT_DIR/sites/default/files/simpletest" --ci-parallel-node-index $CI_PARALLEL_NODE_INDEX --ci-parallel-node-total $CI_PARALLEL_NODE_TOTAL
|
|||
|
|
|||
|
.run-test-only-tests: &run-test-only-tests
|
|||
|
script:
|
|||
|
- *get-simpletest-db
|
|||
|
- *prepare-dirs
|
|||
|
- *install-drupal
|
|||
|
- export TARGET_BRANCH=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}${CI_COMMIT_BRANCH}
|
|||
|
- git fetch -vn --depth=50 origin "+refs/heads/$TARGET_BRANCH:refs/heads/$TARGET_BRANCH"
|
|||
|
- |
|
|||
|
echo "ℹ️ Changes from ${TARGET_BRANCH}"
|
|||
|
git diff ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --name-only
|
|||
|
echo "1️⃣ Reverting non test changes"
|
|||
|
if [[ $(git diff ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --diff-filter=DM --name-only|grep -Ev '.test$'|grep -v .gitlab-ci|grep -v scripts/run-tests.sh) ]]; then
|
|||
|
git diff ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --diff-filter=DM --name-only|grep -Ev '.test$'|grep -v .gitlab-ci|grep -v scripts/run-tests.sh|while read file;do
|
|||
|
echo "↩️ Reverting $file"
|
|||
|
git checkout refs/heads/${TARGET_BRANCH} -- $file;
|
|||
|
done
|
|||
|
fi
|
|||
|
echo "2️⃣ Deleting new files"
|
|||
|
if [[ $(git diff ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --diff-filter=A --name-only|grep -Ev '.test$'|grep -v .gitlab-ci|grep -v scripts/run-tests.sh) ]]; then
|
|||
|
git diff ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --diff-filter=A --name-only|grep -Ev '.test$'|grep -v .gitlab-ci|grep -v scripts/run-tests.sh|while read file;do
|
|||
|
echo "🗑️️ Deleting $file"
|
|||
|
git rm $file
|
|||
|
done
|
|||
|
fi
|
|||
|
echo "3️⃣ Running test changes for this branch"
|
|||
|
if [[ $(git diff ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --name-only|grep -E '.test$') ]]; then
|
|||
|
git diff ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --name-only|grep -E ".test$"|while read file;do
|
|||
|
sudo -u www-data php ./scripts/run-tests.sh --color --concurrency "$CONCURRENCY" --url "$SIMPLETEST_BASE_URL" --verbose --fail-only --xml "$CI_PROJECT_DIR/sites/default/files/simpletest/test-only" --file "$file"
|
|||
|
done
|
|||
|
fi
|
|||
|
|
|||
|
################
|
|||
|
# Jobs
|
|||
|
#
|
|||
|
# Jobs define what scripts are actually executed in each stage.
|
|||
|
################
|
|||
|
|
|||
|
'⚡️ PHPUnit Unit':
|
|||
|
<<: [ *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
|
|||
|
stage: 🗜️ Test
|
|||
|
parallel: 3
|
|||
|
services:
|
|||
|
- <<: *with-database
|
|||
|
- <<: *with-chrome
|
|||
|
variables:
|
|||
|
<<: *test-variables
|
|||
|
CONCURRENCY: "$CONCURRENCY"
|
|||
|
KUBERNETES_CPU_REQUEST: "16"
|
|||
|
|
|||
|
'🩹 Test-only changes':
|
|||
|
<<: [ *phpunit-artifacts, *setup-webserver, *run-test-only-tests, *default-job-settings ]
|
|||
|
stage: 🗜️ Test
|
|||
|
when: manual
|
|||
|
interruptible: true
|
|||
|
allow_failure: true
|
|||
|
variables:
|
|||
|
<<: *test-variables
|
|||
|
services:
|
|||
|
- <<: *with-database
|
|||
|
- <<: *with-chrome
|