summaryrefslogtreecommitdiff
path: root/.gitlab/ci/qa.gitlab-ci.yml
blob: 4fec223e66d93c7d04a22179edc8ae6166cc07a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
.qa-job-base:
  extends:
    - .default-retry
    - .qa-cache
  stage: test
  needs: []
  variables:
    USE_BUNDLE_INSTALL: "false"
    SETUP_DB: "false"
    QA_EXPORT_TEST_METRICS: "false"
  before_script:
    - !reference [.default-before_script, before_script]
    - cd qa/
    - bundle_install_script

qa:internal:
  extends:
    - .qa-job-base
    - .qa:rules:ee-and-foss
  script:
    - bundle exec rspec

qa:internal-as-if-foss:
  extends:
    - qa:internal
    - .qa:rules:as-if-foss
    - .as-if-foss

qa:selectors:
  extends:
    - .qa-job-base
    - .qa:rules:ee-and-foss
  script:
    - bundle exec bin/qa Test::Sanity::Selectors

qa:selectors-as-if-foss:
  extends:
    - qa:selectors
    - .qa:rules:as-if-foss
    - .as-if-foss

update-qa-cache:
  extends:
    - .qa-job-base
    - .qa-cache-push
    - .shared:rules:update-cache
  stage: prepare
  script:
    - echo "Cache has been updated and ready to be uploaded."

.package-and-qa-base:
  image: ${GITLAB_DEPENDENCY_PROXY}ruby:2.7-alpine
  stage: qa
  retry: 0
  before_script:
    - source scripts/utils.sh
    - install_gitlab_gem
    - tooling/bin/find_change_diffs ${CHANGES_DIFFS_DIR}
  script:
    - tooling/bin/qa/check_if_qa_only_spec_changes ${CHANGES_FILE} ${ONLY_QA_CHANGES_FILE}
    - '[ -f $ONLY_QA_CHANGES_FILE ] && export QA_TESTS="`cat $ONLY_QA_CHANGES_FILE`"'
    - 'echo "QA_TESTS: $QA_TESTS"'
    - exit_code=0 && tooling/bin/qa/package_and_qa_check ${CHANGES_DIFFS_DIR} || exit_code=$?
    - echo $exit_code
    - |
      if [ $exit_code -eq 0 ]; then
        ./scripts/trigger-build omnibus
      elif [ $exit_code -eq 1 ]; then
        exit 1
      else
        echo "Downstream jobs will not be triggered because package_and_qa_check exited with code: $exit_code"
      fi
  # These jobs often time out, so temporarily use private runners and a long timeout: https://gitlab.com/gitlab-org/gitlab/-/issues/238563
  tags:
    - prm
  timeout: 4h
  needs:
    - job: build-qa-image
      artifacts: false
    - job: build-assets-image
      artifacts: false
    - detect-tests
  artifacts:
    expire_in: 7d
    paths:
      - ${CHANGES_FILE}
      - ${ONLY_QA_CHANGES_FILE}
      - ${CHANGES_DIFFS_DIR}/*
  variables:
    CHANGES_FILE: tmp/changed_files.txt
    ONLY_QA_CHANGES_FILE: tmp/qa_only_changed_files.txt
    CHANGES_DIFFS_DIR: tmp/diffs
    ALLURE_JOB_NAME: $CI_JOB_NAME

.package-and-qa-ff-base:
  script:
    - |
      feature_flags=$(scripts/changed-feature-flags --files $(cat $CHANGES_FILE | tr ' ' ',') --state $QA_FF_STATE)
      if [[ $feature_flags ]]; then
        export GITLAB_QA_OPTIONS="--set-feature-flags $feature_flags"
        echo $GITLAB_QA_OPTIONS
        ./scripts/trigger-build omnibus
      else
        echo "No changed feature flag found to test. The tests are skipped if the flag was removed."
      fi

package-and-qa:
  extends:
    - .package-and-qa-base
    - .qa:rules:package-and-qa

package-and-qa-ff-enabled:
  extends:
    - .package-and-qa-base
    - .package-and-qa-ff-base
    - .qa:rules:package-and-qa:feature-flags
  variables:
    QA_FF_STATE: "enable"

package-and-qa-ff-disabled:
  extends:
    - .package-and-qa-base
    - .package-and-qa-ff-base
    - .qa:rules:package-and-qa:feature-flags
  variables:
    QA_FF_STATE: "disable"