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 :
2023-11-03 15:17:09 +00:00
- if : $CI_PIPELINE_SOURCE == "parent_pipeline" && $PERFORMANCE_TEST != "1"
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
.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
2023-10-31 14:15:55 +00:00
.set-simpletest-db : &set-simpletest-db
- |
[ [ $_TARGET_DB == sqlite* ]] && export SIMPLETEST_DB=sqlite://localhost/$CI_PROJECT_DIR/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
.set-directory-settings : &set-directory-settings
- |
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
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
.run-tests : &run-tests
script :
2023-10-31 14:15:55 +00:00
- *set-simpletest-db
- *set-directory-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
# 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
2023-10-31 14:15:55 +00:00
.run-repeat-class-test : &run-repeat-class-test
script :
- *set-simpletest-db
- *set-directory-settings
- echo "ℹ ️ Running class ${REPEAT_TEST_CLASS}"
- |
if [[ $REPEAT_TEST_CLASS == "Drupal\Tests\Change\Me" ]]; then
echo '❗ You need to change the REPEAT_TEST_CLASS variable to an existing class before running the job.'
echo ' You just need to click on the job that you want to run (do not press the play button straight away) and then set the following:'
echo ' "Key" to "REPEAT_TEST_CLASS" and "Value" to "Drupal\Tests\ckeditor5\FunctionalJavascript\MediaLinkabilityTest"';
exit 1;
else
sudo MINK_DRIVER_ARGS_WEBDRIVER="$MINK_DRIVER_ARGS_WEBDRIVER" -u www-data php ./core/scripts/run-tests.sh --color --keep-results --concurrency "$CONCURRENCY" --repeat "100" --sqlite "./sites/default/files/tests.sqlite" --dburl $SIMPLETEST_DB --url $SIMPLETEST_BASE_URL --verbose --non-html --class $REPEAT_TEST_CLASS
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
################
# 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"
2023-11-02 22:49:46 +00:00
KUBERNETES_CPU_REQUEST : "24"
2023-09-16 09:08:36 +00:00
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 :
2023-10-31 14:15:55 +00:00
- *set-simpletest-db
- *set-directory-settings
2023-09-29 09:02:33 +00:00
- 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"
2023-11-02 22:49:46 +00:00
KUBERNETES_CPU_REQUEST : "16"
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
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
2023-11-02 22:49:46 +00:00
KUBERNETES_CPU_REQUEST : "8"
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
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"
2023-11-02 22:49:46 +00:00
KUBERNETES_CPU_REQUEST : "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
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"
2023-11-02 22:49:46 +00:00
KUBERNETES_CPU_REQUEST : "16"
2023-10-04 08:52:51 +00:00
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
2023-11-02 22:49:46 +00:00
KUBERNETES_CPU_REQUEST : "3"
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
services :
- << : *with-database
- << : *with-chrome
script :
2023-10-31 14:15:55 +00:00
- *set-simpletest-db
- export DRUPAL_TEST_DB_URL=$SIMPLETEST_DB
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
2023-10-31 14:15:55 +00:00
'🔁 Repeat Class Test' :
<< : [ *with-composer, *phpunit-artifacts, *setup-webserver, *run-repeat-class-test, *default-job-settings ]
when : manual
interruptible : true
allow_failure : true
variables :
<< : *test-variables
CONCURRENCY : "$CONCURRENCY"
REPEAT_TEST_CLASS : 'Drupal\Tests\Change\Me'
services :
- << : *with-database
2023-11-03 15:17:09 +00:00
'🚲 Performance tests' :
<< : [ *with-composer, *phpunit-artifacts, *setup-webserver, *default-job-settings ]
rules :
- if : $PERFORMANCE_TEST == "1"
variables :
<< : *test-variables
KUBERNETES_CPU_REQUEST : "24"
services :
- << : *with-database
- << : *with-chrome
script :
# Determine DB driver.
- |
[ [ $_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
- export OTEL_COLLECTOR="$OTEL_COLLECTOR"
- 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
- for run in {1..3}; do sudo SIMPLETEST_BASE_URL="$SIMPLETEST_BASE_URL" SIMPLETEST_DB="$SIMPLETEST_DB" MINK_DRIVER_ARGS_WEBDRIVER="$MINK_DRIVER_ARGS_WEBDRIVER" OTEL_COLLECTOR="$OTEL_COLLECTOR" -u www-data ./vendor/bin/phpunit -c core --group OpenTelemetry --log-junit=./sites/default/files/simpletest/phpunit-performance.xml; done