xref: /qemu/.gitlab-ci.d/base.yml (revision e8c5503a)
1
2variables:
3  # On stable branches this is changed by later rules. Should also
4  # be overridden per pipeline if running pipelines concurrently
5  # for different branches in contributor forks.
6  QEMU_CI_CONTAINER_TAG: latest
7
8  # For purposes of CI rules, upstream is the gitlab.com/qemu-project
9  # namespace. When testing CI, it might be usefult to override this
10  # to point to a fork repo
11  QEMU_CI_UPSTREAM: qemu-project
12
13# The order of rules defined here is critically important.
14# They are evaluated in order and first match wins.
15#
16# Thus we group them into a number of stages, ordered from
17# most restrictive to least restrictive
18#
19# For pipelines running for stable "staging-X.Y" branches
20# we must override QEMU_CI_CONTAINER_TAG
21#
22.base_job_template:
23  variables:
24    # Each script line from will be in a collapsible section in the job output
25    # and show the duration of each line.
26    FF_SCRIPT_SECTIONS: 1
27    # The project has a fairly fat GIT repo so we try and avoid bringing in things
28    # we don't need. The --filter options avoid blobs and tree references we aren't going to use
29    # and we also avoid fetching tags.
30    GIT_FETCH_EXTRA_FLAGS: --filter=blob:none --filter=tree:0 --no-tags --prune --quiet
31
32  interruptible: true
33
34  rules:
35    #############################################################
36    # Stage 1: exclude scenarios where we definitely don't
37    # want jobs to run
38    #############################################################
39
40    # Never run jobs upstream on stable branch, staging branch jobs already ran
41    - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /^stable-/'
42      when: never
43
44    # Never run jobs upstream on tags, staging branch jobs already ran
45    - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_TAG'
46      when: never
47
48    # Scheduled runs on mainline don't get pipelines except for the special Coverity job
49    - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_PIPELINE_SOURCE == "schedule"'
50      when: never
51
52    # Cirrus jobs can't run unless the creds / target repo are set
53    - if: '$QEMU_JOB_CIRRUS && ($CIRRUS_GITHUB_REPO == null || $CIRRUS_API_TOKEN == null)'
54      when: never
55
56    # Publishing jobs should only run on the default branch in upstream
57    - if: '$QEMU_JOB_PUBLISH == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
58      when: never
59
60    # Non-publishing jobs should only run on staging branches in upstream
61    - if: '$QEMU_JOB_PUBLISH != "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH !~ /staging/'
62      when: never
63
64    # Jobs only intended for forks should always be skipped on upstream
65    - if: '$QEMU_JOB_ONLY_FORKS == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM'
66      when: never
67
68    # Forks don't get pipelines unless QEMU_CI=1 or QEMU_CI=2 is set
69    - if: '$QEMU_CI != "1" && $QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
70      when: never
71
72    # Avocado jobs don't run in forks unless $QEMU_CI_AVOCADO_TESTING is set
73    - if: '$QEMU_JOB_AVOCADO && $QEMU_CI_AVOCADO_TESTING != "1" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
74      when: never
75
76
77    #############################################################
78    # Stage 2: fine tune execution of jobs in specific scenarios
79    # where the catch all logic is inappropriate
80    #############################################################
81
82    # Optional jobs should not be run unless manually triggered
83    - if: '$QEMU_JOB_OPTIONAL && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
84      when: manual
85      allow_failure: true
86      variables:
87        QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG
88
89    - if: '$QEMU_JOB_OPTIONAL'
90      when: manual
91      allow_failure: true
92
93    # Skipped jobs should not be run unless manually triggered
94    - if: '$QEMU_JOB_SKIPPED && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
95      when: manual
96      allow_failure: true
97      variables:
98        QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG
99
100    - if: '$QEMU_JOB_SKIPPED'
101      when: manual
102      allow_failure: true
103
104    # Avocado jobs can be manually start in forks if $QEMU_CI_AVOCADO_TESTING is unset
105    - if: '$QEMU_JOB_AVOCADO && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
106      when: manual
107      allow_failure: true
108
109
110    #############################################################
111    # Stage 3: catch all logic applying to any job not matching
112    # an earlier criteria
113    #############################################################
114
115    # Forks pipeline jobs don't start automatically unless
116    # QEMU_CI=2 is set
117    - if: '$QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
118      when: manual
119
120    # Upstream pipeline jobs start automatically unless told not to
121    # by setting QEMU_CI=1
122    - if: '$QEMU_CI == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
123      when: manual
124      variables:
125        QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG
126
127    - if: '$QEMU_CI == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM'
128      when: manual
129
130    # Jobs can run if any jobs they depend on were successful
131    - if: '$QEMU_JOB_SKIPPED && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /staging-[[:digit:]]+\.[[:digit:]]/'
132      when: on_success
133      variables:
134        QEMU_CI_CONTAINER_TAG: $CI_COMMIT_REF_SLUG
135
136    - when: on_success
137