From cd8afa2cbf14672277f9336f7ea31622f05abf9d Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin <jen-shin@gitlab.com> Date: Thu, 25 Jan 2024 17:23:55 +0000 Subject: [PATCH] Revert "Merge branch '412717-run-foss-jobs-in-foss' into 'master'" This reverts merge request !141897 --- .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 | 438 +++++------------- .gitlab/ci/static-analysis.gitlab-ci.yml | 20 + doc/development/ee_features.md | 2 +- doc/development/pipelines/index.md | 45 +- scripts/rspec_helpers.sh | 4 +- scripts/setup/generate-as-if-foss-env.rb | 12 +- spec/dot_gitlab_ci/rules_spec.rb | 35 -- .../setup/generate_as_if_foss_env_spec.rb | 14 +- spec/simplecov_env.rb | 6 +- 14 files changed, 368 insertions(+), 431 deletions(-) diff --git a/.gitlab/ci/as-if-foss.gitlab-ci.yml b/.gitlab/ci/as-if-foss.gitlab-ci.yml index 5bcf1ff696c0c..fc8db3ba97480 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/${CI_PROJECT_NAMESPACE}/gitlab-foss.git" + FOSS_REPOSITORY: "https://dummy:${AS_IF_FOSS_TOKEN}@gitlab.com/gitlab-org/gitlab-foss.git" prepare-as-if-foss-branch: extends: @@ -66,10 +66,6 @@ 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 @@ -90,7 +86,7 @@ start-as-if-foss: ENABLE_QA_SELECTORS: $ENABLE_QA_SELECTORS ENABLE_STATIC_ANALYSIS: $ENABLE_STATIC_ANALYSIS trigger: - project: ${CI_PROJECT_NAMESPACE}/gitlab-foss + project: gitlab-org/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 22a6b3d4842bf..9d78fb102f94c 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -226,6 +226,12 @@ 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 @@ -273,6 +279,14 @@ 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 @@ -420,3 +434,12 @@ 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 729815fd338a3..426d36b24f4a6 100644 --- a/.gitlab/ci/preflight.gitlab-ci.yml +++ b/.gitlab/ci/preflight.gitlab-ci.yml @@ -73,3 +73,9 @@ 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 7d0910f7ba596..391e25956eb1d 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -48,6 +48,12 @@ 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 09ce8f8d0f9db..e46e3d5b4625a 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -358,26 +358,6 @@ 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 @@ -400,6 +380,35 @@ 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 @@ -485,7 +494,11 @@ rspec:coverage: - job: rspec:artifact-collector remainder single-redis optional: true # as-if-foss jobs - - job: rspec:artifact-collector as-if-foss + - 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 optional: true # EE jobs - job: rspec:artifact-collector ee single-redis @@ -643,6 +656,131 @@ 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 675194f914912..fb9a768816606 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -68,6 +68,9 @@ .if-merge-request-labels-as-if-foss: &if-merge-request-labels-as-if-foss if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-as-if-foss/' +.if-merge-request-labels-as-if-foss-cross-project: &if-merge-request-labels-as-if-foss-cross-project + if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-as-if-foss-cross-project/' + .if-merge-request-labels-as-if-jh: &if-merge-request-labels-as-if-jh if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-as-if-jh/' @@ -1349,6 +1352,22 @@ - <<: *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] @@ -1365,6 +1384,15 @@ - <<: *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 @@ -1476,6 +1504,20 @@ - <<: *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 @@ -1908,7 +1950,6 @@ - <<: *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 @@ -1924,7 +1965,6 @@ - <<: *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 @@ -1937,6 +1977,11 @@ 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 @@ -1952,7 +1997,6 @@ - <<: *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 @@ -1965,6 +2009,11 @@ 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 @@ -1998,8 +2047,6 @@ .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 @@ -2217,6 +2264,64 @@ 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 @@ -2415,6 +2520,18 @@ - <<: *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' @@ -2893,333 +3010,28 @@ #################### # 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 - - <<: *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 + - <<: *if-merge-request-labels-as-if-foss-cross-project .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 - 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 + - <<: *if-merge-request-labels-as-if-foss-cross-project 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 - 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 + - <<: *if-merge-request-labels-as-if-foss-cross-project allow_failure: true ################## diff --git a/.gitlab/ci/static-analysis.gitlab-ci.yml b/.gitlab/ci/static-analysis.gitlab-ci.yml index cce0beaa5cdeb..997dfde4271cc 100644 --- a/.gitlab/ci/static-analysis.gitlab-ci.yml +++ b/.gitlab/ci/static-analysis.gitlab-ci.yml @@ -34,6 +34,12 @@ 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 @@ -63,6 +69,13 @@ 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 @@ -75,6 +88,13 @@ 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/doc/development/ee_features.md b/doc/development/ee_features.md index 8f7da8d46e657..fd00b8b86cb23 100644 --- a/doc/development/ee_features.md +++ b/doc/development/ee_features.md @@ -296,7 +296,7 @@ FOSS context as well. To run pipelines in both contexts, add the `~"pipeline:run-as-if-foss"` label to the merge request. -See the [As-if-FOSS jobs and cross project downstream pipeline](pipelines/index.md#as-if-foss-jobs-and-cross-project-downstream-pipeline) pipelines documentation for more information. +See the [As-if-FOSS jobs](pipelines/index.md#as-if-foss-jobs) pipelines documentation for more information. ## Separation of EE code in the backend diff --git a/doc/development/pipelines/index.md b/doc/development/pipelines/index.md index 4597d4e23dd9d..ad4cef407487a 100644 --- a/doc/development/pipelines/index.md +++ b/doc/development/pipelines/index.md @@ -286,47 +286,36 @@ 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 and cross project downstream pipeline +### As-if-FOSS jobs -To ensure the relevant changes are working properly in the FOSS project, -under some conditions we also run: +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: -- `* as-if-foss` jobs in the same pipeline -- Cross project downstream FOSS 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 any CI configuration file is changed (for example, `.gitlab-ci.yml` or `.gitlab/ci/**/*`) -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 `* 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. -We run them in the following cases: +The intent is to ensure that a change doesn't introduce a failure after `gitlab-org/gitlab` is synced to `gitlab-org/gitlab-foss`. -- 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-if-FOSS cross project downstream 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. +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: -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). +- when the `pipeline:run-as-if-foss-cross-project` label is set on the merge request -The intent is to ensure that a change doesn't introduce a failure after -`gitlab-org/gitlab` is synced to `gitlab-org/gitlab-foss`. +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. -#### Tokens set in the project variables +##### 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/scripts/rspec_helpers.sh b/scripts/rspec_helpers.sh index f42e7bbcfb74b..b0dc3bf292517 100644 --- a/scripts/rspec_helpers.sh +++ b/scripts/rspec_helpers.sh @@ -232,8 +232,7 @@ function rspec_parallelized_job() { read -ra job_name <<< "${CI_JOB_NAME}" local test_tool="${job_name[0]}" local test_level="${job_name[1]}" - # 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 report_name=$(echo "${CI_JOB_NAME}" | sed -E 's|[/ ]|_|g') # e.g. 'rspec unit pg13 1/24' would become 'rspec_unit_pg13_1_24' local rspec_opts="${1:-}" local rspec_tests_mapping_enabled="${RSPEC_TESTS_MAPPING_ENABLED:-}" local spec_folder_prefixes="" @@ -312,6 +311,7 @@ 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 35fc4dfe4498b..21f1822503cd5 100755 --- a/scripts/setup/generate-as-if-foss-env.rb +++ b/scripts/setup/generate-as-if-foss-env.rb @@ -23,9 +23,7 @@ class GenerateAsIfFossEnv ]).freeze def initialize - @client = Gitlab.client( - endpoint: ENV['CI_API_V4_URL'], - private_token: ENV['PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE'] || '') + @client = Gitlab.client(endpoint: ENV['CI_API_V4_URL'], private_token: '') @rspec_jobs = Set.new @other_jobs = Set.new end @@ -66,13 +64,9 @@ def each_job end def detect_rspec(job) - rspec_type = job.name[%r{^rspec(?:-all)? ([\w\-]+)}, 1] + rspec_type = job.name[/^rspec(?:-all)? ([\w\-]+)/, 1] - 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 + rspec_jobs << rspec_type if rspec_type 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 af30621ac8331..b22cc6ac54930 100644 --- a/spec/dot_gitlab_ci/rules_spec.rb +++ b/spec/dot_gitlab_ci/rules_spec.rb @@ -23,39 +23,4 @@ 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 2b94ce5bb0c9e..e437ce24e7906 100644 --- a/spec/scripts/setup/generate_as_if_foss_env_spec.rb +++ b/spec/scripts/setup/generate_as_if_foss_env_spec.rb @@ -21,11 +21,7 @@ let(:jobs) do [ 'rspec fast_spec_helper', - '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 unit pg14', 'rspec integration pg14', 'rspec system pg14', 'rspec migration pg14', @@ -68,10 +64,6 @@ 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', @@ -104,10 +96,6 @@ 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 fbf4401ac2fec..d48acc77afb31 100644 --- a/spec/simplecov_env.rb +++ b/spec/simplecov_env.rb @@ -21,9 +21,9 @@ def start! def configure_job SimpleCov.configure do if ENV['CI_JOB_NAME'] - coverage_name = Gitlab::Utils.slugify("#{ENV['CI_JOB_NAME']}-#{ENV['CI_PROJECT_ID']}") - coverage_dir "coverage/#{coverage_name}" - command_name coverage_name + job_name = Gitlab::Utils.slugify(ENV['CI_JOB_NAME']) + coverage_dir "coverage/#{job_name}" + command_name job_name end if ENV['CI'] -- GitLab