From eba0136d48b759a7ef61067905fa65ad0ee41f66 Mon Sep 17 00:00:00 2001 From: Dave Long <dave@longwaveconsulting.com> Date: Thu, 2 Jan 2025 18:55:52 +0000 Subject: [PATCH] Issue #3476189 by mondrake, cmlara, fjgarlin, murz, longwave, andypost, larowlan: [CI] Use sudo -E to execute run-tests.sh --- .gitlab-ci.yml | 1 - .gitlab-ci/pipeline.yml | 10 +++++----- core/scripts/run-tests.sh | 30 +++++++++++++++++++++--------- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 22526bac8fd2..15b0424da5a8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -183,7 +183,6 @@ default: _TARGET_PHP: "8.3-ubuntu" _TARGET_DB: "mysql-8" PERFORMANCE_TEST: $PERFORMANCE_TEST - OTEL_COLLECTOR: $OTEL_COLLECTOR # Run on MR, schedule, push, parent pipeline and performance test. rules: - if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_ROOT_NAMESPACE == "project" diff --git a/.gitlab-ci/pipeline.yml b/.gitlab-ci/pipeline.yml index 14fc2e5e9b7e..3196e5078226 100644 --- a/.gitlab-ci/pipeline.yml +++ b/.gitlab-ci/pipeline.yml @@ -101,7 +101,7 @@ variables: .run-tests: &run-tests script: # Need to pass this along directly. - - 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 + - sudo -u www-data -E -H 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 .run-repeat-class-test: &run-repeat-class-test script: @@ -113,7 +113,7 @@ variables: 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 + sudo -u www-data -E -H 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 ################ @@ -164,7 +164,7 @@ variables: - <<: *with-chrome script: # Run a small subset of tests to prove non W3C testing still works. - - 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 javascript + - sudo -u www-data -E -H 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 javascript after_script: - sed -i "s#$CI_PROJECT_DIR/##" ./sites/default/files/simpletest/phpunit-*.xml || true @@ -260,7 +260,7 @@ variables: - chown -R www-data:www-data ./sites /var/www - cd core - corepack enable - - sudo -u www-data yarn run test:nightwatch --workers=3 + - sudo -u www-data -E -H yarn run test:nightwatch --workers=3 after_script: - cp /builds/chromedriver.log ./ artifacts: @@ -307,4 +307,4 @@ variables: - 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 - - sudo SIMPLETEST_BASE_URL="http://$HOSTNAME/subdirectory" 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 + - sudo SIMPLETEST_BASE_URL="http://$HOSTNAME/subdirectory" -u www-data -E -H ./vendor/bin/phpunit -c core --group OpenTelemetry --log-junit=./sites/default/files/simpletest/phpunit-performance.xml diff --git a/core/scripts/run-tests.sh b/core/scripts/run-tests.sh index 39a1ae4fee0a..4d93808ae596 100755 --- a/core/scripts/run-tests.sh +++ b/core/scripts/run-tests.sh @@ -479,23 +479,34 @@ function simpletest_script_init() { $host = 'localhost'; $path = ''; $port = '80'; + $php = ""; // Determine location of php command automatically, unless a command line // argument is supplied. - if (!empty($args['php'])) { - $php = $args['php']; - } - elseif ($php_env = getenv('_')) { + if ($php_env = getenv('_')) { // '_' is an environment variable set by the shell. It contains the command // that was executed. $php = $php_env; } - elseif ($sudo = getenv('SUDO_COMMAND')) { + + if ($sudo = getenv('SUDO_COMMAND')) { // 'SUDO_COMMAND' is an environment variable set by the sudo program. - // Extract only the PHP interpreter, not the rest of the command. - [$php] = explode(' ', $sudo, 2); + // This will be set if the script is run directly by sudo or if the + // script is run under a shell started by sudo. + if (str_contains($sudo, basename(__FILE__))) { + // This script may have been directly run by sudo. $php may have the + // path to sudo from getenv('_') if run with the -E option. + // Extract what may be the PHP interpreter. + [$php] = explode(' ', $sudo, 2); + } } - else { + + if (!empty($args['php'])) { + // Caller has specified path to php. Override auto-detection. + $php = $args['php']; + } + + if ($php == "") { simpletest_script_print_error('Unable to automatically determine the path to the PHP interpreter. Supply the --php command line argument.'); simpletest_script_help(); exit(SIMPLETEST_SCRIPT_EXIT_FAILURE); @@ -1161,7 +1172,7 @@ function place_tests_into_bins(array $tests, int $bin_count) { * Initialize the reporter. */ function simpletest_script_reporter_init() { - global $args, $test_list, $results_map; + global $args, $test_list, $results_map, $php; $results_map = [ 'pass' => 'Pass', @@ -1171,6 +1182,7 @@ function simpletest_script_reporter_init() { echo "\n"; echo "Drupal test run\n"; + echo "Using PHP Binary: $php\n"; echo "---------------\n"; echo "\n"; -- GitLab