diff options
Diffstat (limited to '.gitlab/ci')
-rw-r--r-- | .gitlab/ci/cng.gitlab-ci.yml | 53 | ||||
-rw-r--r-- | .gitlab/ci/docs.gitlab-ci.yml | 6 | ||||
-rw-r--r-- | .gitlab/ci/frontend.gitlab-ci.yml | 7 | ||||
-rw-r--r-- | .gitlab/ci/global.gitlab-ci.yml | 30 | ||||
-rw-r--r-- | .gitlab/ci/memory.gitlab-ci.yml | 27 | ||||
-rw-r--r-- | .gitlab/ci/qa.gitlab-ci.yml | 4 | ||||
-rw-r--r-- | .gitlab/ci/rails.gitlab-ci.yml | 86 | ||||
-rw-r--r-- | .gitlab/ci/reports.gitlab-ci.yml | 3 | ||||
-rw-r--r-- | .gitlab/ci/review-apps/main.gitlab-ci.yml | 48 | ||||
-rw-r--r-- | .gitlab/ci/review-apps/qa.gitlab-ci.yml | 12 | ||||
-rw-r--r-- | .gitlab/ci/rules.gitlab-ci.yml | 608 | ||||
-rw-r--r-- | .gitlab/ci/setup.gitlab-ci.yml | 2 | ||||
-rw-r--r-- | .gitlab/ci/test-metadata.gitlab-ci.yml | 6 | ||||
-rw-r--r-- | .gitlab/ci/workhorse.gitlab-ci.yml | 4 |
14 files changed, 393 insertions, 503 deletions
diff --git a/.gitlab/ci/cng.gitlab-ci.yml b/.gitlab/ci/cng.gitlab-ci.yml index bf439288be2..d720ec5ae45 100644 --- a/.gitlab/ci/cng.gitlab-ci.yml +++ b/.gitlab/ci/cng.gitlab-ci.yml @@ -1,10 +1,51 @@ +cloud-native-image-env: + extends: + - .default-retry + - .cng:rules + image: ${GITLAB_DEPENDENCY_PROXY}ruby:2.7-alpine3.13 + stage: post-test + before_script: + - source ./scripts/utils.sh + - install_gitlab_gem + script: + - 'ruby -r./scripts/trigger-build.rb -e "puts Trigger.variables_for_env_file(Trigger::CNG.new.variables)" > build.env' + - cat build.env + artifacts: + reports: + dotenv: build.env + paths: + - build.env + expire_in: 7 days + when: always + cloud-native-image: extends: .cng:rules - image: ${GITLAB_DEPENDENCY_PROXY}ruby:2.7-alpine - dependencies: [] stage: post-test + needs: ["cloud-native-image-env"] + inherit: + variables: false variables: - GIT_DEPTH: "1" - script: - - install_gitlab_gem - - ./scripts/trigger-build cng + TOP_UPSTREAM_SOURCE_PROJECT: "${TOP_UPSTREAM_SOURCE_PROJECT}" + TOP_UPSTREAM_SOURCE_REF: "${TOP_UPSTREAM_SOURCE_REF}" + TOP_UPSTREAM_SOURCE_JOB: "${TOP_UPSTREAM_SOURCE_JOB}" + TOP_UPSTREAM_SOURCE_SHA: "${TOP_UPSTREAM_SOURCE_SHA}" + TOP_UPSTREAM_MERGE_REQUEST_PROJECT_ID: "${TOP_UPSTREAM_MERGE_REQUEST_PROJECT_ID}" + TOP_UPSTREAM_MERGE_REQUEST_IID: "${TOP_UPSTREAM_MERGE_REQUEST_IID}" + GITLAB_REF_SLUG: "${GITLAB_REF_SLUG}" + # CNG pipeline specific variables + GITLAB_VERSION: "${GITLAB_VERSION}" + GITLAB_TAG: "${GITLAB_TAG}" + GITLAB_ASSETS_TAG: "${GITLAB_ASSETS_TAG}" + FORCE_RAILS_IMAGE_BUILDS: "${FORCE_RAILS_IMAGE_BUILDS}" + CE_PIPELINE: "${CE_PIPELINE}" # Based on https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-exists, `if: '$CE_PIPELINE'` will evaluate to `false` when this variable is empty + EE_PIPELINE: "${EE_PIPELINE}" # Based on https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-exists, `if: '$EE_PIPELINE'` will evaluate to `false` when this variable is empty + GITLAB_SHELL_VERSION: "${GITLAB_SHELL_VERSION}" + GITLAB_ELASTICSEARCH_INDEXER_VERSION: "${GITLAB_ELASTICSEARCH_INDEXER_VERSION}" + GITLAB_KAS_VERSION: "${GITLAB_KAS_VERSION}" + GITLAB_WORKHORSE_VERSION: "${GITLAB_WORKHORSE_VERSION}" + GITLAB_PAGES_VERSION: "${GITLAB_PAGES_VERSION}" + GITALY_SERVER_VERSION: "${GITALY_SERVER_VERSION}" + trigger: + project: gitlab-org/build/CNG + branch: $TRIGGER_BRANCH + strategy: depend diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml index c439e9a7c80..8b7691045cb 100644 --- a/.gitlab/ci/docs.gitlab-ci.yml +++ b/.gitlab/ci/docs.gitlab-ci.yml @@ -28,7 +28,7 @@ review-docs-deploy: extends: .review-docs script: - - ./scripts/trigger-build docs deploy + - ./scripts/trigger-build.rb docs deploy # Cleanup remote environment of gitlab-docs review-docs-cleanup: @@ -37,14 +37,14 @@ review-docs-cleanup: name: review-docs/mr-${CI_MERGE_REQUEST_IID} action: stop script: - - ./scripts/trigger-build docs cleanup + - ./scripts/trigger-build.rb docs cleanup docs-lint markdown: extends: - .default-retry - .docs:rules:docs-lint # When updating the image version here, update it in /scripts/lint-doc.sh too. - image: registry.gitlab.com/gitlab-org/gitlab-docs/lint-markdown:alpine-3.15-vale-2.14.0-markdownlint-0.30.0 + image: registry.gitlab.com/gitlab-org/gitlab-docs/lint-markdown:alpine-3.15-vale-2.15.0-markdownlint-0.31.0 stage: lint needs: [] script: diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index 1dd5285e0ae..ef5af342544 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -11,7 +11,7 @@ - .default-retry - .default-before_script - .assets-compile-cache - image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:ruby-2.7-git-2.33-lfs-2.9-node-14.15-yarn-1.22-graphicsmagick-1.3.36 + image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:debian-${DEBIAN_VERSION}-ruby-2.7-git-2.33-lfs-2.9-node-14.15-yarn-1.22-graphicsmagick-1.3.36 variables: SETUP_DB: "false" WEBPACK_VENDOR_DLL: "true" @@ -306,11 +306,6 @@ qa-frontend-node:latest: - .qa-frontend-node - .frontend:rules:qa-frontend-node-latest image: ${GITLAB_DEPENDENCY_PROXY}node:latest - # This is a workaround for https://github.com/webpack/webpack/issues/14532 until - # we can upgrade to Webpack 5 and switch to SHA256: https://gitlab.com/gitlab-org/gitlab/-/issues/350120 - script: - - *yarn-install - - run_timed_command "retry yarn run webpack-prod-node-latest" webpack-dev-server: extends: diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml index 73e4712cc89..33b04faf731 100644 --- a/.gitlab/ci/global.gitlab-ci.yml +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -18,7 +18,7 @@ - source scripts/prepare_build.sh .ruby-gems-cache: &ruby-gems-cache - key: "ruby-gems-v1" + key: "ruby-gems-${DEBIAN_VERSION}" paths: - vendor/ruby/ policy: pull @@ -28,7 +28,7 @@ policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. .gitaly-ruby-gems-cache: &gitaly-ruby-gems-cache - key: "gitaly-ruby-gems-v1" + key: "gitaly-ruby-gems-${DEBIAN_VERSION}" paths: - vendor/gitaly-ruby/ policy: pull @@ -41,7 +41,7 @@ key: files: - GITALY_SERVER_VERSION - prefix: "gitaly-binaries" + prefix: "gitaly-binaries-${DEBIAN-VERSION}" paths: - tmp/tests/gitaly/_build/bin/ - tmp/tests/gitaly/_build/deps/git/install/ @@ -56,7 +56,7 @@ policy: pull .go-pkg-cache: &go-pkg-cache - key: "go-pkg-v1" + key: "go-pkg-${DEBIAN_VERSION}" paths: - .go/pkg/mod/ policy: pull @@ -66,7 +66,7 @@ policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. .node-modules-cache: &node-modules-cache - key: "node-modules-${NODE_ENV}-v1" + key: "node-modules-${DEBIAN_VERSION}-${NODE_ENV}" paths: - node_modules/ - tmp/cache/webpack-dlls/ @@ -77,7 +77,7 @@ policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. .assets-cache: &assets-cache - key: "assets-${NODE_ENV}-v2" + key: "assets-${DEBIAN_VERSION}-${NODE_ENV}" paths: - assets-hash.txt - public/assets/webpack/ @@ -91,7 +91,7 @@ policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. .storybook-node-modules-cache: &storybook-node-modules-cache - key: "storybook-node-modules-${NODE_ENV}-v1" + key: "storybook-node-modules-${DEBIAN_VERSION}-${NODE_ENV}" paths: - storybook/node_modules/ policy: pull @@ -101,7 +101,7 @@ policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. .rubocop-cache: &rubocop-cache - key: "rubocop-v1" + key: "rubocop-${DEBIAN_VERSION}" paths: - tmp/rubocop_cache/ policy: pull @@ -113,7 +113,7 @@ policy: push .qa-ruby-gems-cache: &qa-ruby-gems-cache - key: "qa-ruby-gems-v1-debian-buster" + key: "qa-ruby-gems-${DEBIAN_VERSION}" paths: - qa/vendor/ruby/ policy: pull @@ -213,7 +213,7 @@ - *storybook-node-modules-cache-push .use-pg11: - image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:ruby-2.7.patched-golang-1.16-git-2.33-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36 + image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:debian-${DEBIAN_VERSION}-ruby-2.7.patched-golang-1.16-git-2.33-lfs-2.9-chrome-97-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36 services: - name: postgres:11.6 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -222,7 +222,7 @@ POSTGRES_HOST_AUTH_METHOD: trust .use-pg12: - image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:ruby-2.7.patched-golang-1.16-git-2.33-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36 + image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:debian-${DEBIAN_VERSION}-ruby-2.7.patched-golang-1.16-git-2.33-lfs-2.9-chrome-97-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36 services: - name: postgres:12 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -231,7 +231,7 @@ POSTGRES_HOST_AUTH_METHOD: trust .use-pg13: - image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:ruby-2.7.patched-golang-1.16-git-2.33-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-13-graphicsmagick-1.3.36 + image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:debian-${DEBIAN_VERSION}-ruby-2.7.patched-golang-1.16-git-2.33-lfs-2.9-chrome-97-node-14.15-yarn-1.22-postgresql-13-graphicsmagick-1.3.36 services: - name: postgres:13 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -240,7 +240,7 @@ POSTGRES_HOST_AUTH_METHOD: trust .use-pg11-ee: - image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:ruby-2.7.patched-golang-1.16-git-2.33-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36 + image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:debian-${DEBIAN_VERSION}-ruby-2.7.patched-golang-1.16-git-2.33-lfs-2.9-chrome-97-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36 services: - name: postgres:11.6 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -251,7 +251,7 @@ POSTGRES_HOST_AUTH_METHOD: trust .use-pg12-ee: - image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:ruby-2.7.patched-golang-1.16-git-2.33-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36 + image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:debian-${DEBIAN_VERSION}-ruby-2.7.patched-golang-1.16-git-2.33-lfs-2.9-chrome-97-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36 services: - name: postgres:12 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -262,7 +262,7 @@ POSTGRES_HOST_AUTH_METHOD: trust .use-pg13-ee: - image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:ruby-2.7.patched-golang-1.16-git-2.33-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-13-graphicsmagick-1.3.36 + image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:debian-${DEBIAN_VERSION}-ruby-2.7.patched-golang-1.16-git-2.33-lfs-2.9-chrome-97-node-14.15-yarn-1.22-postgresql-13-graphicsmagick-1.3.36 services: - name: postgres:13 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] diff --git a/.gitlab/ci/memory.gitlab-ci.yml b/.gitlab/ci/memory.gitlab-ci.yml index 9234b116ff8..c6572d9709c 100644 --- a/.gitlab/ci/memory.gitlab-ci.yml +++ b/.gitlab/ci/memory.gitlab-ci.yml @@ -11,34 +11,9 @@ metrics: "${METRICS_FILE}" expire_in: 31d -memory-static: - extends: .only-code-memory-job-base - stage: test - needs: ["setup-test-env"] - variables: - SETUP_DB: "false" - MEMORY_BUNDLE_MEM_FILE: "tmp/memory_bundle_mem.txt" - MEMORY_BUNDLE_OBJECTS_FILE: "tmp/memory_bundle_objects.txt" - script: - # Uses two different reports from the 'derailed_benchmars' gem. - - # Loads each of gems in the Gemfile and checks how much memory they consume when they are required. - # 'derailed_benchmarks' internally uses 'get_process_mem' - - bundle exec derailed bundle:mem > "${MEMORY_BUNDLE_MEM_FILE}" - - scripts/generate-gems-size-metrics-static "${MEMORY_BUNDLE_MEM_FILE}" >> "${METRICS_FILE}" - - # Outputs detailed information about objects created while gems are loaded. - # 'derailed_benchmarks' internally uses 'memory_profiler' - - bundle exec derailed bundle:objects > "${MEMORY_BUNDLE_OBJECTS_FILE}" - - scripts/generate-gems-memory-metrics-static "${MEMORY_BUNDLE_OBJECTS_FILE}" >> "${METRICS_FILE}" - artifacts: - paths: - - "${METRICS_FILE}" - - "${MEMORY_BUNDLE_MEM_FILE}" - - "${MEMORY_BUNDLE_OBJECTS_FILE}" # Show memory usage caused by invoking require per gem. -# Unlike `memory-static`, it hits the app with one request to ensure that any last minute require-s have been called. +# Hits the app with one request to ensure that any last minute require-s have been called. # The application is booted in `production` environment. # All tests are run without a webserver (directly using Rack::Mock by default). memory-on-boot: diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml index b12f76f2823..77d12a3e848 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -73,7 +73,7 @@ update-qa-cache: - echo $exit_code - | if [ $exit_code -eq 0 ]; then - ./scripts/trigger-build omnibus + ./scripts/trigger-build.rb omnibus elif [ $exit_code -eq 1 ]; then exit 1 else @@ -108,7 +108,7 @@ update-qa-cache: if [[ $feature_flags ]]; then export GITLAB_QA_OPTIONS="--set-feature-flags $feature_flags" echo $GITLAB_QA_OPTIONS - ./scripts/trigger-build omnibus + ./scripts/trigger-build.rb omnibus else echo "No changed feature flag found to test. The tests are skipped if the flag was removed." fi diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index 1d2f94b616d..8a4ea690c60 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -29,7 +29,9 @@ GITLAB_USE_MODEL_LOAD_BALANCING: "true" .rspec-base: - extends: .rails-job-base + extends: + - .rails-job-base + - .base-artifacts stage: test variables: RUBY_GC_MALLOC_LIMIT: 67108864 @@ -40,6 +42,8 @@ script: - !reference [.base-script, script] - rspec_paralellized_job "--tag ~quarantine --tag ~geo --tag ~level:migration" + +.base-artifacts: artifacts: expire_in: 31d when: always @@ -48,16 +52,16 @@ - crystalball/ - deprecations/ - knapsack/ - - rspec_flaky/ - - rspec_profiling/ + - rspec/ - tmp/capybara/ - - tmp/memory_test/ - log/*.log reports: - junit: junit_rspec.xml + junit: ${JUNIT_RESULT_FILE} .rspec-base-migration: - extends: .rails:rules:ee-and-foss-migration + extends: + - .base-artifacts + - .rails:rules:ee-and-foss-migration script: - !reference [.base-script, script] - rspec_paralellized_job "--tag ~quarantine --tag ~geo --tag level:migration" @@ -307,6 +311,8 @@ rspec system pg12: - .rspec-base-pg12 - .rails:rules:ee-and-foss-system - .rspec-system-parallel + variables: + DEBUG_GITLAB_TRANSACTION_STACK: "true" rspec system pg12 minimal: extends: @@ -335,13 +341,9 @@ rspec fast_spec_helper: - .rspec-base-pg12 - .rails:rules:ee-and-foss-fast_spec_helper script: - - bin/rspec spec/fast_spec_helper.rb - -rspec fast_spec_helper minimal: - extends: - - rspec fast_spec_helper - - .minimal-rspec-tests - - .rails:rules:ee-and-foss-fast_spec_helper:minimal + - fast_spec_helper_specs=$(git grep -l -E '^require.*fast_spec_helper') + # Load fast_spec_helper as well just in case there are no specs available. + - bin/rspec --dry-run spec/fast_spec_helper.rb $fast_spec_helper_specs db:rollback: extends: .db-job-base @@ -427,6 +429,13 @@ db:check-migrations-decomposed: - .decomposed-database - .rails:rules:decomposed-databases +db:migrate-non-superuser: + extends: + - .db-job-base + - .rails:rules:ee-and-foss-mr-with-migration + script: + - bundle exec rake gitlab:db:reset_as_non_superuser + db:gitlabcom-database-testing: extends: .rails:rules:db:gitlabcom-database-testing stage: test @@ -436,7 +445,7 @@ db:gitlabcom-database-testing: script: - source scripts/utils.sh - install_gitlab_gem - - ./scripts/trigger-build gitlab-com-database-testing + - ./scripts/trigger-build.rb gitlab-com-database-testing gitlab:setup: extends: .db-job-base @@ -554,7 +563,6 @@ rspec:coverage: - rspec-ee integration pg12 geo minimal - rspec-ee system pg12 geo minimal # Memory jobs - - memory-static - memory-on-boot # As-if-FOSS jobs - rspec migration pg12-as-if-foss @@ -571,7 +579,6 @@ rspec:coverage: - rspec system pg12-as-if-foss decomposed script: - run_timed_command "bundle exec scripts/merge-simplecov" - - run_timed_command "bundle exec scripts/gather-test-memory-data" coverage: '/LOC \((\d+\.\d+%)\) covered.$/' artifacts: name: coverage @@ -580,7 +587,6 @@ rspec:coverage: - coverage/index.html - coverage/assets/ - coverage/lcov/ - - tmp/memory_test/ reports: cobertura: coverage/coverage.xml @@ -621,54 +627,26 @@ rspec:feature-flags: run_timed_command "bundle exec scripts/used-feature-flags"; fi -rspec:skipped-flaky-tests-report: +rspec:flaky-tests-report: extends: - .default-retry - - .rails:rules:skipped-flaky-tests-report - image: ruby:2.7-alpine + - .rails:rules:flaky-tests-report stage: post-test # We cannot use needs since it would mean needing 84 jobs (since most are parallelized) # so we use `dependencies` here. - dependencies: - # FOSS/EE jobs - - rspec migration pg12 - - rspec unit pg12 - - rspec integration pg12 - - rspec system pg12 - # FOSS/EE minimal jobs - - rspec migration pg12 minimal - - rspec unit pg12 minimal - - rspec integration pg12 minimal - - rspec system pg12 minimal - # EE jobs - - rspec-ee migration pg12 - - rspec-ee unit pg12 - - rspec-ee integration pg12 - - rspec-ee system pg12 - # EE minimal jobs - - rspec-ee migration pg12 minimal - - rspec-ee unit pg12 minimal - - rspec-ee integration pg12 minimal - - rspec-ee system pg12 minimal - # Geo jobs - - rspec-ee unit pg12 geo - - rspec-ee integration pg12 geo - - rspec-ee system pg12 geo - # Geo minimal jobs - - rspec-ee unit pg12 geo minimal - - rspec-ee integration pg12 geo minimal - - rspec-ee system pg12 geo minimal + dependencies: !reference ["rspec:coverage", "dependencies"] variables: - SKIPPED_FLAKY_TESTS_REPORT: skipped_flaky_tests_report.txt + SKIPPED_FLAKY_TESTS_REPORT_PATH: rspec/flaky/skipped_flaky_tests_report.txt + RETRIED_TESTS_REPORT_PATH: rspec/flaky/retried_tests_report.txt before_script: - - 'echo "SKIP_FLAKY_TESTS_AUTOMATICALLY: $SKIP_FLAKY_TESTS_AUTOMATICALLY"' - - mkdir -p rspec_flaky + - source scripts/utils.sh + - source scripts/rspec_helpers.sh script: - - find rspec_flaky/ -type f -name 'skipped_flaky_tests_*_report.txt' -exec cat {} + >> "${SKIPPED_FLAKY_TESTS_REPORT}" + - generate_flaky_tests_reports artifacts: expire_in: 31d paths: - - ${SKIPPED_FLAKY_TESTS_REPORT} + - rspec/ # EE/FOSS: default refs (MRs, default branch, schedules) jobs # ####################################################### diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml index 6d58bbf9682..b9d2e31191a 100644 --- a/.gitlab/ci/reports.gitlab-ci.yml +++ b/.gitlab/ci/reports.gitlab-ci.yml @@ -112,7 +112,6 @@ yarn-audit-dependency_scanning: name: registry.gitlab.com/gitlab-com/gl-security/security-research/package-hunter-cli:1.1.0 entrypoint: [""] variables: - DEBUG: '*' HTR_user: '$PACKAGE_HUNTER_USER' HTR_pass: '$PACKAGE_HUNTER_PASS' needs: [] @@ -121,7 +120,7 @@ yarn-audit-dependency_scanning: - rm -r spec locale .git app/assets/images doc/ - cd .. && tar -I "gzip --best" -cf gitlab.tgz gitlab/ script: - - node /usr/src/app/cli.js analyze --format gitlab --manager ${PACKAGE_MANAGER} gitlab.tgz | tee ${CI_PROJECT_DIR}/gl-dependency-scanning-report.json + - DEBUG=* node /usr/src/app/cli.js analyze --format gitlab --manager ${PACKAGE_MANAGER} gitlab.tgz | tee ${CI_PROJECT_DIR}/gl-dependency-scanning-report.json artifacts: paths: - gl-dependency-scanning-report.json diff --git a/.gitlab/ci/review-apps/main.gitlab-ci.yml b/.gitlab/ci/review-apps/main.gitlab-ci.yml index 16ef3c82cda..d083f876b03 100644 --- a/.gitlab/ci/review-apps/main.gitlab-ci.yml +++ b/.gitlab/ci/review-apps/main.gitlab-ci.yml @@ -16,20 +16,58 @@ include: - source ./scripts/review_apps/review-apps.sh - install_api_client_dependencies_with_apk -review-build-cng: +review-build-cng-env: extends: - .default-retry - .review:rules:review-build-cng image: ${GITLAB_DEPENDENCY_PROXY}ruby:2.7-alpine3.13 stage: prepare - variables: - CNG_PROJECT_ACCESS_TOKEN: "${CNG_MIRROR_PROJECT_ACCESS_TOKEN}" # "Multi-pipeline (from 'gitlab-org/gitlab' 'review-build-cng' job)" at https://gitlab.com/gitlab-org/build/CNG-mirror/-/settings/access_tokens - CNG_PROJECT_PATH: "gitlab-org/build/CNG-mirror" + needs: [] before_script: - source ./scripts/utils.sh - install_gitlab_gem script: - - ./scripts/trigger-build cng + - 'ruby -r./scripts/trigger-build.rb -e "puts Trigger.variables_for_env_file(Trigger::CNG.new.variables)" > build.env' + - cat build.env + artifacts: + reports: + dotenv: build.env + paths: + - build.env + expire_in: 7 days + when: always + +review-build-cng: + extends: .review:rules:review-build-cng + stage: prepare + needs: ["review-build-cng-env"] + inherit: + variables: false + variables: + TOP_UPSTREAM_SOURCE_PROJECT: "${TOP_UPSTREAM_SOURCE_PROJECT}" + TOP_UPSTREAM_SOURCE_REF: "${TOP_UPSTREAM_SOURCE_REF}" + TOP_UPSTREAM_SOURCE_JOB: "${TOP_UPSTREAM_SOURCE_JOB}" + TOP_UPSTREAM_SOURCE_SHA: "${TOP_UPSTREAM_SOURCE_SHA}" + TOP_UPSTREAM_MERGE_REQUEST_PROJECT_ID: "${TOP_UPSTREAM_MERGE_REQUEST_PROJECT_ID}" + TOP_UPSTREAM_MERGE_REQUEST_IID: "${TOP_UPSTREAM_MERGE_REQUEST_IID}" + GITLAB_REF_SLUG: "${GITLAB_REF_SLUG}" + # CNG pipeline specific variables + GITLAB_VERSION: "${GITLAB_VERSION}" + GITLAB_TAG: "${GITLAB_TAG}" + GITLAB_ASSETS_TAG: "${GITLAB_ASSETS_TAG}" + FORCE_RAILS_IMAGE_BUILDS: "${FORCE_RAILS_IMAGE_BUILDS}" + CE_PIPELINE: "${CE_PIPELINE}" # Based on https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-exists, `if: '$CE_PIPELINE'` will evaluate to `false` when this variable is empty + EE_PIPELINE: "${EE_PIPELINE}" # Based on https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-exists, `if: '$EE_PIPELINE'` will evaluate to `false` when this variable is empty + GITLAB_SHELL_VERSION: "${GITLAB_SHELL_VERSION}" + GITLAB_ELASTICSEARCH_INDEXER_VERSION: "${GITLAB_ELASTICSEARCH_INDEXER_VERSION}" + GITLAB_KAS_VERSION: "${GITLAB_KAS_VERSION}" + GITLAB_WORKHORSE_VERSION: "${GITLAB_WORKHORSE_VERSION}" + GITLAB_PAGES_VERSION: "${GITLAB_PAGES_VERSION}" + GITALY_SERVER_VERSION: "${GITALY_SERVER_VERSION}" + trigger: + project: gitlab-org/build/CNG-mirror + branch: $TRIGGER_BRANCH + strategy: depend .review-workflow-base: extends: diff --git a/.gitlab/ci/review-apps/qa.gitlab-ci.yml b/.gitlab/ci/review-apps/qa.gitlab-ci.yml index 4ef6efa2604..eaf6429ad58 100644 --- a/.gitlab/ci/review-apps/qa.gitlab-ci.yml +++ b/.gitlab/ci/review-apps/qa.gitlab-ci.yml @@ -27,11 +27,13 @@ - echo "${CI_ENVIRONMENT_URL}" - cd qa script: - - | - bin/test "${QA_SCENARIO}" "${CI_ENVIRONMENT_URL}" \ - -- \ - --color --format documentation \ - --format RspecJunitFormatter --out tmp/rspec.xml + - qa_run_status=0 + - bin/test "${QA_SCENARIO}" "${CI_ENVIRONMENT_URL}" -- --color --format documentation --format RspecJunitFormatter --out tmp/rspec.xml || qa_run_status=$? + - if [ ${qa_run_status} -ne 0 ]; then + release_sha=$(echo "${CI_MERGE_REQUEST_SOURCE_BRANCH_SHA:-${CI_COMMIT_SHA}}" | cut -c1-11); + echo "Errors can be found at https://sentry.gitlab.net/gitlab/gitlab-review-apps/releases/${release_sha}/all-events/."; + fi + - exit ${qa_run_status} artifacts: paths: - qa/tmp diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index 008b62f6a0f..a4bb99c49ad 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -73,6 +73,9 @@ .if-security-merge-request: &if-security-merge-request if: '$CI_PROJECT_NAMESPACE == "gitlab-org/security" && $CI_MERGE_REQUEST_IID' +.if-fork-merge-request: &if-fork-merge-request + if: '$CI_PROJECT_NAMESPACE !~ /^gitlab(-org)?($|\/)/ && $CI_MERGE_REQUEST_IID && $CI_MERGE_REQUEST_LABELS !~ /pipeline:run-all-rspec/' + .if-default-branch-schedule-2-hourly: &if-default-branch-schedule-2-hourly if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == "schedule" && $FREQUENCY == "2-hourly"' @@ -121,15 +124,13 @@ .if-security-pipeline-merge-result: &if-security-pipeline-merge-result if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH && $CI_PROJECT_NAMESPACE == "gitlab-org/security" && $GITLAB_USER_LOGIN == "gitlab-release-tools-bot"' -.if-skip-flaky-tests-automatically: &if-skip-flaky-tests-automatically - if: '$SKIP_FLAKY_TESTS_AUTOMATICALLY == "true"' - #################### # Changes patterns # #################### .ci-patterns: &ci-patterns - ".gitlab-ci.yml" - ".gitlab/ci/**/*" + - "scripts/rspec_helpers.sh" .ci-build-images-patterns: &ci-build-images-patterns - ".gitlab-ci.yml" @@ -143,7 +144,7 @@ - ".gitlab/ci/review-apps/**/*" - "scripts/review_apps/base-config.yaml" - "scripts/review_apps/review-apps.sh" - - "scripts/trigger-build" + - "scripts/trigger-build.rb" - "{,ee/,jh/}{bin,config}/**/*.rb" .ci-qa-patterns: &ci-qa-patterns @@ -232,6 +233,9 @@ .controllers-patterns: &controllers-patterns - "{,ee/,jh/}{app/controllers}/**/*" +.models-patterns: &models-patterns + - "{,ee/,jh/}{app/models}/**/*" + .startup-css-patterns: &startup-css-patterns - "{,ee/,jh/}app/assets/stylesheets/startup/**/*" @@ -248,6 +252,7 @@ - ".gitlab-ci.yml" - ".gitlab/ci/**/*" - "*_VERSION" + - "scripts/rspec_helpers.sh" # DB patterns + .ci-patterns .db-patterns: &db-patterns @@ -456,6 +461,106 @@ .feature-flag-development-config-patterns: &feature-flag-development-config-patterns - "{,ee/}config/feature_flags/{development,ops}/*.yml" +################## +# Conditions set # +################## +.strict-ee-only-rules: + rules: + - <<: *if-not-ee + when: never + - <<: *if-jh + when: never + +.as-if-jh-default-exclusion-rules: + rules: + - <<: *if-security-merge-request + when: never + - <<: *if-merge-request-targeting-stable-branch + when: never + - <<: *if-stable-branch-refs + when: never + - <<: *if-merge-request-labels-as-if-jh + allow_failure: true + +.rails:rules:minimal-default-rules: + rules: + - <<: *if-merge-request-approved + when: never + - <<: *if-automated-merge-request + when: never + - <<: *if-security-merge-request + when: never + + +.rails:rules:ee-and-foss-default-rules: + rules: + - <<: *if-merge-request-labels-run-all-rspec + - <<: *if-merge-request + changes: *core-backend-patterns + - <<: *if-merge-request + changes: *ci-patterns + - <<: *if-automated-merge-request + changes: *backend-patterns + - <<: *if-security-merge-request + changes: *backend-patterns + - <<: *if-merge-request-not-approved + when: never + +.rails:rules:as-if-foss-migration-unit-integration:minimal-default-rules: + rules: + - <<: *if-merge-request + changes: *core-backend-patterns + when: never + - <<: *if-merge-request + changes: *ci-patterns + when: never + +.rails:rules:unit-integration:minimal-default-rules: + rules: + - <<: *if-merge-request-labels-run-all-rspec + when: never + - !reference [".rails:rules:as-if-foss-migration-unit-integration:minimal-default-rules", rules] + +.rails:rules:system-default-rules: + rules: + - <<: *if-merge-request-labels-run-all-rspec + - <<: *if-merge-request + changes: *core-backend-patterns + - <<: *if-merge-request + changes: *workhorse-patterns + - <<: *if-merge-request + changes: *ci-patterns + - <<: *if-automated-merge-request + changes: *code-backstage-patterns + - <<: *if-security-merge-request + changes: *code-backstage-patterns + - <<: *if-merge-request-not-approved + when: never + +.rails:rules:system:minimal-default-rules: + rules: + - <<: *if-merge-request-labels-run-all-rspec + when: never + - <<: *if-merge-request + changes: *core-backend-patterns + when: never + - <<: *if-merge-request + changes: *workhorse-patterns + when: never + - <<: *if-merge-request + changes: *ci-patterns + when: never + - <<: *if-merge-request + changes: *code-backstage-patterns + +.rails:rules:previous-failed-tests-default-rules: + rules: + - <<: *if-security-merge-request + when: never + - <<: *if-merge-request-labels-run-all-rspec + - <<: *if-merge-request + changes: *code-backstage-patterns + ################ # Shared rules # ################ @@ -519,7 +624,6 @@ rules: - <<: *if-default-refs changes: *code-backstage-patterns - when: on_success .dev-fixtures:rules:ee-only: rules: @@ -527,7 +631,6 @@ when: never - <<: *if-default-refs changes: *code-backstage-patterns - when: on_success ############## # Docs rules # @@ -543,7 +646,6 @@ rules: - <<: *if-default-refs changes: *docs-patterns - when: on_success .docs:rules:deprecations-and-removals: rules: @@ -553,14 +655,12 @@ ################## # GraphQL rules # ################## - .graphql:rules:graphql-verify: rules: - <<: *if-not-ee when: never - <<: *if-default-refs changes: *code-backstage-qa-patterns - when: on_success ################## # Frontend rules # @@ -572,11 +672,13 @@ - <<: *if-merge-request-labels-run-review-app - <<: *if-auto-deploy-branches - changes: *code-qa-patterns + - changes: *workhorse-patterns .frontend:rules:compile-test-assets: rules: - - changes: *code-backstage-qa-patterns - <<: *if-merge-request-labels-run-all-rspec + - changes: *code-backstage-qa-patterns + - changes: *workhorse-patterns .frontend:rules:compile-test-assets-as-if-foss: rules: @@ -586,23 +688,19 @@ - <<: *if-merge-request-labels-run-all-rspec - changes: *code-backstage-qa-patterns - changes: *startup-css-patterns + - changes: *workhorse-patterns .frontend:rules:compile-test-assets-as-if-jh: rules: - - <<: *if-not-ee - when: never - - <<: *if-jh - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-targeting-stable-branch - when: never - - <<: *if-stable-branch-refs - when: never - - <<: *if-merge-request-labels-as-if-jh + - !reference [".strict-ee-only-rules", rules] + - !reference [".as-if-jh-default-exclusion-rules", rules] - <<: *if-merge-request-labels-run-all-rspec + allow_failure: true - changes: *code-backstage-qa-patterns + allow_failure: true - changes: *startup-css-patterns + allow_failure: true + - changes: *workhorse-patterns .frontend:rules:default-frontend-jobs: rules: @@ -611,10 +709,7 @@ .frontend:rules:default-frontend-jobs-as-if-foss: rules: - - <<: *if-not-ee - when: never - - <<: *if-jh - when: never + - !reference [".strict-ee-only-rules", rules] - <<: *if-security-merge-request changes: *code-backstage-patterns - <<: *if-merge-request-labels-as-if-foss @@ -626,25 +721,21 @@ .frontend:rules:default-frontend-jobs-as-if-jh: rules: - - <<: *if-not-ee - when: never - - <<: *if-jh - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-targeting-stable-branch - when: never - - <<: *if-stable-branch-refs - when: never - - <<: *if-merge-request-labels-as-if-jh + - !reference [".strict-ee-only-rules", rules] + - !reference [".as-if-jh-default-exclusion-rules", rules] - <<: *if-merge-request-labels-run-all-rspec + allow_failure: true - <<: *if-merge-request changes: *startup-css-patterns + allow_failure: true - <<: *if-merge-request changes: *ci-patterns + allow_failure: true .frontend:rules:jest: rules: + - <<: *if-fork-merge-request + when: never - <<: *if-merge-request-labels-run-all-jest - <<: *if-default-refs changes: *core-frontend-patterns @@ -661,16 +752,12 @@ .frontend:rules:jest:minimal: rules: - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request - when: never + - <<: *if-fork-merge-request + changes: *code-backstage-patterns + - !reference [".rails:rules:minimal-default-rules", rules] - <<: *if-merge-request-labels-run-all-jest when: never - - <<: *if-default-refs - changes: *core-frontend-patterns + - changes: *core-frontend-patterns when: never - <<: *if-merge-request changes: *ci-patterns @@ -680,10 +767,7 @@ .frontend:rules:eslint-as-if-foss: rules: - - <<: *if-not-ee - when: never - - <<: *if-jh - when: never + - !reference [".strict-ee-only-rules", rules] # We already have `static-analysis as-if-foss` which already runs `lint:eslint:all` if the `pipeline:run-as-if-foss` label is set. - <<: *if-merge-request-labels-as-if-foss when: never @@ -731,7 +815,6 @@ rules: - <<: *if-default-refs changes: *code-patterns - when: on_success ############### # Pages rules # @@ -747,14 +830,10 @@ rules: - <<: *if-default-refs changes: *code-qa-patterns - when: on_success .qa:rules:as-if-foss: rules: - - <<: *if-not-ee - when: never - - <<: *if-jh - when: never + - !reference [".strict-ee-only-rules", rules] - <<: *if-security-merge-request changes: *code-qa-patterns - <<: *if-merge-request-labels-as-if-foss @@ -809,11 +888,15 @@ .rails:rules:ee-and-foss-migration: rules: + - <<: *if-fork-merge-request + when: never - <<: *if-merge-request-labels-run-all-rspec - <<: *if-merge-request changes: *core-backend-patterns - <<: *if-merge-request changes: *ci-patterns + # When DB schema changes, many migrations spec may be affected. However, the test mapping from Crystalball does not map db change to a specific migration spec well. + # See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68840. - <<: *if-merge-request changes: *db-patterns - <<: *if-automated-merge-request @@ -826,20 +909,12 @@ .rails:rules:ee-and-foss-migration:minimal: rules: - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-labels-run-all-rspec - when: never - - <<: *if-merge-request - changes: *core-backend-patterns - when: never - - <<: *if-merge-request - changes: *ci-patterns - when: never + - <<: *if-fork-merge-request + changes: *db-patterns + - !reference [".rails:rules:minimal-default-rules", rules] + - !reference [".rails:rules:unit-integration:minimal-default-rules", rules] + # When DB schema changes, many migrations spec may be affected. However, the test mapping from Crystalball does not map db change to a specific migration spec well. + # See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68840. - <<: *if-merge-request changes: *db-patterns when: never @@ -860,105 +935,49 @@ .rails:rules:ee-and-foss-unit: rules: - - <<: *if-merge-request-labels-run-all-rspec - - <<: *if-merge-request - changes: *core-backend-patterns - - <<: *if-merge-request - changes: *ci-patterns - - <<: *if-automated-merge-request - changes: *backend-patterns - - <<: *if-security-merge-request - changes: *backend-patterns - - <<: *if-merge-request-not-approved + - <<: *if-fork-merge-request when: never + - !reference [".rails:rules:ee-and-foss-default-rules", rules] - changes: *backend-patterns .rails:rules:ee-and-foss-unit:minimal: rules: - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-labels-run-all-rspec - when: never - - <<: *if-merge-request - changes: *core-backend-patterns - when: never - - <<: *if-merge-request - changes: *ci-patterns - when: never + - <<: *if-fork-merge-request + changes: *backend-patterns + - !reference [".rails:rules:minimal-default-rules", rules] + - !reference [".rails:rules:unit-integration:minimal-default-rules", rules] - <<: *if-merge-request changes: *backend-patterns .rails:rules:ee-and-foss-integration: rules: - - <<: *if-merge-request-labels-run-all-rspec - - <<: *if-merge-request - changes: *core-backend-patterns - - <<: *if-merge-request - changes: *ci-patterns - - <<: *if-automated-merge-request - changes: *backend-patterns - - <<: *if-security-merge-request - changes: *backend-patterns - - <<: *if-merge-request-not-approved + - <<: *if-fork-merge-request when: never + - !reference [".rails:rules:ee-and-foss-default-rules", rules] - changes: *backend-patterns .rails:rules:ee-and-foss-integration:minimal: rules: - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-labels-run-all-rspec - when: never - - <<: *if-merge-request - changes: *core-backend-patterns - when: never - - <<: *if-merge-request - changes: *ci-patterns - when: never + - <<: *if-fork-merge-request + changes: *backend-patterns + - !reference [".rails:rules:minimal-default-rules", rules] + - !reference [".rails:rules:unit-integration:minimal-default-rules", rules] - <<: *if-merge-request changes: *backend-patterns .rails:rules:ee-and-foss-system: rules: - - <<: *if-merge-request-labels-run-all-rspec - - <<: *if-merge-request - changes: *core-backend-patterns - - <<: *if-merge-request - changes: *ci-patterns - - <<: *if-automated-merge-request - changes: *code-backstage-patterns - - <<: *if-security-merge-request - changes: *code-backstage-patterns - - <<: *if-merge-request-not-approved + - <<: *if-fork-merge-request when: never + - !reference [".rails:rules:system-default-rules", rules] - changes: *code-backstage-patterns .rails:rules:ee-and-foss-system:minimal: rules: - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-labels-run-all-rspec - when: never - - <<: *if-merge-request - changes: *core-backend-patterns - when: never - - <<: *if-merge-request - changes: *ci-patterns - when: never - - <<: *if-merge-request + - <<: *if-fork-merge-request changes: *code-backstage-patterns + - !reference [".rails:rules:minimal-default-rules", rules] + - !reference [".rails:rules:system:minimal-default-rules", rules] .rails:rules:ee-and-foss-fast_spec_helper: rules: @@ -967,33 +986,8 @@ changes: *core-backend-patterns - <<: *if-merge-request changes: *ci-patterns - - <<: *if-automated-merge-request - changes: ["config/**/*"] - - <<: *if-security-merge-request - changes: ["config/**/*"] - - <<: *if-merge-request-not-approved - when: never - changes: ["config/**/*"] -.rails:rules:ee-and-foss-fast_spec_helper:minimal: - rules: - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-labels-run-all-rspec - when: never - - <<: *if-merge-request - changes: *core-backend-patterns - when: never - - <<: *if-merge-request - changes: *ci-patterns - when: never - - <<: *if-merge-request - changes: ["config/**/*"] - .rails:rules:code-backstage-qa: rules: - changes: *code-backstage-qa-patterns @@ -1008,6 +1002,8 @@ changes: *core-backend-patterns - <<: *if-merge-request changes: *ci-patterns + # When DB schema changes, many migrations spec may be affected. However, the test mapping from Crystalball does not map db change to a specific migration spec well. + # See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68840. - <<: *if-merge-request changes: *db-patterns - <<: *if-automated-merge-request @@ -1022,20 +1018,10 @@ rules: - <<: *if-not-ee when: never - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-labels-run-all-rspec - when: never - - <<: *if-merge-request - changes: *core-backend-patterns - when: never - - <<: *if-merge-request - changes: *ci-patterns - when: never + - !reference [".rails:rules:minimal-default-rules", rules] + - !reference [".rails:rules:unit-integration:minimal-default-rules", rules] + # When DB schema changes, many migrations spec may be affected. However, the test mapping from Crystalball does not map db change to a specific migration spec well. + # See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68840. - <<: *if-merge-request changes: *db-patterns when: never @@ -1044,37 +1030,19 @@ rules: - <<: *if-not-ee when: never - - <<: *if-merge-request-labels-run-all-rspec - - <<: *if-merge-request - changes: *core-backend-patterns - - <<: *if-merge-request - changes: *ci-patterns - - <<: *if-automated-merge-request - changes: *backend-patterns - - <<: *if-security-merge-request - changes: *backend-patterns - - <<: *if-merge-request-not-approved + - <<: *if-fork-merge-request when: never + - !reference [".rails:rules:ee-and-foss-default-rules", rules] - changes: *backend-patterns .rails:rules:ee-only-unit:minimal: rules: - <<: *if-not-ee when: never - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-labels-run-all-rspec - when: never - - <<: *if-merge-request - changes: *core-backend-patterns - when: never - - <<: *if-merge-request - changes: *ci-patterns - when: never + - <<: *if-fork-merge-request + changes: *backend-patterns + - !reference [".rails:rules:minimal-default-rules", rules] + - !reference [".rails:rules:unit-integration:minimal-default-rules", rules] - <<: *if-merge-request changes: *backend-patterns @@ -1082,37 +1050,19 @@ rules: - <<: *if-not-ee when: never - - <<: *if-merge-request-labels-run-all-rspec - - <<: *if-merge-request - changes: *core-backend-patterns - - <<: *if-merge-request - changes: *ci-patterns - - <<: *if-automated-merge-request - changes: *backend-patterns - - <<: *if-security-merge-request - changes: *backend-patterns - - <<: *if-merge-request-not-approved + - <<: *if-fork-merge-request when: never + - !reference [".rails:rules:ee-and-foss-default-rules", rules] - changes: *backend-patterns .rails:rules:ee-only-integration:minimal: rules: - <<: *if-not-ee when: never - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-labels-run-all-rspec - when: never - - <<: *if-merge-request - changes: *core-backend-patterns - when: never - - <<: *if-merge-request - changes: *ci-patterns - when: never + - <<: *if-fork-merge-request + changes: *backend-patterns + - !reference [".rails:rules:minimal-default-rules", rules] + - !reference [".rails:rules:unit-integration:minimal-default-rules", rules] - <<: *if-merge-request changes: *backend-patterns @@ -1120,39 +1070,19 @@ rules: - <<: *if-not-ee when: never - - <<: *if-merge-request-labels-run-all-rspec - - <<: *if-merge-request - changes: *core-backend-patterns - - <<: *if-merge-request - changes: *ci-patterns - - <<: *if-automated-merge-request - changes: *code-backstage-patterns - - <<: *if-security-merge-request - changes: *code-backstage-patterns - - <<: *if-merge-request-not-approved + - <<: *if-fork-merge-request when: never + - !reference [".rails:rules:system-default-rules", rules] - changes: *code-backstage-patterns .rails:rules:ee-only-system:minimal: rules: - <<: *if-not-ee when: never - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-labels-run-all-rspec - when: never - - <<: *if-merge-request - changes: *core-backend-patterns - when: never - - <<: *if-merge-request - changes: *ci-patterns - when: never - - <<: *if-merge-request + - <<: *if-fork-merge-request changes: *code-backstage-patterns + - !reference [".rails:rules:minimal-default-rules", rules] + - !reference [".rails:rules:system:minimal-default-rules", rules] .rails:rules:as-if-foss-migration: rules: @@ -1163,8 +1093,8 @@ changes: *core-backend-patterns - <<: *if-merge-request changes: *ci-patterns - - <<: *if-security-merge-request - changes: *db-patterns + # When DB schema changes, many migrations spec may be affected. However, the test mapping from Crystalball does not map db change to a specific migration spec well. + # See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68840. - <<: *if-merge-request-labels-as-if-foss changes: *db-patterns - <<: *if-automated-merge-request @@ -1178,18 +1108,10 @@ rules: - <<: *if-not-ee when: never - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request - changes: *core-backend-patterns - when: never - - <<: *if-merge-request - changes: *ci-patterns - when: never + - !reference [".rails:rules:minimal-default-rules", rules] + - !reference [".rails:rules:as-if-foss-migration-unit-integration:minimal-default-rules", rules] + # When DB schema changes, many migrations spec may be affected. However, the test mapping from Crystalball does not map db change to a specific migration spec well. + # See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68840. - <<: *if-merge-request-labels-as-if-foss changes: *db-patterns when: never @@ -1198,17 +1120,9 @@ rules: - <<: *if-not-ee when: never - - <<: *if-merge-request-labels-run-all-rspec - - <<: *if-merge-request - changes: *core-backend-patterns - - <<: *if-merge-request - changes: *ci-patterns - - <<: *if-automated-merge-request - changes: *backend-patterns - - <<: *if-security-merge-request - changes: *backend-patterns - - <<: *if-merge-request-not-approved + - <<: *if-fork-merge-request when: never + - !reference [".rails:rules:ee-and-foss-default-rules", rules] - <<: *if-merge-request-labels-as-if-foss changes: *backend-patterns @@ -1216,18 +1130,10 @@ rules: - <<: *if-not-ee when: never - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request - changes: *core-backend-patterns - when: never - - <<: *if-merge-request - changes: *ci-patterns + - <<: *if-fork-merge-request when: never + - !reference [".rails:rules:minimal-default-rules", rules] + - !reference [".rails:rules:as-if-foss-migration-unit-integration:minimal-default-rules", rules] - <<: *if-merge-request-labels-as-if-foss changes: *backend-patterns @@ -1235,17 +1141,9 @@ rules: - <<: *if-not-ee when: never - - <<: *if-merge-request-labels-run-all-rspec - - <<: *if-merge-request - changes: *core-backend-patterns - - <<: *if-merge-request - changes: *ci-patterns - - <<: *if-automated-merge-request - changes: *backend-patterns - - <<: *if-security-merge-request - changes: *backend-patterns - - <<: *if-merge-request-not-approved + - <<: *if-fork-merge-request when: never + - !reference [".rails:rules:ee-and-foss-default-rules", rules] - <<: *if-merge-request-labels-as-if-foss changes: *backend-patterns @@ -1253,18 +1151,10 @@ rules: - <<: *if-not-ee when: never - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request - changes: *core-backend-patterns - when: never - - <<: *if-merge-request - changes: *ci-patterns + - <<: *if-fork-merge-request when: never + - !reference [".rails:rules:minimal-default-rules", rules] + - !reference [".rails:rules:as-if-foss-migration-unit-integration:minimal-default-rules", rules] - <<: *if-merge-request-labels-as-if-foss changes: *backend-patterns @@ -1272,17 +1162,9 @@ rules: - <<: *if-not-ee when: never - - <<: *if-merge-request-labels-run-all-rspec - - <<: *if-merge-request - changes: *core-backend-patterns - - <<: *if-merge-request - changes: *ci-patterns - - <<: *if-automated-merge-request - changes: *code-backstage-patterns - - <<: *if-security-merge-request - changes: *code-backstage-patterns - - <<: *if-merge-request-not-approved + - <<: *if-fork-merge-request when: never + - !reference [".rails:rules:system-default-rules", rules] - <<: *if-merge-request-labels-as-if-foss changes: *code-backstage-patterns @@ -1290,16 +1172,16 @@ rules: - <<: *if-not-ee when: never - - <<: *if-merge-request-approved - when: never - - <<: *if-automated-merge-request - when: never - - <<: *if-security-merge-request + - <<: *if-fork-merge-request when: never + - !reference [".rails:rules:minimal-default-rules", rules] - <<: *if-merge-request changes: *core-backend-patterns when: never - <<: *if-merge-request + changes: *workhorse-patterns + when: never + - <<: *if-merge-request changes: *ci-patterns when: never - <<: *if-merge-request-labels-as-if-foss @@ -1307,18 +1189,8 @@ .rails:rules:as-if-jh-rspec: rules: - - <<: *if-not-ee - when: never - - <<: *if-jh - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-targeting-stable-branch - when: never - - <<: *if-stable-branch-refs - when: never - - <<: *if-merge-request-labels-as-if-jh - allow_failure: true + - !reference [".strict-ee-only-rules", rules] + - !reference [".as-if-jh-default-exclusion-rules", rules] - <<: *if-merge-request changes: *ci-patterns allow_failure: true @@ -1340,24 +1212,17 @@ .rails:rules:detect-tests: rules: - - changes: *code-backstage-qa-patterns - <<: *if-merge-request-labels-run-all-rspec + - changes: *code-backstage-qa-patterns + - changes: *workhorse-patterns .rails:rules:detect-previous-failed-tests: rules: - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-labels-run-all-rspec - - <<: *if-merge-request - changes: *code-backstage-patterns + - !reference [".rails:rules:previous-failed-tests-default-rules", rules] .rails:rules:rerun-previous-failed-tests: rules: - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-labels-run-all-rspec - - <<: *if-merge-request - changes: *code-backstage-patterns + - !reference [".rails:rules:previous-failed-tests-default-rules", rules] .rails:rules:rspec-foss-impact: rules: @@ -1418,19 +1283,21 @@ - <<: *if-merge-request changes: *backend-patterns -.rails:rules:default-branch-schedule-nightly--code-backstage: +.rails:rules:default-branch-schedule-nightly--code-backstage-default-rules: rules: - <<: *if-default-branch-schedule-nightly - <<: *if-merge-request changes: [".gitlab/ci/rails.gitlab-ci.yml"] +.rails:rules:default-branch-schedule-nightly--code-backstage: + rules: + - !reference [".rails:rules:default-branch-schedule-nightly--code-backstage-default-rules", rules] + .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only: rules: - <<: *if-not-ee when: never - - <<: *if-default-branch-schedule-nightly - - <<: *if-merge-request - changes: [".gitlab/ci/rails.gitlab-ci.yml"] + - !reference [".rails:rules:default-branch-schedule-nightly--code-backstage-default-rules", rules] .rails:rules:rspec-feature-flags: rules: @@ -1438,13 +1305,16 @@ when: never - changes: *code-backstage-patterns -.rails:rules:skipped-flaky-tests-report: +.rails:rules:flaky-tests-report: rules: - <<: *if-not-ee when: never - - <<: *if-skip-flaky-tests-automatically + - if: '$SKIP_FLAKY_TESTS_AUTOMATICALLY == "true" || $RETRY_FAILED_TESTS_IN_NEW_PROCESS == "true"' changes: *code-backstage-patterns - - changes: *ci-patterns + when: always + - if: '$SKIP_FLAKY_TESTS_AUTOMATICALLY == "true" || $RETRY_FAILED_TESTS_IN_NEW_PROCESS == "true"' + changes: *ci-patterns + when: always ######################### # Static analysis rules # @@ -1619,6 +1489,8 @@ - <<: *if-dot-com-gitlab-org-merge-request changes: *controllers-patterns - <<: *if-dot-com-gitlab-org-merge-request + changes: *models-patterns + - <<: *if-dot-com-gitlab-org-merge-request changes: *qa-patterns - <<: *if-dot-com-gitlab-org-merge-request changes: *code-patterns @@ -1734,7 +1606,6 @@ when: never - <<: *if-default-branch-or-tag changes: *code-backstage-qa-patterns - when: on_success .setup:rules:dont-interrupt-me: rules: @@ -1749,7 +1620,6 @@ rules: - <<: *if-default-refs changes: *code-backstage-patterns - when: on_success .setup:rules:no-ee-check: rules: @@ -1757,7 +1627,6 @@ when: never - <<: *if-default-refs changes: *code-backstage-patterns - when: on_success .setup:rules:no-jh-check: rules: @@ -1765,7 +1634,6 @@ when: never - <<: *if-default-refs changes: *code-backstage-patterns - when: on_success .setup:rules:verify-tests-yml: rules: @@ -1773,7 +1641,6 @@ when: never - <<: *if-default-refs changes: *code-backstage-patterns - when: on_success .setup:rules:generate-frontend-fixtures-mapping: rules: @@ -1787,20 +1654,16 @@ .setup:rules:add-jh-folder: rules: - - <<: *if-not-ee - when: never - - <<: *if-jh - when: never - - <<: *if-security-merge-request - when: never - - <<: *if-merge-request-targeting-stable-branch - when: never - - <<: *if-stable-branch-refs - when: never - - <<: *if-merge-request-labels-as-if-jh + - !reference [".strict-ee-only-rules", rules] + - !reference [".as-if-jh-default-exclusion-rules", rules] - <<: *if-merge-request-labels-run-all-rspec + allow_failure: true - changes: *code-backstage-qa-patterns + allow_failure: true - changes: *startup-css-patterns + allow_failure: true + - changes: *workhorse-patterns + allow_failure: true ####################### # Test metadata rules # @@ -1808,7 +1671,7 @@ .test-metadata:rules:retrieve-tests-metadata: rules: - changes: *code-backstage-patterns - when: on_success + - changes: *workhorse-patterns - <<: *if-merge-request-labels-run-all-rspec .test-metadata:rules:update-tests-metadata: @@ -1825,8 +1688,7 @@ ################### .workhorse:rules:workhorse: rules: - - <<: *if-default-refs - changes: *workhorse-patterns + - changes: *workhorse-patterns ################### # yaml-lint rules # diff --git a/.gitlab/ci/setup.gitlab-ci.yml b/.gitlab/ci/setup.gitlab-ci.yml index 13108ba289a..1aeccfcb212 100644 --- a/.gitlab/ci/setup.gitlab-ci.yml +++ b/.gitlab/ci/setup.gitlab-ci.yml @@ -159,7 +159,7 @@ add-jh-folder: script: - JH_BRANCH=$(./scripts/setup/find-jh-branch.rb) - 'echo "JH_BRANCH: ${JH_BRANCH}"' - - curl --location -o "jh-folder.tar.gz" "https://gitlab.com/gitlab-jh/gitlab/-/archive/${JH_BRANCH}/gitlab-${JH_BRANCH}.tar.gz?path=jh" + - curl --location -o "jh-folder.tar.gz" "https://gitlab.com/gitlab-org/gitlab-jh/gitlab/-/archive/${JH_BRANCH}/gitlab-${JH_BRANCH}.tar.gz?path=jh" - tar -xf "jh-folder.tar.gz" - mv "gitlab-${JH_BRANCH}-jh/jh/" ./ - cp Gemfile.lock jh/ diff --git a/.gitlab/ci/test-metadata.gitlab-ci.yml b/.gitlab/ci/test-metadata.gitlab-ci.yml index d0d45cb9294..20cbd759ac6 100644 --- a/.gitlab/ci/test-metadata.gitlab-ci.yml +++ b/.gitlab/ci/test-metadata.gitlab-ci.yml @@ -6,9 +6,9 @@ expire_in: 31d paths: - knapsack/ - - rspec_flaky/ - - rspec_profiling/ + - rspec/ - crystalball/ + when: always retrieve-tests-metadata: extends: @@ -44,6 +44,6 @@ update-tests-metadata: script: - run_timed_command "retry gem install fog-aws mime-types activesupport rspec_profiling postgres-copy --no-document" - source ./scripts/rspec_helpers.sh - - test -f rspec_flaky/report-suite.json || echo -e "\e[31m" 'Consider add ~"pipeline:run-all-rspec" to run full rspec jobs' "\e[0m" + - test -f "${FLAKY_RSPEC_SUITE_REPORT_PATH}" || echo -e "\e[31m" 'Consider add ~"pipeline:run-all-rspec" to run full rspec jobs' "\e[0m" - update_tests_metadata - update_tests_mapping diff --git a/.gitlab/ci/workhorse.gitlab-ci.yml b/.gitlab/ci/workhorse.gitlab-ci.yml index aab077e575b..01e059b8a60 100644 --- a/.gitlab/ci/workhorse.gitlab-ci.yml +++ b/.gitlab/ci/workhorse.gitlab-ci.yml @@ -22,8 +22,8 @@ workhorse:verify: workhorse:test using go 1.16: extends: .workhorse:test - image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:ruby-2.7-golang-1.16-git-2.31 + image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:debian-${DEBIAN_VERSION}-ruby-2.7-golang-1.16-git-2.31 workhorse:test using go 1.17: extends: .workhorse:test - image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:ruby-2.7-golang-1.17-git-2.31 + image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:debian-${DEBIAN_VERSION}-ruby-2.7-golang-1.17-git-2.31 |