Verified Commit d60aab72 authored by Dave Long's avatar Dave Long
Browse files

Issue #3386566 by larowlan, fjgarlin, smustgrave, catch: Add support for 'test...

Issue #3386566 by larowlan, fjgarlin, smustgrave, catch: Add support for 'test only' changes to gitlab CI

(cherry picked from commit 3f49e8cd)
parent 28ada580
Loading
Loading
Loading
Loading
Loading
+48 −0
Original line number Diff line number Diff line
@@ -202,6 +202,54 @@ stages:
  services:
    - <<: *with-database

'🩹 Test-only changes':
  <<: [ *with-composer-cache, *phpunit-artifacts, *setup-webserver, *default-job-settings ]
  stage: 🗜️ Test
  when: manual
  interruptible: true
  allow_failure: true
  variables:
    <<: *test-variables
  services:
    - <<: *with-database
    - <<: *with-chrome
  script:
    #  Determine DB driver.
    - |
      [[ $_TARGET_DB_TYPE == "sqlite" ]] && export SIMPLETEST_DB=sqlite://localhost/subdirectory/sites/default/files/db.sqlite?module=sqlite
      [[ $_TARGET_DB_TYPE == "mysql" ]] && export SIMPLETEST_DB=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
      [[ $_TARGET_DB_TYPE == "mariadb" ]] && export SIMPLETEST_DB=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
      [[ $_TARGET_DB_TYPE == "pgsql" ]] && export SIMPLETEST_DB=pgsql://$POSTGRES_USER:$POSTGRES_PASSWORD@database/$POSTGRES_DB?module=pgsql
    - export
    - 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

'⚙️️ PHPUnit Kernel':
  <<: [*with-composer-cache, *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
  stage: 🗜️ Test