From d187126b67a3e9122c843cdd3db69aead5e1bda8 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 24 Jan 2024 12:59:12 +0000 Subject: Update from merge request --- .gitlab/ci/as-if-foss.gitlab-ci.yml | 8 +- .gitlab/ci/frontend.gitlab-ci.yml | 23 -- .gitlab/ci/preflight.gitlab-ci.yml | 6 - .gitlab/ci/qa.gitlab-ci.yml | 6 - .gitlab/ci/rails.gitlab-ci.yml | 180 +-------- .gitlab/ci/rules.gitlab-ci.yml | 435 +++++++++++++++------ .gitlab/ci/static-analysis.gitlab-ci.yml | 20 - db/schema_migrations/20240123155252 | 2 +- doc/development/pipelines/index.md | 43 +- qa/qa/page/component/issue_board/show.rb | 2 +- qa/qa/page/project/web_ide/vscode.rb | 2 +- scripts/rspec_helpers.sh | 4 +- scripts/setup/generate-as-if-foss-env.rb | 8 +- spec/dot_gitlab_ci/rules_spec.rb | 35 ++ spec/scripts/setup/generate_as_if_foss_env_spec.rb | 14 +- spec/simplecov_env.rb | 6 +- 16 files changed, 432 insertions(+), 362 deletions(-) diff --git a/.gitlab/ci/as-if-foss.gitlab-ci.yml b/.gitlab/ci/as-if-foss.gitlab-ci.yml index fc8db3ba974..5bcf1ff696c 100644 --- a/.gitlab/ci/as-if-foss.gitlab-ci.yml +++ b/.gitlab/ci/as-if-foss.gitlab-ci.yml @@ -1,7 +1,7 @@ .as-if-foss-variables: variables: AS_IF_FOSS_BRANCH: "as-if-foss/${CI_COMMIT_REF_NAME}" - FOSS_REPOSITORY: "https://dummy:${AS_IF_FOSS_TOKEN}@gitlab.com/gitlab-org/gitlab-foss.git" + FOSS_REPOSITORY: "https://dummy:${AS_IF_FOSS_TOKEN}@gitlab.com/${CI_PROJECT_NAMESPACE}/gitlab-foss.git" prepare-as-if-foss-branch: extends: @@ -66,6 +66,10 @@ start-as-if-foss: RUBY_VERSION: $RUBY_VERSION ENABLE_RSPEC: $ENABLE_RSPEC ENABLE_RSPEC_FAST_SPEC_HELPER: $ENABLE_RSPEC_FAST_SPEC_HELPER + ENABLE_RSPEC_PRAEFECT: $ENABLE_RSPEC_PRAEFECT + ENABLE_RSPEC_SINGLE_DB: $ENABLE_RSPEC_SINGLE_DB + ENABLE_RSPEC_SINGLE_DB_CI_CONNECTION: $ENABLE_RSPEC_SINGLE_DB_CI_CONNECTION + ENABLE_RSPEC_SINGLE_REDIS: $ENABLE_RSPEC_SINGLE_REDIS ENABLE_RSPEC_UNIT: $ENABLE_RSPEC_UNIT ENABLE_RSPEC_INTEGRATION: $ENABLE_RSPEC_INTEGRATION ENABLE_RSPEC_SYSTEM: $ENABLE_RSPEC_SYSTEM @@ -86,7 +90,7 @@ start-as-if-foss: ENABLE_QA_SELECTORS: $ENABLE_QA_SELECTORS ENABLE_STATIC_ANALYSIS: $ENABLE_STATIC_ANALYSIS trigger: - project: gitlab-org/gitlab-foss + project: ${CI_PROJECT_NAMESPACE}/gitlab-foss branch: as-if-foss/${CI_COMMIT_REF_NAME} strategy: depend diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index 9d78fb102f9..22a6b3d4842 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -226,12 +226,6 @@ graphql-schema-dump: - tmp/tests/graphql/gitlab_schema.graphql - tmp/tests/graphql/gitlab_schema.json -graphql-schema-dump as-if-foss: - extends: - - graphql-schema-dump - - .frontend:rules:default-frontend-jobs-as-if-foss - - .as-if-foss - .frontend-test-base: extends: - .default-retry @@ -279,14 +273,6 @@ jest predictive: script: - if [[ -s "$RSPEC_CHANGED_FILES_PATH" ]] || [[ -s "$RSPEC_MATCHING_JS_FILES_PATH" ]]; then run_timed_command "yarn jest:ci:predictive"; fi -jest as-if-foss: - extends: - - .jest-base - - .frontend:rules:jest:as-if-foss - - .as-if-foss - needs: ["rspec-all frontend_fixture as-if-foss"] - parallel: 10 - jest predictive as-if-foss: extends: - .jest-base @@ -434,12 +420,3 @@ compile-storybook: when: always paths: - storybook/public - -compile-storybook as-if-foss: - extends: - - .compile-storybook-base - - .as-if-foss - - .frontend:rules:default-frontend-jobs-as-if-foss - needs: - - job: "graphql-schema-dump as-if-foss" - - job: "rspec-all frontend_fixture as-if-foss" diff --git a/.gitlab/ci/preflight.gitlab-ci.yml b/.gitlab/ci/preflight.gitlab-ci.yml index 426d36b24f4..729815fd338 100644 --- a/.gitlab/ci/preflight.gitlab-ci.yml +++ b/.gitlab/ci/preflight.gitlab-ci.yml @@ -73,9 +73,3 @@ qa:selectors: - .qa:rules:selectors script: - bundle exec bin/qa Test::Sanity::Selectors - -qa:selectors-as-if-foss: - extends: - - qa:selectors - - .qa:rules:selectors-as-if-foss - - .as-if-foss diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml index 391e25956eb..7d0910f7ba5 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -48,12 +48,6 @@ qa:internal: script: - bundle exec rspec -O .rspec_internal -qa:internal-as-if-foss: - extends: - - qa:internal - - .qa:rules:internal-as-if-foss - - .as-if-foss - cache-qa-gems: extends: - .qa-job-base diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index e46e3d5b462..09ce8f8d0f9 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -358,6 +358,26 @@ rspec:artifact-collector unit: - job: rspec unit clickhouse # 1 job optional: true +rspec:artifact-collector as-if-foss: + extends: + - .artifact-collector + - .as-if-foss:rules:start-as-if-foss + needs: + # We need to wait for `start-as-if-foss` because cross project needs + # will not wait, and it'll simply look at the latest pipeline regardless + # status. This means we need to wait for the whole FOSS pipeline before + # trying to fetch the artifacts from there, ensuring they're available. + - job: start-as-if-foss + - project: gitlab-org/gitlab-foss + ref: as-if-foss/${CI_COMMIT_REF_NAME} + job: rspec:artifact-collector unit + - project: gitlab-org/gitlab-foss + ref: as-if-foss/${CI_COMMIT_REF_NAME} + job: rspec:artifact-collector system + - project: gitlab-org/gitlab-foss + ref: as-if-foss/${CI_COMMIT_REF_NAME} + job: rspec:artifact-collector remainder + rspec:artifact-collector system: extends: - .artifact-collector @@ -380,35 +400,6 @@ rspec:artifact-collector remainder: - !reference ['.rails:rules:ee-and-foss-migration', rules] - !reference ['.rails:rules:ee-and-foss-background-migration', rules] -rspec:artifact-collector as-if-foss unit: - extends: - - .artifact-collector - - .rails:rules:as-if-foss-unit - needs: - - rspec unit pg14-as-if-foss # 32 jobs - -rspec:artifact-collector as-if-foss system: - extends: - - .artifact-collector - - .rails:rules:as-if-foss-system - needs: - - rspec system pg14-as-if-foss # 32 jobs - -rspec:artifact-collector as-if-foss remainder: - extends: - - .artifact-collector - needs: - - job: rspec integration pg14-as-if-foss # 16 jobs - optional: true - - job: rspec migration pg14-as-if-foss # 15 jobs - optional: true - - job: rspec background_migration pg14-as-if-foss # 5 jobs - optional: true - rules: - - !reference ['.rails:rules:as-if-foss-integration', rules] - - !reference ['.rails:rules:as-if-foss-migration', rules] - - !reference ['.rails:rules:as-if-foss-background-migration', rules] - rspec:artifact-collector unit single-redis: extends: - .artifact-collector @@ -494,11 +485,7 @@ rspec:coverage: - job: rspec:artifact-collector remainder single-redis optional: true # as-if-foss jobs - - job: rspec:artifact-collector as-if-foss unit - optional: true - - job: rspec:artifact-collector as-if-foss system - optional: true - - job: rspec:artifact-collector as-if-foss remainder + - job: rspec:artifact-collector as-if-foss optional: true # EE jobs - job: rspec:artifact-collector ee single-redis @@ -656,131 +643,6 @@ rspec-ee:predictive:trigger: - artifact: "${RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML}-ee.yml" job: rspec-predictive:pipeline-generate -rspec migration pg14-as-if-foss: - extends: - - .rspec-base-pg14-as-if-foss - - .rspec-base-migration - - .rspec-migration-parallel - - .rails:rules:as-if-foss-migration - -rspec background_migration pg14-as-if-foss: - extends: - - .rspec-base-pg14-as-if-foss - - .rspec-base-migration - - .rspec-background-migration-parallel - - .rails:rules:as-if-foss-background-migration - -rspec migration pg14-as-if-foss single-db: - extends: - - rspec migration pg14-as-if-foss - - .single-db-rspec - - .rspec-migration-parallel - - .rails:rules:single-db-as-if-foss - -rspec background_migration pg14-as-if-foss single-db: - extends: - - rspec background_migration pg14-as-if-foss - - .single-db-rspec - - .rails:rules:single-db-as-if-foss - -rspec migration pg14-as-if-foss single-db-ci-connection: - extends: - - rspec migration pg14-as-if-foss - - .single-db-ci-connection-rspec - - .rspec-migration-parallel - - .rails:rules:single-db-ci-connection-as-if-foss - -rspec background_migration pg14-as-if-foss single-db-ci-connection: - extends: - - rspec background_migration pg14-as-if-foss - - .single-db-ci-connection-rspec - - .rails:rules:single-db-ci-connection-as-if-foss - -rspec migration pg14-as-if-foss clusterwide-db: - extends: - - rspec migration pg14-as-if-foss - - .clusterwide-db - - .rspec-migration-parallel - - .rails:rules:clusterwide-db - -rspec background_migration pg14-as-if-foss clusterwide-db: - extends: - - rspec background_migration pg14-as-if-foss - - .clusterwide-db - - .rails:rules:clusterwide-db - -rspec unit pg14-as-if-foss: - extends: - - .rspec-base-pg14-as-if-foss - - .rails:rules:as-if-foss-unit - - .rspec-unit-parallel - -rspec unit pg14-as-if-foss single-db: - extends: - - rspec unit pg14-as-if-foss - - .single-db-rspec - - .rails:rules:single-db-as-if-foss - -rspec unit pg14-as-if-foss single-db-ci-connection: - extends: - - rspec unit pg14-as-if-foss - - .single-db-ci-connection-rspec - - .rails:rules:single-db-ci-connection-as-if-foss - -rspec unit pg14-as-if-foss clusterwide-db: - extends: - - rspec unit pg14-as-if-foss - - .clusterwide-db - - .rails:rules:clusterwide-db - -rspec integration pg14-as-if-foss: - extends: - - .rspec-base-pg14-as-if-foss - - .rails:rules:as-if-foss-integration - - .rspec-integration-parallel - -rspec integration pg14-as-if-foss single-db: - extends: - - rspec integration pg14-as-if-foss - - .single-db-rspec - - .rails:rules:single-db-as-if-foss - -rspec integration pg14-as-if-foss single-db-ci-connection: - extends: - - rspec integration pg14-as-if-foss - - .single-db-ci-connection-rspec - - .rails:rules:single-db-ci-connection-as-if-foss - -rspec integration pg14-as-if-foss clusterwide-db: - extends: - - rspec integration pg14-as-if-foss - - .clusterwide-db - - .rails:rules:clusterwide-db - -rspec system pg14-as-if-foss: - extends: - - .rspec-base-pg14-as-if-foss - - .rails:rules:as-if-foss-system - - .rspec-system-parallel - -rspec system pg14-as-if-foss single-db: - extends: - - rspec system pg14-as-if-foss - - .single-db-rspec - - .rails:rules:single-db-as-if-foss - -rspec system pg14-as-if-foss single-db-ci-connection: - extends: - - rspec system pg14-as-if-foss - - .single-db-ci-connection-rspec - - .rails:rules:single-db-ci-connection-as-if-foss - -rspec system pg14-as-if-foss clusterwide-db: - extends: - - rspec system pg14-as-if-foss - - .clusterwide-db - - .rails:rules:clusterwide-db - .rspec-ee-base-gitlab-duo: extends: - .rspec-ee-base-pg14 diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index fb9a7688166..675cf807c9f 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -1352,22 +1352,6 @@ - <<: *if-merge-request changes: *code-backstage-patterns -.frontend:rules:jest:as-if-foss: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-merge-request-labels-as-if-foss - - <<: *if-merge-request-labels-pipeline-expedite - when: never - - <<: *if-merge-request-labels-run-all-jest - - <<: *if-merge-request - changes: *frontend-dependency-patterns - - <<: *if-security-merge-request - changes: *code-backstage-patterns - - <<: *if-merge-request-not-approved - when: never - - <<: *if-merge-request - changes: *frontend-patterns-for-as-if-foss - .frontend:rules:jest:predictive:as-if-foss: rules: - !reference [".strict-ee-only-rules", rules] @@ -1384,15 +1368,6 @@ - <<: *if-merge-request changes: *frontend-patterns-for-as-if-foss -.frontend:rules:eslint-as-if-foss: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-merge-request-labels-as-if-foss - - <<: *if-merge-request-labels-pipeline-expedite - when: never - - <<: *if-merge-request - changes: *frontend-patterns-for-as-if-foss - .frontend:rules:coverage-frontend: rules: - <<: *if-not-ee @@ -1504,20 +1479,6 @@ - <<: *if-default-refs changes: *code-qa-patterns -.qa:rules:selectors-as-if-foss: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-merge-request - changes: *frontend-qa-patterns - - <<: *if-merge-request-labels-as-if-foss - - <<: *if-merge-request-labels-run-all-rspec - -.qa:rules:internal-as-if-foss: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-default-refs - changes: *qa-patterns - .qa:rules:determine-e2e-tests: rules: - <<: *if-not-ee @@ -1950,6 +1911,7 @@ - <<: *if-merge-request-labels-run-single-db - <<: *if-merge-request-labels-pipeline-expedite when: never + - if: '$ENABLE_RSPEC_SINGLE_REDIS == "true"' - <<: *if-merge-request changes: *redis-patterns - <<: *if-default-branch-schedule-nightly @@ -1965,6 +1927,7 @@ - <<: *if-merge-request-labels-run-single-db - <<: *if-merge-request-labels-pipeline-expedite when: never + - if: '$ENABLE_RSPEC_SINGLE_DB == "true"' - <<: *if-merge-request changes: *db-patterns - <<: *if-merge-request @@ -1977,11 +1940,6 @@ when: never - !reference [".rails:rules:single-db", "rules"] -.rails:rules:single-db-as-if-foss: - rules: - - !reference [".strict-ee-only-rules", rules] - - !reference [".rails:rules:single-db", "rules"] - .rails:rules:db:check-migrations-single-db: rules: - <<: *if-merge-request-labels-run-single-db @@ -1997,6 +1955,7 @@ - <<: *if-merge-request-labels-run-single-db - <<: *if-merge-request-labels-pipeline-expedite when: never + - if: '$ENABLE_RSPEC_SINGLE_DB_CI_CONNECTION == "true"' - <<: *if-merge-request changes: *db-patterns - <<: *if-merge-request @@ -2009,11 +1968,6 @@ when: never - !reference [".rails:rules:single-db-ci-connection", "rules"] -.rails:rules:single-db-ci-connection-as-if-foss: - rules: - - !reference [".strict-ee-only-rules", rules] - - !reference [".rails:rules:single-db-ci-connection", "rules"] - .rails:rules:db:check-migrations-single-db-ci-connection: rules: - <<: *if-merge-request-labels-run-single-db @@ -2047,6 +2001,8 @@ .rails:rules:praefect-with-db: rules: + - if: '$ENABLE_RSPEC_PRAEFECT == "true"' + allow_failure: true - if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-praefect-with-db/' allow_failure: true @@ -2264,64 +2220,6 @@ when: manual allow_failure: true -.rails:rules:as-if-foss-migration: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-merge-request-labels-pipeline-expedite - when: never - - <<: *if-merge-request-labels-run-all-rspec - - <<: *if-merge-request - changes: *core-backend-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 - changes: *db-patterns - - <<: *if-security-merge-request - changes: *db-patterns - - <<: *if-merge-request-not-approved - when: never - -.rails:rules:as-if-foss-background-migration: - rules: - - !reference [".rails:rules:as-if-foss-migration", rules] - - <<: *if-merge-request-labels-as-if-foss - changes: *backend-patterns - -.rails:rules:as-if-foss-unit: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-fork-merge-request - when: never - - <<: *if-merge-request-labels-pipeline-expedite - when: never - - !reference [".rails:rules:ee-and-foss-default-rules", rules] - - <<: *if-merge-request-labels-as-if-foss - changes: *backend-patterns - -.rails:rules:as-if-foss-integration: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-fork-merge-request - when: never - - <<: *if-merge-request-labels-pipeline-expedite - when: never - - !reference [".rails:rules:ee-and-foss-default-rules", rules] - - <<: *if-merge-request-labels-as-if-foss - changes: *backend-patterns - -.rails:rules:as-if-foss-system: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-fork-merge-request - when: never - - <<: *if-merge-request-labels-pipeline-expedite - when: never - - !reference [".rails:rules:system-default-rules", rules] - - <<: *if-merge-request-labels-as-if-foss - changes: *code-backstage-patterns - .rails:rules:ee-and-foss-db-library-code: rules: - <<: *if-merge-request-labels-pipeline-expedite @@ -2520,18 +2418,6 @@ - <<: *if-default-refs changes: *code-backstage-qa-patterns -.static-analysis:rules:static-analysis-as-if-foss: - rules: - - !reference [".strict-ee-only-rules", rules] - - <<: *if-merge-request-labels-as-if-foss - changes: *code-backstage-qa-patterns - - <<: *if-security-merge-request - changes: *code-backstage-qa-patterns - - <<: *if-merge-request - changes: [".gitlab/ci/static-analysis.gitlab-ci.yml"] - - <<: *if-merge-request - changes: *static-analysis-patterns - .static-analysis:rules:trigger-depsaster: rules: - if: $ENABLE_DEPSASTER != 'true' @@ -3010,29 +2896,340 @@ #################### # as-if-foss rules # #################### + +# This is a very big rules set because it's the union of all as-if-foss jobs. +# We want to start this for any FOSS jobs we want to run. For example: +# (This is not an exhaustive list and can be outdated!) +# .build-images:rules:build-qa-image-merge-requests +# .build-images:rules:build-assets-image +# .frontend:rules:compile-production-assets +# .frontend:rules:default-frontend-jobs-as-if-foss +# .rails:rules:single-db +# .rails:rules:single-db-ci-connection +# .rails:rules:single-redis +# .rails:rules:ee-and-foss-default-rules +# .rails:rules:system-default-rules .as-if-foss:rules:start-as-if-foss: rules: - if: '$AS_IF_FOSS_TOKEN == null' when: never - !reference [".strict-ee-only-rules", rules] - <<: *if-merge-request-labels-as-if-foss-cross-project + - <<: *if-merge-request-labels-as-if-foss + - <<: *if-merge-request-labels-run-all-rspec + - <<: *if-merge-request-labels-run-all-jest + - <<: *if-merge-request-labels-run-clusterwide-db + - <<: *if-merge-request-labels-run-single-db + - <<: *if-merge-request-labels-run-review-app + - <<: *if-merge-request-labels-run-all-e2e + - <<: *if-merge-request-labels-pipeline-expedite + when: never + - <<: *if-merge-request-not-approved + when: never + - <<: *if-merge-request-labels-frontend-and-feature-flag + - <<: *if-merge-request + changes: *nodejs-patterns + - <<: *if-merge-request + changes: *frontend-qa-patterns + - <<: *if-merge-request + changes: *frontend-patterns-for-as-if-foss + - <<: *if-merge-request + changes: *frontend-dependency-patterns + - <<: *if-merge-request + changes: *dependency-patterns + - <<: *if-merge-request + changes: *core-backend-patterns + - <<: *if-merge-request + changes: *ci-qa-patterns + - <<: *if-merge-request + changes: *static-analysis-patterns + - <<: *if-merge-request + changes: *db-patterns + - <<: *if-merge-request + changes: *decomposed-db-models-patterns + - <<: *if-merge-request + changes: *redis-patterns + - <<: *if-merge-request + changes: *feature-flag-development-config-patterns + - <<: *if-merge-request-targeting-stable-branch + changes: *setup-test-env-patterns + - <<: *if-automated-merge-request + changes: *db-patterns + - <<: *if-automated-merge-request + changes: *backend-patterns + - <<: *if-automated-merge-request + changes: *code-backstage-patterns + - <<: *if-security-merge-request + changes: *backend-patterns + - <<: *if-security-merge-request + changes: *code-backstage-qa-patterns + - <<: *if-security-merge-request + changes: *db-patterns + - <<: *if-ruby-branch + - <<: *if-auto-deploy-branches + - <<: *if-default-refs + changes: *ci-build-images-patterns + - <<: *if-default-refs + changes: *code-qa-patterns + - <<: *if-default-refs + changes: *code-backstage-qa-patterns + - <<: *if-default-refs + changes: *workhorse-patterns + - <<: *if-default-branch-schedule-nightly + - <<: *if-dot-com-gitlab-org-and-security-merge-request-manual-ff-package-and-e2e + changes: *feature-flag-development-config-patterns .as-if-foss:rules:start-as-if-foss:allow-failure:manual: rules: - if: '$AS_IF_FOSS_TOKEN == null' when: never - !reference [".strict-ee-only-rules", rules] + # Copy everything from .as-if-foss:rules:start-as-if-foss + # and add `allow_failure: true` and `when: manual` to all - <<: *if-merge-request-labels-as-if-foss-cross-project + allow_failure: true + when: manual + - <<: *if-merge-request-labels-as-if-foss + allow_failure: true + when: manual + - <<: *if-merge-request-labels-run-all-rspec + allow_failure: true + when: manual + - <<: *if-merge-request-labels-run-all-jest + allow_failure: true + when: manual + - <<: *if-merge-request-labels-run-clusterwide-db + allow_failure: true + when: manual + - <<: *if-merge-request-labels-run-single-db + allow_failure: true + when: manual + - <<: *if-merge-request-labels-run-review-app + allow_failure: true + when: manual + - <<: *if-merge-request-labels-run-all-e2e + allow_failure: true + when: manual + - <<: *if-merge-request-labels-pipeline-expedite + when: never + - <<: *if-merge-request-not-approved + when: never + - <<: *if-merge-request-labels-frontend-and-feature-flag + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *nodejs-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *frontend-qa-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *frontend-patterns-for-as-if-foss + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *frontend-dependency-patterns + allow_failure: true when: manual + - <<: *if-merge-request + changes: *dependency-patterns allow_failure: true + when: manual + - <<: *if-merge-request + changes: *core-backend-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *ci-qa-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *static-analysis-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *db-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *decomposed-db-models-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *redis-patterns + allow_failure: true + when: manual + - <<: *if-merge-request + changes: *feature-flag-development-config-patterns + allow_failure: true + when: manual + - <<: *if-merge-request-targeting-stable-branch + changes: *setup-test-env-patterns + allow_failure: true + when: manual + - <<: *if-automated-merge-request + changes: *db-patterns + allow_failure: true + when: manual + - <<: *if-automated-merge-request + changes: *backend-patterns + allow_failure: true + when: manual + - <<: *if-automated-merge-request + changes: *code-backstage-patterns + allow_failure: true + when: manual + - <<: *if-security-merge-request + changes: *backend-patterns + allow_failure: true + when: manual + - <<: *if-security-merge-request + changes: *code-backstage-qa-patterns + allow_failure: true + when: manual + - <<: *if-security-merge-request + changes: *db-patterns + allow_failure: true + when: manual + - <<: *if-ruby-branch + allow_failure: true + when: manual + - <<: *if-auto-deploy-branches + allow_failure: true + when: manual + - <<: *if-default-refs + changes: *ci-build-images-patterns + allow_failure: true + when: manual + - <<: *if-default-refs + changes: *code-qa-patterns + allow_failure: true + when: manual + - <<: *if-default-refs + changes: *code-backstage-qa-patterns + allow_failure: true + when: manual + - <<: *if-default-refs + changes: *workhorse-patterns + allow_failure: true + when: manual + - <<: *if-default-branch-schedule-nightly + allow_failure: true + when: manual + - <<: *if-dot-com-gitlab-org-and-security-merge-request-manual-ff-package-and-e2e + changes: *feature-flag-development-config-patterns + allow_failure: true + when: manual .as-if-foss:rules:start-as-if-foss:allow-failure: rules: - if: '$AS_IF_FOSS_TOKEN == null' when: never - !reference [".strict-ee-only-rules", rules] + # Copy everything from .as-if-foss:rules:start-as-if-foss + # and add `allow_failure: true` to all - <<: *if-merge-request-labels-as-if-foss-cross-project allow_failure: true + - <<: *if-merge-request-labels-as-if-foss + allow_failure: true + - <<: *if-merge-request-labels-run-all-rspec + allow_failure: true + - <<: *if-merge-request-labels-run-all-jest + allow_failure: true + - <<: *if-merge-request-labels-run-clusterwide-db + allow_failure: true + - <<: *if-merge-request-labels-run-single-db + allow_failure: true + - <<: *if-merge-request-labels-run-review-app + allow_failure: true + - <<: *if-merge-request-labels-run-all-e2e + allow_failure: true + - <<: *if-merge-request-labels-pipeline-expedite + when: never + - <<: *if-merge-request-not-approved + when: never + - <<: *if-merge-request-labels-frontend-and-feature-flag + allow_failure: true + - <<: *if-merge-request + changes: *nodejs-patterns + allow_failure: true + - <<: *if-merge-request + changes: *frontend-qa-patterns + allow_failure: true + - <<: *if-merge-request + changes: *frontend-patterns-for-as-if-foss + allow_failure: true + - <<: *if-merge-request + changes: *frontend-dependency-patterns + allow_failure: true + - <<: *if-merge-request + changes: *dependency-patterns + allow_failure: true + - <<: *if-merge-request + changes: *core-backend-patterns + allow_failure: true + - <<: *if-merge-request + changes: *ci-qa-patterns + allow_failure: true + - <<: *if-merge-request + changes: *static-analysis-patterns + allow_failure: true + - <<: *if-merge-request + changes: *db-patterns + allow_failure: true + - <<: *if-merge-request + changes: *decomposed-db-models-patterns + allow_failure: true + - <<: *if-merge-request + changes: *redis-patterns + allow_failure: true + - <<: *if-merge-request + changes: *feature-flag-development-config-patterns + allow_failure: true + - <<: *if-merge-request-targeting-stable-branch + changes: *setup-test-env-patterns + allow_failure: true + - <<: *if-automated-merge-request + changes: *db-patterns + allow_failure: true + - <<: *if-automated-merge-request + changes: *backend-patterns + allow_failure: true + - <<: *if-automated-merge-request + changes: *code-backstage-patterns + allow_failure: true + - <<: *if-security-merge-request + changes: *backend-patterns + allow_failure: true + - <<: *if-security-merge-request + changes: *code-backstage-qa-patterns + allow_failure: true + - <<: *if-security-merge-request + changes: *db-patterns + allow_failure: true + - <<: *if-ruby-branch + allow_failure: true + - <<: *if-auto-deploy-branches + allow_failure: true + - <<: *if-default-refs + changes: *ci-build-images-patterns + allow_failure: true + - <<: *if-default-refs + changes: *code-qa-patterns + allow_failure: true + - <<: *if-default-refs + changes: *code-backstage-qa-patterns + allow_failure: true + - <<: *if-default-refs + changes: *workhorse-patterns + allow_failure: true + - <<: *if-default-branch-schedule-nightly + allow_failure: true + - <<: *if-dot-com-gitlab-org-and-security-merge-request-manual-ff-package-and-e2e + changes: *feature-flag-development-config-patterns + allow_failure: true ################## # as-if-jh rules # diff --git a/.gitlab/ci/static-analysis.gitlab-ci.yml b/.gitlab/ci/static-analysis.gitlab-ci.yml index 997dfde4271..cce0beaa5cd 100644 --- a/.gitlab/ci/static-analysis.gitlab-ci.yml +++ b/.gitlab/ci/static-analysis.gitlab-ci.yml @@ -34,12 +34,6 @@ static-analysis: - yarn_install_script - fail_on_warnings scripts/static-analysis -static-analysis as-if-foss: - extends: - - static-analysis - - .static-analysis:rules:static-analysis-as-if-foss - - .as-if-foss - static-verification-with-database: extends: - .static-analysis-base @@ -69,13 +63,6 @@ generate-apollo-graphql-schema: paths: - "${GRAPHQL_SCHEMA_APOLLO_FILE}" -generate-apollo-graphql-schema as-if-foss: - extends: - - generate-apollo-graphql-schema - - .frontend:rules:eslint-as-if-foss - - .as-if-foss - needs: ['graphql-schema-dump as-if-foss'] - eslint: extends: - .static-analysis-base @@ -88,13 +75,6 @@ eslint: - yarn_install_script - run_timed_command "yarn run lint:eslint:all" -eslint as-if-foss: - extends: - - eslint - - .frontend:rules:eslint-as-if-foss - - .as-if-foss - needs: ['generate-apollo-graphql-schema as-if-foss'] - haml-lint: extends: - .static-analysis-base diff --git a/db/schema_migrations/20240123155252 b/db/schema_migrations/20240123155252 index 869d077b22a..6ae7cf4cecf 100644 --- a/db/schema_migrations/20240123155252 +++ b/db/schema_migrations/20240123155252 @@ -1 +1 @@ -1383d7d49981bdb5fa5eeb54dd83520f4bd2de1e8f0cc227c1397d0bc48a66f4 \ No newline at end of file +f6e40be8eac5b255458e32b33755b9404ede064add99f0f13998647eea1dfbb7 \ No newline at end of file diff --git a/doc/development/pipelines/index.md b/doc/development/pipelines/index.md index 91f4ae702ac..cdfc2c95c18 100644 --- a/doc/development/pipelines/index.md +++ b/doc/development/pipelines/index.md @@ -286,36 +286,47 @@ If you want to force a Review App to be deployed regardless of your changes, you Consult the [Review Apps](../testing_guide/review_apps.md) dedicated page for more information. -### As-if-FOSS jobs +### As-if-FOSS jobs and cross project downstream pipeline -The `* as-if-foss` jobs run the GitLab test suite "as if FOSS", meaning as if the jobs would run in the context -of `gitlab-org/gitlab-foss`. These jobs are only created in the following cases: +To ensure the relevant changes are working properly in the FOSS project, +under some conditions we also run: -- when the `pipeline:run-as-if-foss` label is set on the merge request -- when the merge request is created in the `gitlab-org/security/gitlab` project -- when any CI configuration file is changed (for example, `.gitlab-ci.yml` or `.gitlab/ci/**/*`) +- `* as-if-foss` jobs in the same pipeline +- Cross project downstream FOSS pipeline -The `* as-if-foss` jobs are run in addition to the regular EE-context jobs. They have the `FOSS_ONLY='1'` variable -set and get the `ee/` folder removed before the tests start running. +The `* as-if-foss` jobs run the GitLab test suite "as if FOSS", meaning as if +the jobs would run in the context of `gitlab-org/gitlab-foss`. On the other +hand, cross project downstream FOSS pipeline actually runs inside the FOSS +project, which should be even closer to an actual FOSS environment. -The intent is to ensure that a change doesn't introduce a failure after `gitlab-org/gitlab` is synced to `gitlab-org/gitlab-foss`. +We run them in the following cases: -#### As-if-FOSS cross project downstream pipeline +- when the `pipeline:run-as-if-foss` label is set on the merge request +- when the merge request is created in the `gitlab-org/security/gitlab` project +- when CI configuration file is changed (for example, `.gitlab-ci.yml` or `.gitlab/ci/**/*`) -As an alternative to the `* as-if-foss` jobs, we can also run a cross project -FOSS pipeline exactly in the `gitlab-org/gitlab-foss` project. We trigger it -in the following cases: +The `* as-if-foss` jobs are run in addition to the regular EE-context jobs. +They have the `FOSS_ONLY='1'` variable set and get the `ee/` folder removed +before the tests start running. -- when the `pipeline:run-as-if-foss-cross-project` label is set on the merge request +Cross project downstream FOSS pipeline simulates merging the merge request +into the default branch in the FOSS project instead, which removes a list of +files. The list can be found in +[`.gitlab/ci/as-if-foss.gitlab-ci.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/215d1e27d74cbebaa787d35bf7dcabc5c34ebf86/.gitlab/ci/as-if-foss.gitlab-ci.yml#L22-30) +and in +[`merge-train/bin/merge-train`](https://gitlab.com/gitlab-org/merge-train/-/blob/041d942ae1b5615703b7a786982340b61620e7c5/bin/merge-train#L228-239). -This is still working-in-progress to replace the `* as-if-foss` jobs. The -goal is to simplify pipeline rules and make it more clear about the intention. +The intent is to ensure that a change doesn't introduce a failure after +`gitlab-org/gitlab` is synced to `gitlab-org/gitlab-foss`. ##### Tokens set in the project variables - `AS_IF_FOSS_TOKEN`: This is a [GitLab FOSS](https://gitlab.com/gitlab-org/gitlab-foss) project token with `developer` role and `write_repository` permission, to push generated `as-if-foss/*` branch. + - Note that the same name for the security project should use another token + from the security FOSS project, so that we never push security changes to + a public project. ### As-if-JH cross project downstream pipeline diff --git a/qa/qa/page/component/issue_board/show.rb b/qa/qa/page/component/issue_board/show.rb index 6fbe2b7036c..39017f43746 100644 --- a/qa/qa/page/component/issue_board/show.rb +++ b/qa/qa/page/component/issue_board/show.rb @@ -85,7 +85,7 @@ module QA def click_boards_dropdown_button # The dropdown button comes from the `GlDropdown` component of `@gitlab/ui`, - # so it wasn't possible to add a `data-qa-selector` to it. + # so it wasn't possible to add a `data-testid` to it. find_element('boards-dropdown').find('button').click end diff --git a/qa/qa/page/project/web_ide/vscode.rb b/qa/qa/page/project/web_ide/vscode.rb index d7fbd3b0458..90cd3594bf5 100644 --- a/qa/qa/page/project/web_ide/vscode.rb +++ b/qa/qa/page/project/web_ide/vscode.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -# VSCode WebIDE is built off an iFrame application therefore we are unable to use `qa-selectors` +# VSCode WebIDE is built off an iFrame application therefore we are unable to use `testids` module QA module Page module Project diff --git a/scripts/rspec_helpers.sh b/scripts/rspec_helpers.sh index b0dc3bf2925..f42e7bbcfb7 100644 --- a/scripts/rspec_helpers.sh +++ b/scripts/rspec_helpers.sh @@ -232,7 +232,8 @@ function rspec_parallelized_job() { read -ra job_name <<< "${CI_JOB_NAME}" local test_tool="${job_name[0]}" local test_level="${job_name[1]}" - local report_name=$(echo "${CI_JOB_NAME}" | sed -E 's|[/ ]|_|g') # e.g. 'rspec unit pg13 1/24' would become 'rspec_unit_pg13_1_24' + # e.g. 'rspec unit pg13 1/24 278964' would become 'rspec_unit_pg13_1_24_278964' + local report_name=$(echo "${CI_JOB_NAME} ${CI_PROJECT_ID}" | sed -E 's|[/ ]|_|g') local rspec_opts="${1:-}" local rspec_tests_mapping_enabled="${RSPEC_TESTS_MAPPING_ENABLED:-}" local spec_folder_prefixes="" @@ -311,7 +312,6 @@ function retry_failed_rspec_examples() { # Keep track of the tests that are retried, later consolidated in a single file by the `rspec:flaky-tests-report` job local failed_examples=$(grep " failed" ${RSPEC_LAST_RUN_RESULTS_FILE}) - local report_name=$(echo "${CI_JOB_NAME}" | sed -E 's|[/ ]|_|g') # e.g. 'rspec unit pg13 1/24' would become 'rspec_unit_pg13_1_24' echoinfo "RSPEC_RETRIED_TESTS_REPORT_PATH: ${RSPEC_RETRIED_TESTS_REPORT_PATH:-}" echo "${CI_JOB_URL}" > "${RSPEC_RETRIED_TESTS_REPORT_PATH:-}" diff --git a/scripts/setup/generate-as-if-foss-env.rb b/scripts/setup/generate-as-if-foss-env.rb index 21f1822503c..38f64946841 100755 --- a/scripts/setup/generate-as-if-foss-env.rb +++ b/scripts/setup/generate-as-if-foss-env.rb @@ -64,9 +64,13 @@ class GenerateAsIfFossEnv end def detect_rspec(job) - rspec_type = job.name[/^rspec(?:-all)? ([\w\-]+)/, 1] + rspec_type = job.name[%r{^rspec(?:-all)? ([\w\-]+)}, 1] - rspec_jobs << rspec_type if rspec_type + return unless rspec_type + + rspec_kind = job.name[%r{pg\d+ ([\w\-]+)(?: \d+/\d+)?$}, 1] + rspec_jobs << rspec_type + rspec_jobs << rspec_kind if rspec_kind end def detect_other_jobs(job) diff --git a/spec/dot_gitlab_ci/rules_spec.rb b/spec/dot_gitlab_ci/rules_spec.rb index 8e13be25f4c..64047074051 100644 --- a/spec/dot_gitlab_ci/rules_spec.rb +++ b/spec/dot_gitlab_ci/rules_spec.rb @@ -29,4 +29,39 @@ RSpec.describe '.gitlab/ci/rules.gitlab-ci.yml', feature_category: :tooling do end end end + + describe 'start-as-if-foss' do + let(:base_rules) { config.dig('.as-if-foss:rules:start-as-if-foss', 'rules') } + + context 'with .as-if-foss:rules:start-as-if-foss:allow-failure:manual' do + let(:derived_rules) { config.dig('.as-if-foss:rules:start-as-if-foss:allow-failure:manual', 'rules') } + + it 'has the same rules as the base and also allow-failure and manual' do + base_rules.zip(derived_rules).each do |(base, derived)| + # !references should be the same. Stop rules should be the same. + if base.is_a?(Array) || base['when'] == 'never' + expect(base).to eq(derived) + else + expect(derived).to eq( + base.merge('allow_failure' => true, 'when' => 'manual')) + end + end + end + end + + context 'with .as-if-foss:rules:start-as-if-foss:allow-failure' do + let(:derived_rules) { config.dig('.as-if-foss:rules:start-as-if-foss:allow-failure', 'rules') } + + it 'has the same rules as the base and also allow-failure' do + base_rules.zip(derived_rules).each do |(base, derived)| + # !references should be the same. Stop rules should be the same. + if base.is_a?(Array) || base['when'] == 'never' + expect(base).to eq(derived) + else + expect(derived).to eq(base.merge('allow_failure' => true)) + end + end + end + end + end end diff --git a/spec/scripts/setup/generate_as_if_foss_env_spec.rb b/spec/scripts/setup/generate_as_if_foss_env_spec.rb index e437ce24e79..2b94ce5bb0c 100644 --- a/spec/scripts/setup/generate_as_if_foss_env_spec.rb +++ b/spec/scripts/setup/generate_as_if_foss_env_spec.rb @@ -21,7 +21,11 @@ RSpec.describe GenerateAsIfFossEnv, feature_category: :tooling do let(:jobs) do [ 'rspec fast_spec_helper', - 'rspec unit pg14', + 'rspec unit pg14 praefect 1/5', + 'rspec unit pg14 single-db 2/5', + 'rspec unit pg14 single-db-ci-connection 3/5', + 'rspec unit pg14 single-redis 4/5', + 'rspec unit pg14 5/5', 'rspec integration pg14', 'rspec system pg14', 'rspec migration pg14', @@ -64,6 +68,10 @@ RSpec.describe GenerateAsIfFossEnv, feature_category: :tooling do ENABLE_RSPEC: 'true', ENABLE_RSPEC_FAST_SPEC_HELPER: 'true', ENABLE_RSPEC_UNIT: 'true', + ENABLE_RSPEC_PRAEFECT: 'true', + ENABLE_RSPEC_SINGLE_DB: 'true', + ENABLE_RSPEC_SINGLE_DB_CI_CONNECTION: 'true', + ENABLE_RSPEC_SINGLE_REDIS: 'true', ENABLE_RSPEC_INTEGRATION: 'true', ENABLE_RSPEC_SYSTEM: 'true', ENABLE_RSPEC_MIGRATION: 'true', @@ -96,6 +104,10 @@ RSpec.describe GenerateAsIfFossEnv, feature_category: :tooling do ENABLE_RSPEC=true ENABLE_RSPEC_FAST_SPEC_HELPER=true ENABLE_RSPEC_UNIT=true + ENABLE_RSPEC_PRAEFECT=true + ENABLE_RSPEC_SINGLE_DB=true + ENABLE_RSPEC_SINGLE_DB_CI_CONNECTION=true + ENABLE_RSPEC_SINGLE_REDIS=true ENABLE_RSPEC_INTEGRATION=true ENABLE_RSPEC_SYSTEM=true ENABLE_RSPEC_MIGRATION=true diff --git a/spec/simplecov_env.rb b/spec/simplecov_env.rb index d48acc77afb..fbf4401ac2f 100644 --- a/spec/simplecov_env.rb +++ b/spec/simplecov_env.rb @@ -21,9 +21,9 @@ module SimpleCovEnv def configure_job SimpleCov.configure do if ENV['CI_JOB_NAME'] - job_name = Gitlab::Utils.slugify(ENV['CI_JOB_NAME']) - coverage_dir "coverage/#{job_name}" - command_name job_name + coverage_name = Gitlab::Utils.slugify("#{ENV['CI_JOB_NAME']}-#{ENV['CI_PROJECT_ID']}") + coverage_dir "coverage/#{coverage_name}" + command_name coverage_name end if ENV['CI'] -- cgit v1.2.3