1 | # Types of CI pipelines:
|
---|
2 | # | pipeline name | context | description |
|
---|
3 | # |----------------------|-----------|-------------------------------------------------------------|
|
---|
4 | # | merge pipeline | mesa/mesa | pipeline running for an MR; if it passes the MR gets merged |
|
---|
5 | # | pre-merge pipeline | mesa/mesa | same as above, except its status doesn't affect the MR |
|
---|
6 | # | post-merge pipeline | mesa/mesa | pipeline immediately after merging |
|
---|
7 | # | fork pipeline | fork | pipeline running in a user fork |
|
---|
8 | # | scheduled pipeline | mesa/mesa | nightly pipelines, running every morning at 4am UTC |
|
---|
9 | # | direct-push pipeline | mesa/mesa | when commits are pushed directly to mesa/mesa, bypassing Marge and its gating pipeline |
|
---|
10 | #
|
---|
11 | # Note that the release branches maintained by the release manager fall under
|
---|
12 | # the "direct push" category.
|
---|
13 | #
|
---|
14 | # "context" indicates the permissions that the jobs get; notably, any
|
---|
15 | # container created in mesa/mesa gets pushed immediately for everyone to use
|
---|
16 | # as soon as the image tag change is merged.
|
---|
17 | #
|
---|
18 | # Merge pipelines contain all jobs that must pass before the MR can be merged.
|
---|
19 | # Pre-merge pipelines contain the exact same jobs as merge pipelines.
|
---|
20 | # Post-merge pipelines contain *only* the `pages` job that deploys the new
|
---|
21 | # version of the website.
|
---|
22 | # Fork pipelines contain everything.
|
---|
23 | # Scheduled pipelines only contain the container+build jobs, and some extra
|
---|
24 | # test jobs (typically "full" variants of pre-merge jobs that only run 1/X
|
---|
25 | # test cases), but not a repeat of the merge pipeline jobs.
|
---|
26 | # Direct-push pipelines contain the same jobs as merge pipelines.
|
---|
27 |
|
---|
28 | workflow:
|
---|
29 | rules:
|
---|
30 | # do not duplicate pipelines on merge pipelines
|
---|
31 | - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push"
|
---|
32 | when: never
|
---|
33 | # merge pipeline
|
---|
34 | - if: &is-merge-attempt $GITLAB_USER_LOGIN == "marge-bot" && $CI_PIPELINE_SOURCE == "merge_request_event"
|
---|
35 | variables:
|
---|
36 | KERNEL_IMAGE_BASE: https://${S3_HOST}/mesa-lava/${KERNEL_REPO}/${KERNEL_TAG}
|
---|
37 | MESA_CI_PERFORMANCE_ENABLED: 1
|
---|
38 | VALVE_INFRA_VANGOGH_JOB_PRIORITY: "" # Empty tags are ignored by gitlab
|
---|
39 | # post-merge pipeline
|
---|
40 | - if: &is-post-merge $GITLAB_USER_LOGIN == "marge-bot" && $CI_PIPELINE_SOURCE == "push"
|
---|
41 | # nightly pipeline
|
---|
42 | - if: &is-scheduled-pipeline $CI_PIPELINE_SOURCE == "schedule"
|
---|
43 | variables:
|
---|
44 | KERNEL_IMAGE_BASE: https://${S3_HOST}/mesa-lava/${KERNEL_REPO}/${KERNEL_TAG}
|
---|
45 | JOB_PRIORITY: 50
|
---|
46 | VALVE_INFRA_VANGOGH_JOB_PRIORITY: priority:low
|
---|
47 | # pipeline for direct pushes that bypassed the CI
|
---|
48 | - if: &is-direct-push $CI_PROJECT_NAMESPACE == "mesa" && $CI_PIPELINE_SOURCE == "push" && $GITLAB_USER_LOGIN != "marge-bot"
|
---|
49 | variables:
|
---|
50 | KERNEL_IMAGE_BASE: https://${S3_HOST}/mesa-lava/${KERNEL_REPO}/${KERNEL_TAG}
|
---|
51 | JOB_PRIORITY: 40
|
---|
52 | VALVE_INFRA_VANGOGH_JOB_PRIORITY: priority:low
|
---|
53 | # pre-merge or fork pipeline
|
---|
54 | - if: $FORCE_KERNEL_TAG != null
|
---|
55 | variables:
|
---|
56 | KERNEL_IMAGE_BASE: https://${S3_HOST}/mesa-lava/${KERNEL_REPO}/${FORCE_KERNEL_TAG}
|
---|
57 | JOB_PRIORITY: 50
|
---|
58 | VALVE_INFRA_VANGOGH_JOB_PRIORITY: priority:low
|
---|
59 | - if: $FORCE_KERNEL_TAG == null
|
---|
60 | variables:
|
---|
61 | KERNEL_IMAGE_BASE: https://${S3_HOST}/mesa-lava/${KERNEL_REPO}/${KERNEL_TAG}
|
---|
62 | JOB_PRIORITY: 50
|
---|
63 | VALVE_INFRA_VANGOGH_JOB_PRIORITY: priority:low
|
---|
64 |
|
---|
65 |
|
---|
66 | variables:
|
---|
67 | FDO_UPSTREAM_REPO: mesa/mesa
|
---|
68 | MESA_TEMPLATES_COMMIT: &ci-templates-commit d5aa3941aa03c2f716595116354fb81eb8012acb
|
---|
69 | CI_PRE_CLONE_SCRIPT: |-
|
---|
70 | set -o xtrace
|
---|
71 | wget -q -O download-git-cache.sh ${CI_PROJECT_URL}/-/raw/${CI_COMMIT_SHA}/.gitlab-ci/download-git-cache.sh
|
---|
72 | bash download-git-cache.sh
|
---|
73 | rm download-git-cache.sh
|
---|
74 | set +o xtrace
|
---|
75 | CI_JOB_JWT_FILE: /minio_jwt
|
---|
76 | S3_HOST: s3.freedesktop.org
|
---|
77 | # per-pipeline artifact storage on MinIO
|
---|
78 | PIPELINE_ARTIFACTS_BASE: ${S3_HOST}/artifacts/${CI_PROJECT_PATH}/${CI_PIPELINE_ID}
|
---|
79 | # per-job artifact storage on MinIO
|
---|
80 | JOB_ARTIFACTS_BASE: ${PIPELINE_ARTIFACTS_BASE}/${CI_JOB_ID}
|
---|
81 | # reference images stored for traces
|
---|
82 | PIGLIT_REPLAY_REFERENCE_IMAGES_BASE: "${S3_HOST}/mesa-tracie-results/$FDO_UPSTREAM_REPO"
|
---|
83 | # For individual CI farm status see .ci-farms folder
|
---|
84 | # Disable farm with `git mv .ci-farms{,-disabled}/$farm_name`
|
---|
85 | # Re-enable farm with `git mv .ci-farms{-disabled,}/$farm_name`
|
---|
86 | # NEVER MIX FARM MAINTENANCE WITH ANY OTHER CHANGE IN THE SAME MERGE REQUEST!
|
---|
87 | ARTIFACTS_BASE_URL: https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-/${CI_PROJECT_NAME}/-/jobs/${CI_JOB_ID}/artifacts
|
---|
88 | # Python scripts for structured logger
|
---|
89 | PYTHONPATH: "$PYTHONPATH:$CI_PROJECT_DIR/install"
|
---|
90 |
|
---|
91 | default:
|
---|
92 | before_script:
|
---|
93 | - >
|
---|
94 | export SCRIPTS_DIR=$(mktemp -d) &&
|
---|
95 | curl -L -s --retry 4 -f --retry-all-errors --retry-delay 60 -O --output-dir "${SCRIPTS_DIR}" "${CI_PROJECT_URL}/-/raw/${CI_COMMIT_SHA}/.gitlab-ci/setup-test-env.sh" &&
|
---|
96 | . ${SCRIPTS_DIR}/setup-test-env.sh &&
|
---|
97 | echo -n "${CI_JOB_JWT}" > "${CI_JOB_JWT_FILE}" &&
|
---|
98 | unset CI_JOB_JWT # Unsetting vulnerable env variables
|
---|
99 |
|
---|
100 | after_script:
|
---|
101 | # Work around https://gitlab.com/gitlab-org/gitlab/-/issues/20338
|
---|
102 | - find -name '*.log' -exec mv {} {}.txt \;
|
---|
103 |
|
---|
104 | - >
|
---|
105 | set +x
|
---|
106 |
|
---|
107 | test -e "${CI_JOB_JWT_FILE}" &&
|
---|
108 | export CI_JOB_JWT="$(<${CI_JOB_JWT_FILE})" &&
|
---|
109 | rm "${CI_JOB_JWT_FILE}"
|
---|
110 |
|
---|
111 | # Retry when job fails. Failed jobs can be found in the Mesa CI Daily Reports:
|
---|
112 | # https://gitlab.freedesktop.org/mesa/mesa/-/issues/?sort=created_date&state=opened&label_name%5B%5D=CI%20daily
|
---|
113 | retry:
|
---|
114 | max: 1
|
---|
115 | # Ignore runner_unsupported, stale_schedule, archived_failure, or
|
---|
116 | # unmet_prerequisites
|
---|
117 | when:
|
---|
118 | - api_failure
|
---|
119 | - runner_system_failure
|
---|
120 | - script_failure
|
---|
121 | - job_execution_timeout
|
---|
122 | - scheduler_failure
|
---|
123 | - data_integrity_failure
|
---|
124 | - unknown_failure
|
---|
125 |
|
---|
126 | stages:
|
---|
127 | - sanity
|
---|
128 | - container
|
---|
129 | - git-archive
|
---|
130 | - build-x86_64
|
---|
131 | - build-misc
|
---|
132 | - code-validation
|
---|
133 | - amd
|
---|
134 | - intel
|
---|
135 | - nouveau
|
---|
136 | - arm
|
---|
137 | - broadcom
|
---|
138 | - freedreno
|
---|
139 | - etnaviv
|
---|
140 | - software-renderer
|
---|
141 | - layered-backends
|
---|
142 | - deploy
|
---|
143 |
|
---|
144 | include:
|
---|
145 | - project: 'freedesktop/ci-templates'
|
---|
146 | ref: 16bc29078de5e0a067ff84a1a199a3760d3b3811
|
---|
147 | file:
|
---|
148 | - '/templates/ci-fairy.yml'
|
---|
149 | - project: 'freedesktop/ci-templates'
|
---|
150 | ref: *ci-templates-commit
|
---|
151 | file:
|
---|
152 | - '/templates/alpine.yml'
|
---|
153 | - '/templates/debian.yml'
|
---|
154 | - '/templates/fedora.yml'
|
---|
155 | - local: '.gitlab-ci/image-tags.yml'
|
---|
156 | - local: '.gitlab-ci/lava/lava-gitlab-ci.yml'
|
---|
157 | - local: '.gitlab-ci/container/gitlab-ci.yml'
|
---|
158 | - local: '.gitlab-ci/build/gitlab-ci.yml'
|
---|
159 | - local: '.gitlab-ci/test/gitlab-ci.yml'
|
---|
160 | - local: '.gitlab-ci/farm-rules.yml'
|
---|
161 | - local: '.gitlab-ci/test-source-dep.yml'
|
---|
162 | - local: 'docs/gitlab-ci.yml'
|
---|
163 | - local: 'src/amd/ci/gitlab-ci.yml'
|
---|
164 | - local: 'src/broadcom/ci/gitlab-ci.yml'
|
---|
165 | - local: 'src/etnaviv/ci/gitlab-ci.yml'
|
---|
166 | - local: 'src/freedreno/ci/gitlab-ci.yml'
|
---|
167 | - local: 'src/gallium/drivers/crocus/ci/gitlab-ci.yml'
|
---|
168 | - local: 'src/gallium/drivers/d3d12/ci/gitlab-ci.yml'
|
---|
169 | - local: 'src/gallium/drivers/i915/ci/gitlab-ci.yml'
|
---|
170 | - local: 'src/gallium/drivers/r300/ci/gitlab-ci.yml'
|
---|
171 | - local: 'src/gallium/drivers/lima/ci/gitlab-ci.yml'
|
---|
172 | - local: 'src/gallium/drivers/llvmpipe/ci/gitlab-ci.yml'
|
---|
173 | - local: 'src/gallium/drivers/nouveau/ci/gitlab-ci.yml'
|
---|
174 | - local: 'src/gallium/drivers/softpipe/ci/gitlab-ci.yml'
|
---|
175 | - local: 'src/gallium/drivers/virgl/ci/gitlab-ci.yml'
|
---|
176 | - local: 'src/gallium/drivers/zink/ci/gitlab-ci.yml'
|
---|
177 | - local: 'src/gallium/frontends/lavapipe/ci/gitlab-ci.yml'
|
---|
178 | - local: 'src/intel/ci/gitlab-ci.yml'
|
---|
179 | - local: 'src/microsoft/ci/gitlab-ci.yml'
|
---|
180 | - local: 'src/panfrost/ci/gitlab-ci.yml'
|
---|
181 | - local: 'src/virtio/ci/gitlab-ci.yml'
|
---|
182 |
|
---|
183 |
|
---|
184 | # YAML anchors for rule conditions
|
---|
185 | # --------------------------------
|
---|
186 | .rules-anchors:
|
---|
187 | # Pre-merge pipeline
|
---|
188 | - &is-pre-merge '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
---|
189 |
|
---|
190 |
|
---|
191 | .never-post-merge-rules:
|
---|
192 | rules:
|
---|
193 | - if: *is-post-merge
|
---|
194 | when: never
|
---|
195 |
|
---|
196 |
|
---|
197 | .container+build-rules:
|
---|
198 | rules:
|
---|
199 | # Run when re-enabling a disabled farm, but not when disabling it
|
---|
200 | - !reference [.disable-farm-mr-rules, rules]
|
---|
201 | # Never run immediately after merging, as we just ran everything
|
---|
202 | - !reference [.never-post-merge-rules, rules]
|
---|
203 | # Build everything in merge pipelines, if any files affecting the pipeline
|
---|
204 | # were changed
|
---|
205 | - if: *is-merge-attempt
|
---|
206 | changes: &all_paths
|
---|
207 | - VERSION
|
---|
208 | - bin/git_sha1_gen.py
|
---|
209 | - bin/install_megadrivers.py
|
---|
210 | - bin/symbols-check.py
|
---|
211 | # GitLab CI
|
---|
212 | - .gitlab-ci.yml
|
---|
213 | - .gitlab-ci/**/*
|
---|
214 | - .ci-farms/*
|
---|
215 | # Meson
|
---|
216 | - meson*
|
---|
217 | - build-support/**/*
|
---|
218 | - subprojects/**/*
|
---|
219 | # clang format
|
---|
220 | - .clang-format
|
---|
221 | - .clang-format-include
|
---|
222 | - .clang-format-ignore
|
---|
223 | # Source code
|
---|
224 | - include/**/*
|
---|
225 | - src/**/*
|
---|
226 | when: on_success
|
---|
227 | # Same as above, but for pre-merge pipelines
|
---|
228 | - if: *is-pre-merge
|
---|
229 | changes:
|
---|
230 | *all_paths
|
---|
231 | when: manual
|
---|
232 | # Skip everything for pre-merge and merge pipelines which don't change
|
---|
233 | # anything in the build
|
---|
234 | - if: *is-merge-attempt
|
---|
235 | when: never
|
---|
236 | - if: *is-pre-merge
|
---|
237 | when: never
|
---|
238 | # Build everything after someone bypassed the CI
|
---|
239 | - if: *is-direct-push
|
---|
240 | when: on_success
|
---|
241 | # Build everything in scheduled pipelines
|
---|
242 | - if: *is-scheduled-pipeline
|
---|
243 | when: on_success
|
---|
244 | # Allow building everything in fork pipelines, but build nothing unless
|
---|
245 | # manually triggered
|
---|
246 | - when: manual
|
---|
247 |
|
---|
248 |
|
---|
249 | .ci-deqp-artifacts:
|
---|
250 | artifacts:
|
---|
251 | name: "mesa_${CI_JOB_NAME}"
|
---|
252 | when: always
|
---|
253 | untracked: false
|
---|
254 | paths:
|
---|
255 | # Watch out! Artifacts are relative to the build dir.
|
---|
256 | # https://gitlab.com/gitlab-org/gitlab-ce/commit/8788fb925706cad594adf6917a6c5f6587dd1521
|
---|
257 | - artifacts
|
---|
258 | - _build/meson-logs/*.txt
|
---|
259 | - _build/meson-logs/strace
|
---|
260 |
|
---|
261 | # Git archive
|
---|
262 |
|
---|
263 | make git archive:
|
---|
264 | extends:
|
---|
265 | - .fdo.ci-fairy
|
---|
266 | stage: git-archive
|
---|
267 | rules:
|
---|
268 | - !reference [.scheduled_pipeline-rules, rules]
|
---|
269 | # ensure we are running on packet
|
---|
270 | tags:
|
---|
271 | - packet.net
|
---|
272 | script:
|
---|
273 | # Compactify the .git directory
|
---|
274 | - git gc --aggressive
|
---|
275 | # Download & cache the perfetto subproject as well.
|
---|
276 | - rm -rf subprojects/perfetto ; mkdir -p subprojects/perfetto && curl https://android.googlesource.com/platform/external/perfetto/+archive/$(grep 'revision =' subprojects/perfetto.wrap | cut -d ' ' -f3).tar.gz | tar zxf - -C subprojects/perfetto
|
---|
277 | # compress the current folder
|
---|
278 | - tar -cvzf ../$CI_PROJECT_NAME.tar.gz .
|
---|
279 |
|
---|
280 | - ci-fairy s3cp --token-file "${CI_JOB_JWT_FILE}" ../$CI_PROJECT_NAME.tar.gz https://$S3_HOST/git-cache/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_PROJECT_NAME.tar.gz
|
---|
281 |
|
---|
282 |
|
---|
283 | # Sanity checks of MR settings and commit logs
|
---|
284 | sanity:
|
---|
285 | extends:
|
---|
286 | - .fdo.ci-fairy
|
---|
287 | stage: sanity
|
---|
288 | rules:
|
---|
289 | - if: *is-pre-merge
|
---|
290 | when: on_success
|
---|
291 | - when: never
|
---|
292 | variables:
|
---|
293 | GIT_STRATEGY: none
|
---|
294 | script:
|
---|
295 | # ci-fairy check-commits --junit-xml=check-commits.xml
|
---|
296 | - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-merge-request.xml
|
---|
297 | artifacts:
|
---|
298 | when: on_failure
|
---|
299 | reports:
|
---|
300 | junit: check-*.xml
|
---|
301 | tags:
|
---|
302 | - placeholder-job
|
---|
303 |
|
---|
304 |
|
---|
305 | # Jobs that need to pass before spending hardware resources on further testing
|
---|
306 | .required-for-hardware-jobs:
|
---|
307 | needs:
|
---|
308 | - job: clang-format
|
---|
309 | optional: true
|
---|
310 | - job: rustfmt
|
---|
311 | optional: true
|
---|