diff options
Diffstat (limited to '.gitlab/ci/package-and-test/main.gitlab-ci.yml')
-rw-r--r-- | .gitlab/ci/package-and-test/main.gitlab-ci.yml | 253 |
1 files changed, 16 insertions, 237 deletions
diff --git a/.gitlab/ci/package-and-test/main.gitlab-ci.yml b/.gitlab/ci/package-and-test/main.gitlab-ci.yml index a53c195e025..774939c7e44 100644 --- a/.gitlab/ci/package-and-test/main.gitlab-ci.yml +++ b/.gitlab/ci/package-and-test/main.gitlab-ci.yml @@ -1,76 +1,9 @@ # E2E tests pipeline loaded dynamically by script: scripts/generate-e2e-pipeline # For adding new tests, refer to: doc/development/testing_guide/end_to_end/package_and_test_pipeline.md - -default: - interruptible: true - -workflow: - name: $PIPELINE_NAME - include: - - local: .gitlab/ci/package-and-test/rules.gitlab-ci.yml - - local: .gitlab/ci/package-and-test/variables.gitlab-ci.yml - - project: gitlab-org/quality/pipeline-common - ref: 3.1.5 - file: - - /ci/base.gitlab-ci.yml - - /ci/allure-report.yml - - /ci/knapsack-report.yml - -stages: - - test - - report - - notify - -# ========================================== -# Templates -# ========================================== -.parallel: - parallel: 5 - variables: - QA_KNAPSACK_REPORT_PATH: $CI_PROJECT_DIR/qa/knapsack - -.ruby-image: - # Because this pipeline template can be included directly in other projects, - # image path and registry needs to be defined explicitly - image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-${RUBY_VERSION}:bundler-2.3 - -.qa-install: - variables: - BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES: "true" - BUNDLE_SILENCE_ROOT_WARNING: "true" - extends: - - .gitlab-qa-install - -.update-script: - script: - - !reference [.bundle-prefix] - - export QA_COMMAND="$BUNDLE_PREFIX gitlab-qa Test::Omnibus::UpdateFromPrevious $RELEASE $GITLAB_SEMVER_VERSION $UPDATE_TYPE -- $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS" - - echo "Running - '$QA_COMMAND'" - - eval "$QA_COMMAND" - -.qa: - extends: - - .qa-base - - .qa-install - - .gitlab-qa-report - stage: test - tags: - - e2e - variables: - QA_GENERATE_ALLURE_REPORT: "true" - QA_CAN_TEST_PRAEFECT: "false" - QA_INTERCEPT_REQUESTS: "true" - GITLAB_LICENSE_MODE: test - GITLAB_QA_ADMIN_ACCESS_TOKEN: $QA_ADMIN_ACCESS_TOKEN - GITLAB_QA_OPTS: $EXTRA_GITLAB_QA_OPTS - # todo: remove in 16.1 milestone when not needed for backwards compatibility anymore - EE_LICENSE: $QA_EE_LICENSE - GITHUB_ACCESS_TOKEN: $QA_GITHUB_ACCESS_TOKEN - # Allow QA jobs to fail as they are flaky. The top level `package-and-e2e:ee` - # pipeline is not allowed to fail, so without allowing QA to fail, we will be - # blocking merges due to flaky tests. - allow_failure: true + - 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 # ========================================== # Prepare stage @@ -87,128 +20,34 @@ check-release-set: echo "Omnibus installation image is set to '$RELEASE'" fi -dont-interrupt-me: - extends: .rules:dont-interrupt - stage: .pre - interruptible: false - script: - - echo "This jobs makes sure this pipeline won't be interrupted! See https://docs.gitlab.com/ee/ci/yaml/#interruptible." - trigger-omnibus-env: extends: + - .trigger-omnibus-env - .rules:omnibus-build - stage: .pre - needs: - # We need this job because we need its `cached-assets-hash.txt` artifact, so that we can pass the assets image tag to the downstream omnibus-gitlab pipeline. - - pipeline: $PARENT_PIPELINE_ID - job: build-assets-image - variables: - BUILD_ENV: build.env - before_script: - - | - # This is duplicating the function from `scripts/utils.sh` since `.gitlab/ci/package-and-test/main.gitlab-ci.yml` can be included in other projects. - function assets_image_tag() { - local cache_assets_hash_file="cached-assets-hash.txt" - - if [[ -n "${CI_COMMIT_TAG}" ]]; then - echo -n "${CI_COMMIT_REF_NAME}" - elif [[ -f "${cache_assets_hash_file}" ]]; then - echo -n "assets-hash-$(cat ${cache_assets_hash_file} | cut -c1-10)" - else - echo -n "${CI_COMMIT_SHA}" - fi - } - script: - - | - SECURITY_SOURCES=$([[ ! "$CI_PROJECT_NAMESPACE" =~ ^gitlab-org\/security ]] || echo "true") - echo "SECURITY_SOURCES=${SECURITY_SOURCES:-false}" > $BUILD_ENV - echo "OMNIBUS_GITLAB_CACHE_UPDATE=${OMNIBUS_GITLAB_CACHE_UPDATE:-false}" >> $BUILD_ENV - for version_file in *_VERSION; do echo "$version_file=$(cat $version_file)" >> $BUILD_ENV; done - echo "OMNIBUS_GITLAB_RUBY3_BUILD=${OMNIBUS_GITLAB_RUBY3_BUILD:-false}" >> $BUILD_ENV - echo "OMNIBUS_GITLAB_RUBY2_BUILD=${OMNIBUS_GITLAB_RUBY2_BUILD:-false}" >> $BUILD_ENV - echo "OMNIBUS_GITLAB_CACHE_EDITION=${OMNIBUS_GITLAB_CACHE_EDITION:-GITLAB}" >> $BUILD_ENV - echo "OMNIBUS_GITLAB_BUILD_ON_ALL_OS=${OMNIBUS_GITLAB_BUILD_ON_ALL_OS:-false}" >> $BUILD_ENV - echo "GITLAB_ASSETS_TAG=$(assets_image_tag)" >> $BUILD_ENV - echo "EE=$([[ $FOSS_ONLY == '1' ]] && echo 'false' || echo 'true')" >> $BUILD_ENV - target_branch_name="${CI_MERGE_REQUEST_TARGET_BRANCH_NAME:-${CI_COMMIT_REF_NAME}}" - echo "TRIGGER_BRANCH=$([[ "${target_branch_name}" =~ ^[0-9-]+-stable(-ee)?$ ]] && echo ${target_branch_name%-ee} || echo 'master')" >> $BUILD_ENV - - | - echo "Built environment file for omnibus build:" - cat $BUILD_ENV - artifacts: - expire_in: 3 days - reports: - dotenv: $BUILD_ENV - paths: - - $BUILD_ENV trigger-omnibus-env-ce: extends: - - trigger-omnibus-env + - .trigger-omnibus-env-ce - .rules:omnibus-build-ce - needs: - - pipeline: $PARENT_PIPELINE_ID - job: build-assets-image as-if-foss trigger-omnibus: - extends: .rules:omnibus-build - stage: .pre + extends: + - .trigger-omnibus + - .rules:omnibus-build needs: - trigger-omnibus-env - inherit: - variables: false - variables: - GITALY_SERVER_VERSION: $GITALY_SERVER_VERSION - GITLAB_ELASTICSEARCH_INDEXER_VERSION: $GITLAB_ELASTICSEARCH_INDEXER_VERSION - GITLAB_KAS_VERSION: $GITLAB_KAS_VERSION - GITLAB_METRICS_EXPORTER_VERSION: $GITLAB_METRICS_EXPORTER_VERSION - GITLAB_PAGES_VERSION: $GITLAB_PAGES_VERSION - GITLAB_SHELL_VERSION: $GITLAB_SHELL_VERSION - GITLAB_WORKHORSE_VERSION: $GITLAB_WORKHORSE_VERSION - GITLAB_VERSION: $CI_COMMIT_SHA - GITLAB_ASSETS_TAG: $GITLAB_ASSETS_TAG - IMAGE_TAG: $CI_COMMIT_SHA - TOP_UPSTREAM_SOURCE_PROJECT: $CI_PROJECT_PATH - SECURITY_SOURCES: $SECURITY_SOURCES - CACHE_UPDATE: $OMNIBUS_GITLAB_CACHE_UPDATE - RUBY3_BUILD: $OMNIBUS_GITLAB_RUBY3_BUILD - RUBY2_BUILD: $OMNIBUS_GITLAB_RUBY2_BUILD - CACHE_EDITION: $OMNIBUS_GITLAB_CACHE_EDITION - BUILD_ON_ALL_OS: $OMNIBUS_GITLAB_BUILD_ON_ALL_OS - SKIP_QA_TEST: "true" - ee: $EE - trigger: - project: gitlab-org/build/omnibus-gitlab-mirror - branch: $TRIGGER_BRANCH - strategy: depend trigger-omnibus-ce: extends: - - trigger-omnibus + - .trigger-omnibus-ce - .rules:omnibus-build-ce - variables: - # Override gitlab repository so that omnibus doesn't use foss repository for CE build - GITLAB_ALTERNATIVE_REPO: $CI_PROJECT_URL needs: - trigger-omnibus-env-ce download-knapsack-report: extends: - - .gitlab-qa-image + - .download-knapsack-report - .rules:download-knapsack - stage: .pre - variables: - KNAPSACK_DIR: ${CI_PROJECT_DIR}/qa/knapsack - GIT_STRATEGY: none - script: - # when using qa-image, code runs in /home/gitlab/qa folder - - bundle exec rake "knapsack:download[test]" - - mkdir -p "$KNAPSACK_DIR" && cp knapsack/*.json "${KNAPSACK_DIR}/" - allow_failure: true - artifacts: - paths: - - qa/knapsack/*.json - expire_in: 1 day cache-gems: extends: @@ -657,92 +496,32 @@ importers: # ========================================== e2e-test-report: extends: - - .generate-allure-report-base + - .e2e-test-report - .rules:report:allure-report - stage: report - variables: - GITLAB_AUTH_TOKEN: $PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE - ALLURE_PROJECT_PATH: $CI_PROJECT_PATH - ALLURE_MERGE_REQUEST_IID: $CI_MERGE_REQUEST_IID upload-knapsack-report: extends: - - .generate-knapsack-report-base - - .qa-install - - .ruby-image + - .upload-knapsack-report - .rules:report:process-results - stage: report - when: always export-test-metrics: extends: - - .qa-install - - .ruby-image + - .export-test-metrics - .rules:report:process-results - stage: report - when: always - script: - - bundle exec rake "ci:export_test_metrics[$CI_PROJECT_DIR/gitlab-qa-run-*/**/test-metrics-*.json]" relate-test-failures: extends: - - .qa-install - - .ruby-image + - .relate-test-failures - .rules:report:process-results - stage: report - variables: - QA_FAILURES_REPORTING_PROJECT: gitlab-org/gitlab - QA_FAILURES_MAX_DIFF_RATIO: "0.15" - GITLAB_QA_ACCESS_TOKEN: $QA_GITLAB_CI_TOKEN - when: on_failure - script: - - | - bundle exec gitlab-qa-report \ - --relate-failure-issue "$CI_PROJECT_DIR/gitlab-qa-run-*/**/rspec-*.json" \ - --project "$QA_FAILURES_REPORTING_PROJECT" \ - --max-diff-ratio "$QA_FAILURES_MAX_DIFF_RATIO" generate-test-session: extends: - - .qa-install - - .ruby-image + - .generate-test-session - .rules:report:process-results - stage: report - variables: - QA_TESTCASE_SESSIONS_PROJECT: gitlab-org/quality/testcase-sessions - GITLAB_QA_ACCESS_TOKEN: $QA_TEST_SESSION_TOKEN - GITLAB_CI_API_TOKEN: $QA_GITLAB_CI_TOKEN - when: always - script: - - | - bundle exec gitlab-qa-report \ - --generate-test-session "$CI_PROJECT_DIR/gitlab-qa-run-*/**/rspec-*.json" \ - --project "$QA_TESTCASE_SESSIONS_PROJECT" - artifacts: - when: always - expire_in: 1d - paths: - - qa/REPORT_ISSUE_URL notify-slack: extends: - - .notify-slack-qa - - .qa-install - - .ruby-image + - .notify-slack - .rules:report:process-results - stage: notify variables: - ALLURE_JOB_NAME: e2e-package-and-test - SLACK_ICON_EMOJI: ci_failing - STATUS_SYM: ☠️ - STATUS: failed TYPE: "(package-and-test) " - when: always - script: - - | - if [ "$SUITE_FAILED" != "true" ] && [ "$SUITE_RAN" == "true" ]; then - echo "Test suite passed. Exiting..." - exit 0 - fi - - bundle exec gitlab-qa-report --prepare-stage-reports "$CI_PROJECT_DIR/gitlab-qa-run-*/**/rspec-*.xml" # generate summary - - !reference [.notify-slack-qa, script] |