# E2E tests pipeline loaded dynamically by script: scripts/generate-e2e-pipeline # For adding new tests, refer to: doc/development/testing_guide/end_to_end/test_pipelines.md include: - local: .gitlab/ci/qa-common/main.gitlab-ci.yml - local: .gitlab/ci/qa-common/rules.gitlab-ci.yml - local: .gitlab/ci/qa-common/variables.gitlab-ci.yml - local: .gitlab/ci/qa-common/omnibus.gitlab-ci.yml # ========================================== # Prepare stage # ========================================== check-release-set: extends: .rules:prepare stage: .pre script: - | if [ -z "$RELEASE" ]; then echo "E2E test pipeline requires omnibus installation docker image to be set via $RELEASE environment variable" exit 1 else echo "Omnibus installation image is set to '$RELEASE'" fi download-knapsack-report: extends: - .download-knapsack-report - .rules:download-knapsack # ========================================== # Test stage # ========================================== # ------------------------------------------ # Manual jobs # ------------------------------------------ # Run manual quarantine job # this job requires passing QA_SCENARIO variable # and optionally QA_TESTS to run specific quarantined tests _quarantine: extends: - .qa - .rules:test:manual-except-default-branch stage: test variables: QA_RSPEC_TAGS: --tag quarantine after_script: - echo "After script overridden in _quarantine job" artifacts: when: always expire_in: 1 day paths: - gitlab-qa-run-*/**/test-metrics-*.json # ------------------------------------------ # FF changes # ------------------------------------------ # Run specs with feature flags set to the opposite of the default state instance-ff-inverse: extends: - .qa - .parallel variables: QA_SCENARIO: Test::Instance::Image QA_KNAPSACK_REPORT_NAME: instance QA_FEATURE_FLAGS: $FEATURE_FLAGS rules: - !reference [.rules:test:feature-flags-set, rules] # ------------------------------------------ # Jobs with parallel variant # ------------------------------------------ # ========== instance =========== instance: extends: - .parallel - .qa variables: QA_SCENARIO: Test::Instance::Image rules: - !reference [.rules:test:smoke-for-omnibus-mr, rules] - !reference [.rules:test:feature-flags-set, rules] # always run instance to validate ff change - !reference [.rules:test:qa-parallel, rules] - if: $QA_SUITES =~ /Test::Instance::All/ instance-selective: extends: .qa variables: QA_SCENARIO: Test::Instance::Image rules: - !reference [.rules:test:qa-selective, rules] - if: $QA_SUITES =~ /Test::Instance::All/ instance-selective-parallel: extends: - .parallel - .qa variables: QA_SCENARIO: Test::Instance::Image rules: - !reference [.rules:test:qa-selective-parallel, rules] - if: $QA_SUITES =~ /Test::Instance::All/ variables: QA_TESTS: "" # ========== praefect =========== praefect: extends: - .parallel - .qa parallel: 2 variables: QA_SCENARIO: Test::Integration::Praefect QA_CAN_TEST_PRAEFECT: "true" QA_GITALY_TRANSACTIONS_ENABLED: "false" KNAPSACK_TEST_FILE_PATTERN: "qa/specs/features/**/3_create/**/*_spec.rb" rules: - !reference [.rules:test:smoke-for-omnibus-mr, rules] - !reference [.rules:test:qa-parallel, rules] - if: $QA_SUITES =~ /Test::Instance::All/ praefect-selective: extends: .qa variables: QA_SCENARIO: Test::Integration::Praefect QA_CAN_TEST_PRAEFECT: "true" QA_GITALY_TRANSACTIONS_ENABLED: "false" rules: - !reference [.rules:test:qa-selective, rules] - if: $QA_SUITES =~ /Test::Instance::All/ praefect-selective-parallel: extends: - .qa - .parallel parallel: 2 variables: QA_SCENARIO: Test::Integration::Praefect QA_CAN_TEST_PRAEFECT: "true" QA_GITALY_TRANSACTIONS_ENABLED: "false" KNAPSACK_TEST_FILE_PATTERN: "qa/specs/features/**/3_create/**/*_spec.rb" rules: - !reference [.rules:test:qa-selective-parallel, rules] - if: $QA_SUITES =~ /Test::Instance::All/ variables: QA_TESTS: "" # ========== gitaly transactions enabled =========== # https://docs.gitlab.com/ee/architecture/blueprints/gitaly_transaction_management/ gitaly-transactions: extends: - .parallel - .qa parallel: 2 variables: QA_SCENARIO: Test::Integration::Praefect QA_CAN_TEST_PRAEFECT: "true" KNAPSACK_TEST_FILE_PATTERN: "qa/specs/features/**/3_create/**/*_spec.rb" QA_GITALY_TRANSACTIONS_ENABLED: "true" rules: - !reference [.rules:test:smoke-for-omnibus-mr, rules] - !reference [.rules:test:qa-parallel, rules] - if: $QA_SUITES =~ /Test::Instance::All/ gitaly-transactions-selective: extends: .qa variables: QA_SCENARIO: Test::Integration::Praefect QA_CAN_TEST_PRAEFECT: "true" QA_GITALY_TRANSACTIONS_ENABLED: "true" rules: - !reference [.rules:test:qa-selective, rules] - if: $QA_SUITES =~ /Test::Instance::All/ gitaly-transactions-selective-parallel: extends: - .qa - .parallel parallel: 2 variables: QA_SCENARIO: Test::Integration::Praefect QA_CAN_TEST_PRAEFECT: "true" QA_GITALY_TRANSACTIONS_ENABLED: "true" KNAPSACK_TEST_FILE_PATTERN: "qa/specs/features/**/3_create/**/*_spec.rb" rules: - !reference [.rules:test:qa-selective-parallel, rules] - if: $QA_SUITES =~ /Test::Instance::All/ variables: QA_TESTS: "" # ------------------------------------------ # Non parallel jobs # ------------------------------------------ gitaly-cluster: extends: .qa variables: QA_SCENARIO: Test::Integration::GitalyCluster rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::GitalyCluster/ - !reference [.rules:test:manual, rules] group-saml: extends: .qa variables: QA_SCENARIO: Test::Integration::GroupSAML rules: - !reference [.rules:test:ee-only, rules] - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::GroupSAML/ - !reference [.rules:test:manual, rules] oauth: extends: - .qa - .failure-videos variables: QA_SCENARIO: Test::Instance::Image QA_GITLAB_HOSTNAME: "gitlab" QA_GITLAB_USE_TLS: "true" QA_RSPEC_TAGS: --tag oauth GITLAB_QA_OPTS: --omnibus-config github_oauth rules: - !reference [.rules:test:qa-default-branch, rules] - if: $QA_SUITES =~ /Test::Instance::All/ - !reference [.rules:test:manual, rules] instance-saml: extends: .qa variables: QA_SCENARIO: Test::Integration::InstanceSAML rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::InstanceSAML/ - !reference [.rules:test:manual, rules] jira: extends: - .qa - .failure-videos variables: QA_SCENARIO: Test::Integration::Jira rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::Jira/ - !reference [.rules:test:manual, rules] integrations: extends: .qa variables: QA_SCENARIO: Test::Integration::Integrations rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::Integrations/ - !reference [.rules:test:manual, rules] ldap-no-server: extends: .qa variables: QA_SCENARIO: Test::Integration::LDAPNoServer rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::LDAPNoServer/ - !reference [.rules:test:manual, rules] ldap-tls: extends: .qa variables: QA_SCENARIO: Test::Integration::LDAPTLS rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::LDAPTLS/ - !reference [.rules:test:manual, rules] ldap-no-tls: extends: .qa variables: QA_SCENARIO: Test::Integration::LDAPNoTLS rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::LDAPNoTLS/ - !reference [.rules:test:manual, rules] mtls: extends: .qa variables: QA_SCENARIO: Test::Integration::MTLS rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::Mtls/ - !reference [.rules:test:manual, rules] mattermost: extends: - .qa - .failure-videos variables: QA_SCENARIO: Test::Integration::Mattermost rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::Mattermost/ - !reference [.rules:test:manual, rules] registry: extends: - .qa - .failure-videos variables: QA_SCENARIO: Test::Integration::Registry rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::Registry/ - !reference [.rules:test:manual, rules] repository-storage: extends: - .qa - .failure-videos variables: QA_SCENARIO: Test::Instance::RepositoryStorage rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Instance::RepositoryStorage/ - !reference [.rules:test:manual, rules] service-ping-disabled: extends: - .qa - .failure-videos variables: QA_SCENARIO: Test::Integration::ServicePingDisabled rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::ServicePingDisabled/ - !reference [.rules:test:manual, rules] smtp: extends: - .qa - .failure-videos variables: QA_SCENARIO: Test::Integration::SMTP rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::SMTP/ - !reference [.rules:test:manual, rules] cloud-activation: extends: - .qa - .failure-videos variables: QA_SCENARIO: Test::Instance::Image QA_RSPEC_TAGS: --tag cloud_activation rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Instance::CloudActivation/ - !reference [.rules:test:manual, rules] large-setup: extends: - .qa - .failure-videos variables: QA_SCENARIO: Test::Instance::Image QA_RSPEC_TAGS: --tag can_use_large_setup rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Instance::LargeSetup/ - !reference [.rules:test:manual, rules] metrics: extends: .qa variables: QA_SCENARIO: Test::Integration::Metrics rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Instance::Metrics/ - !reference [.rules:test:manual, rules] elasticsearch: extends: .qa variables: QA_SCENARIO: "Test::Integration::Elasticsearch" before_script: - !reference [.qa, before_script] rules: - !reference [.rules:test:ee-only, rules] - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::Elasticsearch/ - !reference [.rules:test:manual, rules] importers: extends: - .qa - .failure-videos variables: QA_SCENARIO: Test::Integration::Import QA_MOCK_GITHUB: "true" rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::Import/ - !reference [.rules:test:manual, rules] # ========== ai-gateway =========== .ai-gateway-base: extends: - .qa - .failure-videos ai-gateway: extends: - .ai-gateway-base variables: QA_SCENARIO: Test::Integration::AiGateway rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::AiGateway/ - !reference [.rules:test:manual, rules] ai-gateway-no-seat-assigned: extends: - .ai-gateway-base variables: QA_SCENARIO: Test::Integration::AiGatewayNoSeatAssigned rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::AiGatewayNoSeatAssigned/ - !reference [.rules:test:manual, rules] ai-gateway-no-add-on: extends: - .ai-gateway-base variables: QA_SCENARIO: Test::Integration::AiGatewayNoAddOn before_script: - export QA_EE_ACTIVATION_CODE=$QA_EE_ACTIVATION_CODE_NO_ADD_ON - !reference [.ai-gateway-base, before_script] rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::AiGatewayNoAddOn/ - !reference [.rules:test:manual, rules] ai-gateway-no-license: extends: - .ai-gateway-base variables: QA_SCENARIO: Test::Integration::AiGatewayNoLicense before_script: - unset QA_EE_LICENSE - !reference [.ai-gateway-base, before_script] rules: - !reference [.rules:test:qa, rules] - if: $QA_SUITES =~ /Test::Integration::AiGatewayNoLicense/ - !reference [.rules:test:manual, rules] # ------------------------------------------ # Update jobs # ------------------------------------------ update-minor: extends: - .qa - .update-script variables: UPDATE_TYPE: minor QA_RSPEC_TAGS: --tag health_check rules: - !reference [.rules:test:update, rules] - !reference [.rules:test:manual, rules] update-major: extends: - .qa - .update-script variables: UPDATE_TYPE: major QA_RSPEC_TAGS: --tag health_check rules: - !reference [.rules:test:update, rules] - !reference [.rules:test:manual, rules] update-ee-to-ce: extends: - .qa - .update-script variables: UPDATE_TYPE: minor UPDATE_FROM_EDITION: ee QA_RSPEC_TAGS: --tag health_check rules: - !reference [.rules:test:ce-only, rules] - !reference [.rules:test:update, rules] - !reference [.rules:test:manual, rules] # ========================================== # Post test stage # ========================================== e2e-test-report: extends: .rules:report:allure-report variables: ALLURE_RESULTS_GLOB: "gitlab-qa-run-*/**/allure-results" upload-knapsack-report: extends: - .upload-knapsack-report export-test-metrics: extends: - .export-test-metrics - .rules:report:process-results generate-test-session: extends: - .generate-test-session - .rules:report:process-results notify-slack: extends: - .notify-slack - .rules:report:process-results