diff options
Diffstat (limited to '.gitlab/ci/qa-common/rules.gitlab-ci.yml')
-rw-r--r-- | .gitlab/ci/qa-common/rules.gitlab-ci.yml | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/.gitlab/ci/qa-common/rules.gitlab-ci.yml b/.gitlab/ci/qa-common/rules.gitlab-ci.yml new file mode 100644 index 00000000000..3580339921d --- /dev/null +++ b/.gitlab/ci/qa-common/rules.gitlab-ci.yml @@ -0,0 +1,154 @@ +# Specific specs passed +.specific-specs: &specific-specs + if: $QA_TESTS != "" + +# No specific specs passed +.all-specs: &all-specs + if: $QA_TESTS == "" + +# FF changes +.feature-flags-set: &feature-flags-set + if: $QA_FEATURE_FLAGS =~ /enabled|disabled/ + +# Manually trigger job on ff changes but with default ff state instead of inverted +.feature-flags-set-manual: &feature-flags-set-manual + <<: *feature-flags-set + when: manual + allow_failure: true + +# Run the job on master pipeline +.default-branch: &default-branch + if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' + +# Run all tests when QA framework changes present, full suite execution is explicitly enabled or a feature flag file is removed +.qa-run-all-tests: &qa-run-all-tests + if: $QA_FRAMEWORK_CHANGES == "true" || $QA_RUN_ALL_TESTS == "true" || $QA_RUN_ALL_E2E_LABEL == "true" || $QA_FEATURE_FLAGS =~ /deleted/ + +# Run job when MR has pipeline:run-all-e2e label +.qa-run-all-e2e-label: &qa-run-all-e2e-label + if: $QA_RUN_ALL_E2E_LABEL == "true" + +# Process test results (notify failure to slack, create test session report, relate test failures) +.process-test-results: &process-test-results + if: $PROCESS_TEST_RESULTS == "true" + +.not-canonical-project: ¬-canonical-project + if: '$CI_PROJECT_PATH != "gitlab-org/gitlab" && $CI_PROJECT_PATH != "gitlab-cn/gitlab"' + +# Selective test execution against omnibus instance have following execution scenarios: +# * only e2e spec files changed - runs only changed specs +# * qa framework changes - runs full test suite +# * feature flag changed - runs full test suite with base gitlab instance configuration with both ff states +# * quarantined e2e spec - skips execution of e2e tests by creating a no-op pipeline + +# ------------------------------------------ +# Prepare +# ------------------------------------------ +.rules:prepare: + rules: + - when: always + +.rules:omnibus-build: + rules: + - if: $SKIP_OMNIBUS_TRIGGER == "true" + when: never + - if: $FOSS_ONLY != "1" + +.rules:omnibus-build-ce: + rules: + - if: $SKIP_OMNIBUS_TRIGGER == "true" + when: never + - if: $FOSS_ONLY == "1" + +.rules:update-cache: + rules: + - if: '$UPDATE_QA_CACHE == "true"' + +.rules:download-knapsack: + rules: + - when: always + +# ------------------------------------------ +# Test +# ------------------------------------------ +.rules:test:manual: + rules: + - when: manual + allow_failure: true + variables: + QA_TESTS: "" + +.rules:test:feature-flags-set: + rules: + # unset specific specs if pipeline has feature flag changes and run full suite + - <<: *feature-flags-set + variables: + QA_TESTS: "" + +# parallel and non parallel rules are used for jobs that require parallel execution and thus need to switch +# between parallel and non parallel when only certain specs are executed +.rules:test:qa-selective: + rules: + # always run parallel with full suite when framework changes present or ff state changed + - <<: *qa-run-all-tests + when: never + - <<: *all-specs + when: never + - <<: *feature-flags-set + when: never + +.rules:test:qa-parallel: + rules: + - *qa-run-all-tests + - <<: *specific-specs + when: manual + allow_failure: true + variables: + QA_TESTS: "" + - *feature-flags-set-manual + +# general qa job rule for jobs without the need to run in parallel +.rules:test:qa: + rules: + - *qa-run-all-tests + - *feature-flags-set-manual + +.rules:test:ee-only: + rules: + - if: $FOSS_ONLY == "1" + when: never + +.rules:test:update: + rules: + # skip upgrade jobs if gitlab version is not in semver compatible format + # these jobs need gitlab version because we can't reliably detect it from just the image + - if: $GITLAB_SEMVER_VERSION !~ /^\d+\.\d+\.\d+/ + when: never + # update type tests are used to check if gitlab upgrade can be performed correctly (mainly migrations) + # there isn't much benefit in running tests after update with new sidebar enabled and there + # is also an issue to properly pass feature toggle to this job due to how gitlab-qa parses cli args + - if: $QA_SUPER_SIDEBAR_ENABLED == "true" + when: never + - !reference [.rules:test:ee-only, rules] + - !reference [.rules:test:qa, rules] + +.rules:test:qa-default-branch: + rules: + - *qa-run-all-e2e-label + - *default-branch + - *feature-flags-set-manual + +# ------------------------------------------ +# Report +# ------------------------------------------ +.rules:report:allure-report: + rules: + - if: $SKIP_ALLURE_REPORT == "true" + when: never + - when: always + +.rules:report:process-results: + rules: + - <<: *not-canonical-project + when: never + - *process-test-results |