master
yml 184 lines 6.85 KB
Raw
1
2 variables:
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 # Ensure docker.py / tests/docker/Makefile.include always displays stdout
32 # from any docker commands to aid debugging of failures
33 DOCKER_V: 1
34
35 interruptible: true
36
37 rules:
38 #############################################################
39 # Stage 1: exclude scenarios where we definitely don't
40 # want jobs to run
41 #############################################################
42
43 # Never run jobs upstream on stable branch, staging branch jobs already ran
44 - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH =~ /^stable-/'
45 when: never
46
47 # Never run jobs upstream on tags, staging branch jobs already ran
48 - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_TAG'
49 when: never
50
51 # Scheduled jobs should explicitly enable the run in their job rules
52 - if: '$CI_PIPELINE_SOURCE == "schedule"'
53 when: never
54
55 # macOS jobs can't run in forks until gitlab opens up runner availability
56 # to all tiers https://gitlab.com/groups/gitlab-org/-/work_items/8267
57 - if: '$QEMU_JOB_MACOS == "1" && $CI_PROJECT_NAMESPACE != $QEMU_CI_UPSTREAM'
58 when: never
59
60 # Publishing jobs should only run on the default branch in upstream
61 - if: '$QEMU_JOB_PUBLISH == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
62 when: never
63
64 # Non-publishing jobs should only run on staging branches in upstream
65 - if: '$QEMU_JOB_PUBLISH != "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_COMMIT_BRANCH !~ /staging/'
66 when: never
67
68 # Jobs only intended for forks should always be skipped on upstream
69 - if: '$QEMU_JOB_ONLY_FORKS == "1" && $CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM'
70 when: never
71
72 # Forks don't get pipelines unless QEMU_CI=1 or QEMU_CI=2 is set
73 - if: '$QEMU_CI != "1" && $QEMU_CI != "2" && $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 # Functional jobs can be manually started in forks
105 - if: '$QEMU_JOB_FUNCTIONAL && $QEMU_CI_FUNCTIONAL != "1" && $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: '$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
138 # Any job running meson should capture meson logs
139 # by default. Some jobs might override the artifacts
140 # to capture further files
141 .base_meson_job_template:
142 extends: .base_job_template
143 artifacts:
144 name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
145 when: always
146 expire_in: 7 days
147 paths:
148 - build/meson-logs
149 - ci-runner-env
150 reports:
151 junit: build/meson-logs/*.junit.xml
152 before_script:
153 - source scripts/ci/gitlab-ci-section
154 - section_start setup "Pre-script setup"
155 - JOBS=$(expr $(nproc) + 1)
156 # Prevent logs (if any) from prior build job artifacts
157 # from being duplicated in the new job artifacts
158 - rm -f build/meson-logs/*
159 - mkdir -p ci-runner-env
160 - test -f /packages.txt && cp /packages.txt ci-runner-env/packages.txt
161 - cp /proc/mounts ci-runner-env/mounts.txt
162 - cp /proc/cpuinfo ci-runner-env/cpuinfo.txt
163 - cp /proc/meminfo ci-runner-env/meminfo.txt
164 - ls -l /dev > ci-runner-env/devices.txt
165 - uname -a > ci-runner-env/kernel.txt
166 - id -a > ci-runner-env/user.txt
167 - printenv | sort > ci-runner-env/environ.txt
168 - section_end setup
169
170 .base_meson_ccache_job_template:
171 extends: .base_meson_job_template
172 cache:
173 paths:
174 - ccache
175 key: "$CI_JOB_NAME"
176 when: always
177 script:
178 - export CCACHE_BASEDIR="$(pwd)"
179 - export CCACHE_DIR="$CCACHE_BASEDIR/ccache"
180 - export CCACHE_MAXSIZE="500M"
181 - export PATH="$CCACHE_WRAPPERSDIR:$PATH"
182 - ccache --zero-stats
183 after_script:
184 - ccache --show-stats