xref: /qemu/.gitlab-ci.d/base.yml (revision 83ecdb18)
1
2# The order of rules defined here is critically important.
3# They are evaluated in order and first match wins.
4#
5# Thus we group them into a number of stages, ordered from
6# most restrictive to least restrictive
7#
8.base_job_template:
9  variables:
10    # Each script line from will be in a collapsible section in the job output
11    # and show the duration of each line.
12    FF_SCRIPT_SECTIONS: 1
13
14  interruptible: true
15
16  rules:
17    #############################################################
18    # Stage 1: exclude scenarios where we definitely don't
19    # want jobs to run
20    #############################################################
21
22    # Cirrus jobs can't run unless the creds / target repo are set
23    - if: '$QEMU_JOB_CIRRUS && ($CIRRUS_GITHUB_REPO == null || $CIRRUS_API_TOKEN == null)'
24      when: never
25
26    # Publishing jobs should only run on the default branch in upstream
27    - if: '$QEMU_JOB_PUBLISH == "1" && $CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
28      when: never
29
30    # Non-publishing jobs should only run on staging branches in upstream
31    - if: '$QEMU_JOB_PUBLISH != "1" && $CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH !~ /staging/'
32      when: never
33
34    # Jobs only intended for forks should always be skipped on upstream
35    - if: '$QEMU_JOB_ONLY_FORKS == "1" && $CI_PROJECT_NAMESPACE == "qemu-project"'
36      when: never
37
38    # Forks don't get pipelines unless QEMU_CI=1 or QEMU_CI=2 is set
39    - if: '$QEMU_CI != "1" && $QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != "qemu-project"'
40      when: never
41
42    # Avocado jobs don't run in forks unless $QEMU_CI_AVOCADO_TESTING is set
43    - if: '$QEMU_JOB_AVOCADO && $QEMU_CI_AVOCADO_TESTING != "1" && $CI_PROJECT_NAMESPACE != "qemu-project"'
44      when: never
45
46
47    #############################################################
48    # Stage 2: fine tune execution of jobs in specific scenarios
49    # where the catch all logic is inapprorpaite
50    #############################################################
51
52    # Optional jobs should not be run unless manually triggered
53    - if: '$QEMU_JOB_OPTIONAL'
54      when: manual
55      allow_failure: true
56
57    # Skipped jobs should not be run unless manually triggered
58    - if: '$QEMU_JOB_SKIPPED'
59      when: manual
60      allow_failure: true
61
62    # Avocado jobs can be manually start in forks if $QEMU_CI_AVOCADO_TESTING is unset
63    - if: '$QEMU_JOB_AVOCADO && $CI_PROJECT_NAMESPACE != "qemu-project"'
64      when: manual
65      allow_failure: true
66
67
68    #############################################################
69    # Stage 3: catch all logic applying to any job not matching
70    # an earlier criteria
71    #############################################################
72
73    # Forks pipeline jobs don't start automatically unless
74    # QEMU_CI=2 is set
75    - if: '$QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != "qemu-project"'
76      when: manual
77
78    # Jobs can run if any jobs they depend on were successful
79    - when: on_success
80