summaryrefslogtreecommitdiff
path: root/.gitlab/ci/review-apps/rules.gitlab-ci.yml
blob: 56d3731bb56bd549f96710d0d0aac1ae52ee8716 (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
# Specific specs passed
.specific-specs: &specific-specs
  if: $QA_TESTS != ""

# No specific specs passed
.all-specs: &all-specs
  if: $QA_TESTS == ""

# No specific specs in mr pipeline
.all-specs-mr: &all-specs-mr
  if: $CI_MERGE_REQUEST_IID && $QA_TESTS == ""
  when: manual

# Triggered by change pattern
.app-changes: &app-changes
  if: $APP_CHANGE_TRIGGER == "true"

# QA framework changes present
.qa-framework-changes: &qa-framework-changes
  if: $QA_FRAMEWORK_CHANGES == "true"

.never-when-qa-framework-changes-or-no-specific-specs:
  - <<: *qa-framework-changes
    when: never
  - <<: *all-specs
    when: never

.never-when-specific-specs-always-when-qa-framework-changes:
  - <<: *specific-specs
    when: never
  - *qa-framework-changes

# ------------------------------------------
# Test
# ------------------------------------------
.rules:qa-smoke:
  rules:
    # always trigger smoke suite if review pipeline got triggered by specific changes in application code
    - <<: *app-changes
      variables:
        QA_TESTS: "" # unset QA_TESTS even if specific tests were inferred from stage label
    - *qa-framework-changes
    - if: $QA_SUITES =~ /Test::Instance::Smoke/

.rules:qa-blocking:
  rules:
    - <<: *app-changes
      when: never
    - !reference [.never-when-qa-framework-changes-or-no-specific-specs]
    - if: $QA_SUITES =~ /Test::Instance::ReviewBlocking/
.rules:qa-blocking-parallel:
  rules:
    # always trigger blocking suite if review pipeline got triggered by specific changes in application code
    - <<: *app-changes
      variables:
        QA_TESTS: "" # unset QA_TESTS even if specific tests were inferred from stage label
    - !reference [.never-when-specific-specs-always-when-qa-framework-changes]
    - if: $QA_SUITES =~ /Test::Instance::ReviewBlocking/

.rules:qa-non-blocking:
  rules:
    - !reference [.never-when-qa-framework-changes-or-no-specific-specs]
    - if: $QA_SUITES =~ /Test::Instance::ReviewNonBlocking/
.rules:qa-non-blocking-parallel:
  rules:
    - !reference [.never-when-specific-specs-always-when-qa-framework-changes]
    - *all-specs-mr # set full suite to manual when no specific specs passed in mr
    - if: $QA_SUITES =~ /Test::Instance::ReviewNonBlocking/

# ------------------------------------------
# Prepare/Report
# ------------------------------------------
# if no rules for test execution are matched, pipeline will not have e2e test jobs
# so we need to skip knapsack, allure and test resource deletion jobs as well
.rules:app-or-qa-framework-changes-or-review-scenarios:
  rules:
    - *app-changes
    - *qa-framework-changes
    - if: $QA_SUITES =~ /Test::Instance::Smoke/
    - if: $QA_SUITES =~ /Test::Instance::ReviewBlocking/
    - if: $QA_SUITES =~ /Test::Instance::ReviewNonBlocking/