include: - local: .gitlab/ci/global.gitlab-ci.yml - 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 # code pattern changes .code-pattern-changes: &code-pattern-changes if: $MR_CODE_PATTERNS == "true" .rules:gdk:qa-selective: rules: - <<: *code-pattern-changes when: never - !reference [.rules:test:qa-selective, rules] - if: $QA_SUITES =~ /Test::Instance::Blocking/ .rules:gdk:qa-parallel: rules: # To account for cases where a group label is set which may trigger selective execution # But we want to execute full blocking suite on gdk in case of code-pattern-changes - <<: *code-pattern-changes variables: QA_TESTS: "" KNAPSACK_TEST_FILE_PATTERN: "" - !reference [.rules:test:qa-parallel, rules] - if: $QA_SUITES =~ /Test::Instance::Blocking/ - !reference [.rules:test:manual, rules] .rules:test:gdk-load-balancer-changes: rules: - when: manual allow_failure: true changes: - ".gitlab/ci/test-on-gdk/**" - "lib/gitlab/database/load_balancing/**/*" .with-parallel: parallel: 15 .with-gdk-log: after_script: - mv $CI_BUILDS_DIR/*.log $CI_PROJECT_DIR/ .gdk-qa-base: image: "${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/${BUILD_OS}-${OS_VERSION}-ruby-${RUBY_VERSION}:git-2.36-lfs-2.9-chrome-${CHROME_VERSION}-docker-${DOCKER_VERSION}-gcloud-383-kubectl-1.23" extends: - .qa-cache - .docker-in-docker - .gitlab-qa-report - .qa-run-e2e-with-bundler stage: test services: - name: docker:${DOCKER_VERSION}-dind - name: ${GDK_IMAGE} alias: gdk.test # CI setup will tail each component in to separate file # Override default command so we don't tail all of the logs to stdout unnecessarily command: [gdk, tail, rails-web] tags: - e2e variables: QA_GENERATE_ALLURE_REPORT: "true" QA_CAN_TEST_PRAEFECT: "false" QA_INTERCEPT_REQUESTS: "false" QA_SUITE_STATUS_ENV_FILE: "$CI_PROJECT_DIR/suite_status.env" QA_DOCKER_NETWORK: host QA_DISABLE_RSPEC_RETRY: "true" QA_GITLAB_URL: http://gdk.test:3000 GITLAB_QA_ADMIN_ACCESS_TOKEN: $QA_ADMIN_ACCESS_TOKEN FF_NETWORK_PER_BUILD: "true" RSPEC_LAST_RUN_RESULTS_FILE: "$CI_PROJECT_DIR/qa/tmp/examples.txt" COVERBAND_ENABLED: "$COVERBAND_ENABLED" before_script: - echo "SUITE_RAN=true" > "$QA_SUITE_STATUS_ENV_FILE" - echo -e "\e[0Ksection_start:`date +%s`:install_gems[collapsed=true]\r\e[0KInstall gems" - cd qa && bundle install - echo -e "\e[0Ksection_end:`date +%s`:install_gems\r\e[0K" after_script: - !reference [.with-gdk-log, after_script] - !reference [.gitlab-qa-report, after_script] artifacts: paths: - qa/tmp - ${CI_PROJECT_DIR}/*.log reports: junit: qa/tmp/rspec-*.xml dotenv: "$QA_SUITE_STATUS_ENV_FILE" expire_in: 7 days when: always # Take the existing GDK docker image and reconfigure it with Postgres load # balancing. Adding 5s lag to 1 of the replicas to validate robustness of # the load balancer. .gdk-with-load-balancer-setup: variables: WITH_LOAD_BALANCER: "true" # ========================================== # Pre stage # ========================================== # override .download-knapsack-report job to not depend on qa-image build download-knapsack-report: extends: - .download-knapsack-report - .ruby-image - .bundler-variables - .qa-cache - .rules:download-knapsack variables: GIT_STRATEGY: clone before_script: - cd qa && bundle install after_script: [] # ========================================== # Test stage # ========================================== # ------------------------------------------ # Blocking tests # ------------------------------------------ gdk-qa-blocking: extends: - .gdk-qa-base - .with-parallel - .rules:gdk:qa-parallel variables: QA_SCENARIO: Test::Instance::Blocking QA_RUN_TYPE: gdk-qa-blocking gdk-qa-blocking-ff-inverse: extends: gdk-qa-blocking variables: QA_FEATURE_FLAGS: $FEATURE_FLAGS rules: - !reference [.rules:test:feature-flags-set, rules] gdk-qa-blocking-selective: extends: - .gdk-qa-base - .rules:gdk:qa-selective variables: QA_SCENARIO: Test::Instance::Blocking QA_RUN_TYPE: gdk-qa-blocking # ------------------------------------------ # Non Blocking tests # ------------------------------------------ gdk-qa-blocking-with-load-balancer: extends: - .gdk-qa-base - .gdk-with-load-balancer-setup - .with-gdk-log - .with-parallel variables: QA_SCENARIO: Test::Instance::Blocking QA_RUN_TYPE: gdk-qa-blocking artifacts: paths: - log reports: dotenv: "" rules: - !reference [".rules:test:never-schedule-pipeline", rules] - !reference [".rules:test:gdk-load-balancer-changes", rules] gdk-qa-non-blocking: extends: - .gdk-qa-base - .with-gdk-log variables: QA_SCENARIO: Test::Instance::NonBlocking QA_RUN_TYPE: gdk-qa-non-blocking parallel: 5 allow_failure: true artifacts: paths: - log reports: dotenv: "" rules: # run tests on master pipelines to collect metrics and move tests to `blocking` job until `non-blocking` job # is removed entirely - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' - when: manual # ========================================== # Post test stage # ========================================== e2e-test-report: extends: .rules:report:allure-report variables: ALLURE_REPORT_RESULTS_GLOB: "qa/tmp/allure-results" upload-knapsack-report: extends: - .upload-knapsack-report - .rules:report:process-results variables: QA_KNAPSACK_REPORT_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/knapsack/*/*.json export-test-metrics: extends: - .export-test-metrics - .rules:report:process-results variables: QA_METRICS_REPORT_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/test-metrics-*.json export-code-paths-mapping: extends: - .export-code-paths-mapping variables: QA_CODE_PATHS_MAPPING_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/test-code-paths-mapping-*.json rules: - if: '$COVERBAND_ENABLED == "true"' .gitlab-qa-report: variables: QA_RSPEC_JSON_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/rspec-*.json QA_SYSTEM_LOG_FILE_PATTERN: $CI_PROJECT_DIR/test_output/logs generate-test-session: extends: - .generate-test-session - .rules:report:process-results variables: QA_RSPEC_JSON_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/rspec-*.json notify-slack: extends: - .notify-slack - .rules:report:process-results variables: QA_RSPEC_XML_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/rspec-*.xml