Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root@localhost>2024-01-24 15:59:12 +0300
committerroot <root@localhost>2024-01-24 15:59:12 +0300
commitd187126b67a3e9122c843cdd3db69aead5e1bda8 (patch)
treeea37e9f4c4b7dde35439225091ccd881c6e3c121
parentaf5193aa3cc159fd7d08be988bd00f1921077117 (diff)
-rw-r--r--.gitlab/ci/as-if-foss.gitlab-ci.yml8
-rw-r--r--.gitlab/ci/frontend.gitlab-ci.yml23
-rw-r--r--.gitlab/ci/preflight.gitlab-ci.yml6
-rw-r--r--.gitlab/ci/qa.gitlab-ci.yml6
-rw-r--r--.gitlab/ci/rails.gitlab-ci.yml180
-rw-r--r--.gitlab/ci/rules.gitlab-ci.yml435
-rw-r--r--.gitlab/ci/static-analysis.gitlab-ci.yml20
-rw-r--r--db/schema_migrations/202401231552522
-rw-r--r--doc/development/pipelines/index.md43
-rw-r--r--qa/qa/page/component/issue_board/show.rb2
-rw-r--r--qa/qa/page/project/web_ide/vscode.rb2
-rw-r--r--scripts/rspec_helpers.sh4
-rwxr-xr-xscripts/setup/generate-as-if-foss-env.rb8
-rw-r--r--spec/dot_gitlab_ci/rules_spec.rb35
-rw-r--r--spec/scripts/setup/generate_as_if_foss_env_spec.rb14
-rw-r--r--spec/simplecov_env.rb6
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']