From 4bb3e4fd0897f30d2538de2b41f9cf4f724ae2d4 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Sat, 16 Sep 2023 10:08:36 +0100
Subject: [PATCH] Issue #3387503 by bbrala: Move Gitlab linting steps to main
 job

(cherry picked from commit 1bdbe868f257692d1b3b213b706a2860c5d27464)
---
 .gitlab-ci.yml          | 154 +++++++++++++++++++++++++++++++++++++++-
 .gitlab-ci/pipeline.yml |  93 ++++--------------------
 2 files changed, 167 insertions(+), 80 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6fd10ec37d89..d73fc6af1588 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,3 +1,5 @@
+# cspell:ignore drupaltestbot drupaltestbotpw codequality Micheh micheh
+
 ################
 # Drupal GitLabCI template.
 #
@@ -46,6 +48,77 @@ variables:
   CONCURRENCY: 32
   GIT_DEPTH: "3"
 
+
+#############
+# Stages    #
+#############
+stages:
+  - 🏗️ Build
+  - 🪄 Lint
+  - 🗜️ Test
+
+#############
+# Templates #
+#############
+
+.default-job-settings: &default-job-settings-lint
+  allow_failure: false
+  variables:
+    _TARGET_PHP: "8.2"
+    _TARGET_DB: "mysql-8"
+  image:
+    name: $_CONFIG_DOCKERHUB_ROOT/php-$_TARGET_PHP-apache:production
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_ROOT_NAMESPACE == "project"
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
+
+.composer-cache: &composer-cache
+  key:
+    files:
+      - ./composer.json
+      - ./composer.lock
+  paths:
+    - ./vendor
+
+.yarn-cache: &yarn-cache
+  key:
+    files:
+      - ./core/package.json
+      - ./core/yarn.lock
+  paths:
+    - ./core/node_modules
+
+.pull-composer-cache: &pull-composer-cache
+  cache:
+    policy: pull
+    <<: *composer-cache
+  dependencies:
+    - '📦️ Composer'
+
+.with-composer-cache: &with-composer-cache
+  needs:
+    - '📦️ Composer'
+  <<: *pull-composer-cache
+
+.with-yarn-cache: &with-yarn-cache
+  dependencies:
+    - '📦️ Yarn'
+  needs:
+    - '📦️ Yarn'
+  cache:
+    policy: pull
+    <<: *yarn-cache
+
+.junit-artifacts: &junit-artifacts
+  artifacts:
+    expose_as: junit
+    expire_in: 6 mos
+    paths:
+      - junit.xml
+    reports:
+      junit: junit.xml
+
+
 ################
 # Stages
 #
@@ -57,7 +130,7 @@ variables:
 ################
 
 .default-stage: &default-stage
-  stage: test
+  stage: 🗜️ Test
   trigger:
     # Rely on the status of the child pipeline.
     strategy: depend
@@ -131,3 +204,82 @@ variables:
 #   variables:
 #     _TARGET_PHP: "8.1"
 #     _TARGET_DB: "php-$_TARGET_PHP-apache"
+
+
+################
+# Build Jobs for linting
+################
+
+'📦️ Composer':
+  <<: *default-job-settings-lint
+  stage: 🏗️ Build
+  cache:
+    <<: *composer-cache
+  artifacts:
+    expire_in: 1 week
+    expose_as: 'web-vendor'
+    paths:
+      - vendor/
+  script:
+      - export
+      - composer validate
+      - composer install
+
+'📦️ Yarn':
+  <<: *default-job-settings-lint
+  stage: 🏗️ Build
+  cache:
+    <<: *yarn-cache
+  artifacts:
+    expire_in: 1 week
+    expose_as: 'yarn-vendor'
+    paths:
+      - core/node_modules/
+  script:
+    # Installs all core javascript dependencies and adds junit formatter.
+    - yarn --cwd ./core add stylelint-junit-formatter
+
+################
+# Lint Jobs
+################
+
+'🧹 PHP Coding standards (PHPCS)':
+  <<: [ *with-composer-cache, *junit-artifacts, *default-job-settings-lint ]
+  stage: 🪄 Lint
+  script:
+    - composer phpcs -- --report-junit=junit.xml --report-full --report-summary
+
+'🧹 PHP Static Analysis (phpstan)':
+  <<: [ *with-composer-cache, *junit-artifacts, *default-job-settings-lint ]
+  stage: 🪄 Lint
+  script:
+    # Turn off apc to avoid corrupt composer cache.
+    - php -d apc.enabled=0 -d apc.enable_cli=0 vendor/bin/phpstan analyze --configuration=./core/phpstan.neon.dist --error-format=junit > junit.xml
+
+'🧹 CSS linting (stylelint)':
+  <<: [ *with-yarn-cache, *junit-artifacts, *default-job-settings-lint ]
+  stage: 🪄 Lint
+  script:
+    - yarn run --cwd=./core lint:css --color --custom-formatter node_modules/stylelint-junit-formatter > junit.xml
+
+'🧹 Compilation check':
+  <<: [ *with-yarn-cache, *default-job-settings-lint ]
+  stage: 🪄 Lint
+  script:
+    - yarn run --cwd=./core build:css --check
+    - cd core && yarn run -s check:ckeditor5
+
+'🧹 JavaScript linting (eslint)':
+  <<: [ *with-yarn-cache, *junit-artifacts, *default-job-settings-lint ]
+  stage: 🪄 Lint
+  script:
+    - yarn --cwd=./core run -s lint:core-js-passing --format junit > junit.xml
+
+'📔 Spell-checking':
+  <<: [ *with-yarn-cache, *default-job-settings-lint ]
+  stage: 🪄 Lint
+  script:
+    - export TARGET_BRANCH=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}${CI_COMMIT_BRANCH}
+    - git fetch -vn --depth=$GIT_DEPTH "${CI_MERGE_REQUEST_PROJECT_URL:-origin}" "+refs/heads/$TARGET_BRANCH:refs/heads/$TARGET_BRANCH"
+    - export MODIFIED=`git diff --name-only refs/heads/$TARGET_BRANCH|while read r;do echo "$CI_PROJECT_DIR/$r";done|tr "\n" " "`
+    - echo $MODIFIED | tr ' ' '\n' | yarn --cwd=./core run -s spellcheck:core --no-must-find-files --file-list stdin
diff --git a/.gitlab-ci/pipeline.yml b/.gitlab-ci/pipeline.yml
index f5e9f5f4344f..7b908820f36f 100644
--- a/.gitlab-ci/pipeline.yml
+++ b/.gitlab-ci/pipeline.yml
@@ -8,13 +8,6 @@ stages:
   ################
   - 🏗️ Build
 
-  ################
-  # Code quality checks
-  #
-  # This stage includes any codebase validation before running tests.
-  ################
-  - 🪄 Lint
-
   ################
   # Test
   #
@@ -81,18 +74,6 @@ stages:
     reports:
       junit: junit.xml
 
-.with-linting: &with-linting
-  needs:
-    - '📦️ Composer'
-    - '🧹 PHP Static Analysis (phpstan)'
-    - '🧹 PHP Coding standards (PHPCS)'
-    - '🧹 Compilation check'
-    - '📦️ Yarn'
-    - '📔 Spell-checking'
-    - '🧹 JavaScript linting (eslint)'
-    - '🧹 CSS linting (stylelint)'
-  <<: *pull-composer-cache
-
 .with-unit-tests: &with-unit-tests
   needs:
     - '⚡️ PHPUnit Unit'
@@ -210,51 +191,6 @@ stages:
     # Installs all core javascript dependencies and adds junit formatter.
     - yarn --cwd ./core add stylelint-junit-formatter
 
-################
-# Lint Jobs
-################
-
-'🧹 PHP Coding standards (PHPCS)':
-  <<: [ *with-composer-cache, *junit-artifacts, *default-job-settings ]
-  stage: 🪄 Lint
-  script:
-    - composer phpcs -- --report-junit=junit.xml --report-full --report-summary
-
-'🧹 PHP Static Analysis (phpstan)':
-  <<: [ *with-composer-cache, *junit-artifacts, *default-job-settings ]
-  stage: 🪄 Lint
-  script:
-    # Turn off apc to avoid corrupt composer cache.
-    - php -d apc.enabled=0 -d apc.enable_cli=0 vendor/bin/phpstan analyze --configuration=./core/phpstan.neon.dist --error-format=junit > junit.xml
-
-'🧹 CSS linting (stylelint)':
-  <<: [ *with-yarn-cache, *junit-artifacts, *default-job-settings ]
-  stage: 🪄 Lint
-  script:
-    - yarn run --cwd=./core lint:css --color --custom-formatter node_modules/stylelint-junit-formatter > junit.xml
-
-'🧹 Compilation check':
-  <<: [ *with-yarn-cache, *default-job-settings ]
-  stage: 🪄 Lint
-  script:
-    - yarn run --cwd=./core build:css --check
-    - cd core && yarn run -s check:ckeditor5
-
-'🧹 JavaScript linting (eslint)':
-  <<: [ *with-yarn-cache, *junit-artifacts, *default-job-settings ]
-  stage: 🪄 Lint
-  script:
-    - yarn --cwd=./core run -s lint:core-js-passing --format junit > junit.xml
-
-'📔 Spell-checking':
-  <<: [ *with-yarn-cache, *default-job-settings ]
-  stage: 🪄 Lint
-  script:
-    - export TARGET_BRANCH=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}${CI_COMMIT_BRANCH}
-    - git fetch -vn --depth=$GIT_DEPTH "${CI_MERGE_REQUEST_PROJECT_URL:-origin}" "+refs/heads/$TARGET_BRANCH:refs/heads/$TARGET_BRANCH"
-    - export MODIFIED=`git diff --name-only refs/heads/$TARGET_BRANCH|while read r;do echo "$CI_PROJECT_DIR/$r";done|tr "\n" " "`
-    - echo $MODIFIED | tr ' ' '\n' | yarn --cwd=./core run -s spellcheck:core --no-must-find-files --file-list stdin
-
 ################
 # Test Jobs
 ################
@@ -271,10 +207,20 @@ stages:
     TESTSUITE: PHPUnit-Unit
     CONCURRENCY: "$CONCURRENCY"
 
+'🌐️️ PHPUnit Functional':
+  <<: [ *with-unit-tests, *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
+  stage: 🗜️ Test
+  parallel: 6
+  variables:
+    <<: *test-variables
+    TESTSUITE: PHPUnit-Functional
+    CONCURRENCY: "$CONCURRENCY"
+  services:
+    - <<: *with-database
+
 '⚙️️ PHPUnit Kernel':
-  <<: [ *with-composer-cache, *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
+  <<: [*with-unit-tests, *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
   stage: 🗜️ Test
-  parallel: 3
   variables:
     <<: *test-variables
     TESTSUITE: PHPUnit-Kernel
@@ -283,7 +229,7 @@ stages:
     - <<: *with-database
 
 '🖱️️️ PHPUnit Functional Javascript':
-  <<: [ *with-linting, *with-unit-tests, *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
+  <<: [ *with-unit-tests, *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
   stage: 🗜️ Test
   variables:
     <<: *test-variables
@@ -294,7 +240,7 @@ stages:
     - <<: *with-chrome
 
 '👷️️️ PHPUnit Build':
-  <<: [ *with-linting, *with-unit-tests, *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
+  <<: [ *with-unit-tests, *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
   stage: 🗜️ Test
   variables:
     <<: *test-variables
@@ -303,17 +249,6 @@ stages:
   services:
     - <<: *with-database
 
-'🌐️️ PHPUnit Functional':
-  <<: [ *with-linting, *with-unit-tests, *phpunit-artifacts, *setup-webserver, *run-tests, *default-job-settings ]
-  stage: 🗜️ Test
-  parallel: 8
-  variables:
-    <<: *test-variables
-    TESTSUITE: PHPUnit-Functional
-    CONCURRENCY: "$CONCURRENCY"
-  services:
-    - <<: *with-database
-
 '🦉️️️ Nightwatch':
   <<: [ *with-composer-yarn-and-unit-tests, *setup-webserver, *default-job-settings ]
   stage: 🗜️ Test
-- 
GitLab