Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
# cspell:ignore drupaltestbot drupaltestbotpw
|
|
|
|
|
|
|
|
|
|
stages:
|
|
|
|
|
- 🗜️ Test
|
|
|
|
|
|
|
|
|
|
#############
|
|
|
|
|
# Templates #
|
|
|
|
|
#############
|
|
|
|
|
|
|
|
|
|
.default-job-settings: &default-job-settings
|
2023-10-05 06:52:57 +00:00
|
|
|
|
stage: 🗜️ Test
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
interruptible: true
|
|
|
|
|
allow_failure: false
|
2023-10-04 14:58:47 +00:00
|
|
|
|
retry:
|
|
|
|
|
max: 2
|
|
|
|
|
when:
|
|
|
|
|
- unknown_failure
|
|
|
|
|
- api_failure
|
|
|
|
|
- stuck_or_timeout_failure
|
|
|
|
|
- runner_system_failure
|
|
|
|
|
- scheduler_failure
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
image:
|
|
|
|
|
name: $_CONFIG_DOCKERHUB_ROOT/php-$_TARGET_PHP-apache:production
|
|
|
|
|
rules:
|
|
|
|
|
- if: $CI_PIPELINE_SOURCE == "parent_pipeline"
|
|
|
|
|
|
|
|
|
|
.junit-artifacts: &junit-artifacts
|
|
|
|
|
artifacts:
|
|
|
|
|
expose_as: junit
|
|
|
|
|
expire_in: 6 mos
|
|
|
|
|
paths:
|
|
|
|
|
- junit.xml
|
|
|
|
|
reports:
|
|
|
|
|
junit: junit.xml
|
|
|
|
|
|
2023-10-05 06:52:57 +00:00
|
|
|
|
.with-composer: &with-composer
|
|
|
|
|
needs:
|
|
|
|
|
- pipeline: $PARENT_PIPELINE_ID
|
|
|
|
|
job: '📦️ Composer'
|
|
|
|
|
|
2023-09-22 05:50:51 +00:00
|
|
|
|
.with-composer-and-yarn: &with-composer-and-yarn
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
needs:
|
2023-10-05 06:52:57 +00:00
|
|
|
|
- pipeline: $PARENT_PIPELINE_ID
|
|
|
|
|
job: '📦️ Composer'
|
|
|
|
|
- pipeline: $PARENT_PIPELINE_ID
|
|
|
|
|
job: '📦️ Yarn'
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
|
|
|
|
|
.test-variables: &test-variables
|
|
|
|
|
FF_NETWORK_PER_BUILD: 1
|
|
|
|
|
SIMPLETEST_BASE_URL: http://localhost/subdirectory
|
|
|
|
|
DB_DRIVER: mysql
|
|
|
|
|
MYSQL_ROOT_PASSWORD: root
|
|
|
|
|
MYSQL_DATABASE: mysql
|
|
|
|
|
MYSQL_USER: drupaltestbot
|
|
|
|
|
MYSQL_PASSWORD: drupaltestbotpw
|
|
|
|
|
POSTGRES_DB: drupaltestbot
|
|
|
|
|
POSTGRES_USER: drupaltestbot
|
|
|
|
|
POSTGRES_PASSWORD: drupaltestbotpw
|
|
|
|
|
MINK_DRIVER_ARGS_WEBDRIVER: '["chrome", {"browserName":"chrome","chromeOptions":{"args":["--disable-dev-shm-usage","--disable-gpu","--headless"]}}, "http://localhost:9515"]'
|
|
|
|
|
CI_PARALLEL_NODE_INDEX: $CI_NODE_INDEX
|
|
|
|
|
CI_PARALLEL_NODE_TOTAL: $CI_NODE_TOTAL
|
|
|
|
|
|
|
|
|
|
.with-database: &with-database
|
2023-09-15 08:41:49 +00:00
|
|
|
|
name: $_CONFIG_DOCKERHUB_ROOT/$_TARGET_DB:production
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
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/phpunit-*.xml
|
|
|
|
|
paths:
|
|
|
|
|
- ./sites/default/files/simpletest/phpunit-*.xml
|
|
|
|
|
- ./sites/simpletest/browser_output
|
|
|
|
|
|
|
|
|
|
.setup-webroot: &setup-webserver
|
|
|
|
|
before_script:
|
|
|
|
|
- ln -s $CI_PROJECT_DIR /var/www/html/subdirectory
|
|
|
|
|
- sudo service apache2 start
|
|
|
|
|
|
|
|
|
|
.run-tests: &run-tests
|
|
|
|
|
script:
|
|
|
|
|
# Determine DB driver.
|
|
|
|
|
- |
|
2023-09-29 16:01:46 +00:00
|
|
|
|
[[ $_TARGET_DB == sqlite* ]] && export SIMPLETEST_DB=sqlite://localhost/$CI_PROJECT_DIR/sites/default/files/db.sqlite?module=sqlite
|
2023-09-15 08:41:49 +00:00
|
|
|
|
[[ $_TARGET_DB == mysql* ]] && export SIMPLETEST_DB=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
|
|
|
|
|
[[ $_TARGET_DB == mariadb* ]] && export SIMPLETEST_DB=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
|
|
|
|
|
[[ $_TARGET_DB == pgsql* ]] && export SIMPLETEST_DB=pgsql://$POSTGRES_USER:$POSTGRES_PASSWORD@database/$POSTGRES_DB?module=pgsql
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
- mkdir -p ./sites/simpletest ./sites/default/files ./build/logs/junit /var/www/.composer
|
|
|
|
|
- chown -R www-data:www-data ./sites ./build/logs/junit ./vendor /var/www/
|
|
|
|
|
- sudo -u www-data git config --global --add safe.directory $CI_PROJECT_DIR
|
|
|
|
|
# Need to pass this along directly.
|
2023-09-29 16:01:46 +00:00
|
|
|
|
- sudo MINK_DRIVER_ARGS_WEBDRIVER="$MINK_DRIVER_ARGS_WEBDRIVER" -u www-data php ./core/scripts/run-tests.sh --color --keep-results --types "$TESTSUITE" --concurrency "$CONCURRENCY" --repeat "1" --sqlite "./sites/default/files/tests.sqlite" --dburl $SIMPLETEST_DB --url $SIMPLETEST_BASE_URL --verbose --non-html --all --ci-parallel-node-index $CI_PARALLEL_NODE_INDEX --ci-parallel-node-total $CI_PARALLEL_NODE_TOTAL
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
|
|
|
|
|
################
|
|
|
|
|
# Jobs
|
|
|
|
|
#
|
|
|
|
|
# Jobs define what scripts are actually executed in each stage.
|
|
|
|
|
#
|
|
|
|
|
# The 'rules' keyword can also be used to define conditions for each job.
|
|
|
|
|
#
|
|
|
|
|
# Documentation: https://docs.gitlab.com/ee/ci/jobs/
|
|
|
|
|
################
|
|
|
|
|
|
2023-09-16 09:08:36 +00:00
|
|
|
|
'🌐️️ PHPUnit Functional':
|
2023-10-05 06:52:57 +00:00
|
|
|
|
<<: [ *with-composer, *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
|
2023-10-04 08:52:51 +00:00
|
|
|
|
parallel: 7
|
2023-09-16 09:08:36 +00:00
|
|
|
|
variables:
|
|
|
|
|
<<: *test-variables
|
|
|
|
|
TESTSUITE: PHPUnit-Functional
|
|
|
|
|
CONCURRENCY: "$CONCURRENCY"
|
|
|
|
|
services:
|
|
|
|
|
- <<: *with-database
|
|
|
|
|
|
2023-09-29 09:02:33 +00:00
|
|
|
|
'🩹 Test-only changes':
|
2023-10-05 06:52:57 +00:00
|
|
|
|
<<: [ *with-composer, *phpunit-artifacts, *setup-webserver, *default-job-settings ]
|
2023-09-29 09:02:33 +00:00
|
|
|
|
when: manual
|
|
|
|
|
interruptible: true
|
|
|
|
|
allow_failure: true
|
|
|
|
|
variables:
|
|
|
|
|
<<: *test-variables
|
|
|
|
|
services:
|
|
|
|
|
- <<: *with-database
|
|
|
|
|
- <<: *with-chrome
|
|
|
|
|
script:
|
|
|
|
|
# Determine DB driver.
|
|
|
|
|
- |
|
2023-10-12 14:39:48 +00:00
|
|
|
|
[[ $_TARGET_DB == sqlite* ]] && export SIMPLETEST_DB=sqlite://localhost/subdirectory/sites/default/files/db.sqlite?module=sqlite
|
|
|
|
|
[[ $_TARGET_DB == mysql* ]] && export SIMPLETEST_DB=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
|
|
|
|
|
[[ $_TARGET_DB == mariadb* ]] && export SIMPLETEST_DB=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
|
|
|
|
|
[[ $_TARGET_DB == pgsql* ]] && export SIMPLETEST_DB=pgsql://$POSTGRES_USER:$POSTGRES_PASSWORD@database/$POSTGRES_DB?module=pgsql
|
2023-09-29 09:02:33 +00:00
|
|
|
|
- mkdir -p ./sites/simpletest ./sites/default/files ./build/logs/junit /var/www/.composer
|
|
|
|
|
- chown -R www-data:www-data ./sites ./build/logs/junit ./vendor /var/www/
|
|
|
|
|
- sudo -u www-data git config --global --add safe.directory $CI_PROJECT_DIR
|
|
|
|
|
- export TARGET_BRANCH=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}${CI_COMMIT_BRANCH}
|
|
|
|
|
- git fetch -vn --depth=3 "$CI_MERGE_REQUEST_PROJECT_URL" "+refs/heads/$TARGET_BRANCH:refs/heads/$TARGET_BRANCH"
|
|
|
|
|
- |
|
|
|
|
|
echo "ℹ️ Changes from ${TARGET_BRANCH}"
|
|
|
|
|
git diff refs/heads/${TARGET_BRANCH} --name-only
|
|
|
|
|
echo "If this list contains more files than what you changed, then you need to rebase your branch."
|
|
|
|
|
echo "1️⃣ Reverting non test changes"
|
|
|
|
|
if [[ $(git diff refs/heads/${TARGET_BRANCH} --diff-filter=DM --name-only|grep -Ev "Test.php$"|grep -v .gitlab-ci|grep -v scripts/run-tests.sh) ]]; then
|
|
|
|
|
git diff refs/heads/${TARGET_BRANCH} --diff-filter=DM --name-only|grep -Ev "Test.php$"|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
|
|
|
|
|
if [[ $(git diff refs/heads/${TARGET_BRANCH} --diff-filter=A --name-only|grep -Ev "Test.php$"|grep -v .gitlab-ci|grep -v scripts/run-tests.sh) ]]; then
|
|
|
|
|
git diff refs/heads/${TARGET_BRANCH} --diff-filter=A --name-only|grep -Ev "Test.php$"|grep -v .gitlab-ci|grep -v scripts/run-tests.sh|while read file;do
|
|
|
|
|
echo "🗑️️ Deleting $file";
|
|
|
|
|
git rm $file;
|
|
|
|
|
done
|
|
|
|
|
fi
|
|
|
|
|
echo "2️⃣ Running test changes for this branch"
|
|
|
|
|
if [[ $(git diff refs/heads/${TARGET_BRANCH} --name-only|grep -E "Test.php$") ]]; then
|
|
|
|
|
for test in `git diff refs/heads/${TARGET_BRANCH} --name-only|grep -E "Test.php$"`; do
|
|
|
|
|
sudo SIMPLETEST_BASE_URL="$SIMPLETEST_BASE_URL" SIMPLETEST_DB="$SIMPLETEST_DB" MINK_DRIVER_ARGS_WEBDRIVER="$MINK_DRIVER_ARGS_WEBDRIVER" -u www-data ./vendor/bin/phpunit -c core $test --log-junit=./sites/default/files/simpletest/phpunit-`echo $test|sed 's/\//_/g' `.xml;
|
|
|
|
|
done;
|
|
|
|
|
fi
|
|
|
|
|
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
'⚙️️ PHPUnit Kernel':
|
2023-10-05 06:52:57 +00:00
|
|
|
|
<<: [*with-composer, *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
|
2023-10-04 08:52:51 +00:00
|
|
|
|
parallel: 2
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
variables:
|
|
|
|
|
<<: *test-variables
|
|
|
|
|
TESTSUITE: PHPUnit-Kernel
|
|
|
|
|
CONCURRENCY: "$CONCURRENCY"
|
|
|
|
|
services:
|
|
|
|
|
- <<: *with-database
|
|
|
|
|
|
|
|
|
|
'🖱️️️ PHPUnit Functional Javascript':
|
2023-10-05 06:52:57 +00:00
|
|
|
|
<<: [ *with-composer, *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
|
2023-10-04 08:52:51 +00:00
|
|
|
|
parallel: 2
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
variables:
|
|
|
|
|
<<: *test-variables
|
|
|
|
|
TESTSUITE: PHPUnit-FunctionalJavascript
|
|
|
|
|
CONCURRENCY: 15
|
|
|
|
|
services:
|
|
|
|
|
- <<: *with-database
|
|
|
|
|
- <<: *with-chrome
|
|
|
|
|
|
|
|
|
|
'👷️️️ PHPUnit Build':
|
2023-10-05 06:52:57 +00:00
|
|
|
|
<<: [ *with-composer, *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
variables:
|
|
|
|
|
<<: *test-variables
|
|
|
|
|
TESTSUITE: PHPUnit-Build
|
|
|
|
|
CONCURRENCY: "$CONCURRENCY"
|
|
|
|
|
services:
|
|
|
|
|
- <<: *with-database
|
|
|
|
|
|
2023-10-04 08:52:51 +00:00
|
|
|
|
'⚡️ PHPUnit Unit':
|
2023-10-05 06:52:57 +00:00
|
|
|
|
<<: [ *with-composer, *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
|
2023-10-04 08:52:51 +00:00
|
|
|
|
services:
|
|
|
|
|
# There are some unit tests that need a database.
|
|
|
|
|
# @todo Remove after https://www.drupal.org/project/drupal/issues/3386217
|
|
|
|
|
- <<: *with-database
|
|
|
|
|
variables:
|
|
|
|
|
<<: *test-variables
|
|
|
|
|
TESTSUITE: PHPUnit-Unit
|
|
|
|
|
CONCURRENCY: "$CONCURRENCY"
|
|
|
|
|
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
'🦉️️️ Nightwatch':
|
2023-09-22 05:50:51 +00:00
|
|
|
|
<<: [ *with-composer-and-yarn, *setup-webserver, *default-job-settings ]
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
variables:
|
|
|
|
|
<<: *test-variables
|
|
|
|
|
services:
|
|
|
|
|
- <<: *with-database
|
|
|
|
|
- <<: *with-chrome
|
|
|
|
|
script:
|
|
|
|
|
# Determine DB driver.
|
|
|
|
|
- |
|
2023-09-29 16:01:46 +00:00
|
|
|
|
[[ $_TARGET_DB == sqlite* ]] && export DRUPAL_TEST_DB_URL=sqlite://localhost/$CI_PROJECT_DIR/sites/default/files/db.sqlite?module=sqlite
|
2023-09-15 08:41:49 +00:00
|
|
|
|
[[ $_TARGET_DB == mysql* ]] && export DRUPAL_TEST_DB_URL=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
|
|
|
|
|
[[ $_TARGET_DB == mariadb* ]] && export DRUPAL_TEST_DB_URL=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
|
|
|
|
|
[[ $_TARGET_DB == pgsql* ]] && export DRUPAL_TEST_DB_URL=pgsql://$POSTGRES_USER:$POSTGRES_PASSWORD@database/$POSTGRES_DB?module=pgsql
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
- cp ./core/.env.example ./core/.env
|
|
|
|
|
# dotenv-safe/config does not support environment variables
|
|
|
|
|
# @see https://github.com/rolodato/dotenv-safe/issues/126
|
|
|
|
|
# @todo move this to `variables` when the above is resolved
|
|
|
|
|
- echo "DRUPAL_TEST_BASE_URL='http://localhost/subdirectory'" >> ./core/.env
|
|
|
|
|
- echo "DRUPAL_TEST_CHROMEDRIVER_AUTOSTART=false" >> ./core/.env
|
|
|
|
|
- echo "DRUPAL_TEST_DB_URL='${DRUPAL_TEST_DB_URL}'" >> ./core/.env
|
|
|
|
|
- echo "DRUPAL_TEST_WEBDRIVER_HOSTNAME='localhost'" >> ./core/.env
|
|
|
|
|
- echo "DRUPAL_TEST_WEBDRIVER_CHROME_ARGS='--disable-dev-shm-usage --disable-gpu --headless'" >> ./core/.env
|
|
|
|
|
- echo "DRUPAL_TEST_WEBDRIVER_PORT='9515'" >> ./core/.env
|
|
|
|
|
- echo "DRUPAL_NIGHTWATCH_OUTPUT='"nightwatch_output"'" >> ./core/.env
|
|
|
|
|
- cat ./core/.env
|
|
|
|
|
- mkdir -p ./sites/simpletest ./sites/default/files /var/www/.cache/yarn /var/www/.yarn ./nightwatch_output
|
|
|
|
|
- chown -R www-data:www-data ./sites/simpletest ./sites/default/files /var/www/.cache/yarn /var/www/.yarn ./nightwatch_output ./core/.env
|
2023-09-22 05:56:20 +00:00
|
|
|
|
- sudo BABEL_DISABLE_CACHE=1 -u www-data yarn --cwd ./core test:nightwatch --workers=4
|
Issue #3386076 by fjgarlin, catch, longwave, larowlan, mstrelan, el7cosmos, RoSk0, xurizaemon, poker10, alexpott, bbrala, nick_schuch: GitLab CI integration for core
2023-09-13 09:32:38 +00:00
|
|
|
|
artifacts:
|
|
|
|
|
when: always
|
|
|
|
|
expire_in: 6 mos
|
|
|
|
|
reports:
|
|
|
|
|
junit: ./nightwatch_output/*.xml
|
|
|
|
|
paths:
|
|
|
|
|
- ./nightwatch_output
|