• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Docker image tag helper templates
2
3.incorporate-templates-commit:
4  variables:
5    FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${MESA_TEMPLATES_COMMIT}"
6
7.incorporate-base-tag+templates-commit:
8  variables:
9    FDO_BASE_IMAGE: "${CI_REGISTRY_IMAGE}/${MESA_BASE_IMAGE}:${MESA_BASE_TAG}--${MESA_TEMPLATES_COMMIT}"
10    FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${MESA_BASE_TAG}--${MESA_TEMPLATES_COMMIT}"
11
12.set-image:
13  extends:
14    - .incorporate-templates-commit
15  variables:
16    MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${FDO_DISTRIBUTION_TAG}"
17  image: "$MESA_IMAGE"
18
19.set-image-base-tag:
20  extends:
21    - .set-image
22    - .incorporate-base-tag+templates-commit
23  variables:
24    MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${FDO_DISTRIBUTION_TAG}"
25
26# Build the CI docker images.
27#
28# MESA_IMAGE_TAG is the tag of the docker image used by later stage jobs. If the
29# image doesn't exist yet, the container stage job generates it.
30#
31# In order to generate a new image, one should generally change the tag.
32# While removing the image from the registry would also work, that's not
33# recommended except for ephemeral images during development: Replacing
34# an image after a significant amount of time might pull in newer
35# versions of gcc/clang or other packages, which might break the build
36# with older commits using the same tag.
37#
38# After merging a change resulting in generating a new image to the
39# main repository, it's recommended to remove the image from the source
40# repository's container registry, so that the image from the main
41# repository's registry will be used there as well.
42
43.debian-container:
44  variables:
45    FDO_DISTRIBUTION_VERSION: bookworm-slim
46
47.container:
48  stage: container
49  extends:
50    - .container+build-rules
51    - .incorporate-templates-commit
52  variables:
53    FDO_REPO_SUFFIX: $CI_JOB_NAME
54    FDO_DISTRIBUTION_EXEC: 'bash .gitlab-ci/container/${CI_JOB_NAME}.sh'
55    # no need to pull the whole repo to build the container image
56    GIT_STRATEGY: none
57
58.use-base-image:
59  extends:
60    - .container
61    - .incorporate-base-tag+templates-commit
62
63# Debian based x86_64 build image base
64debian/x86_64_build-base:
65  extends:
66    - .fdo.container-build@debian
67    - .container
68    - .debian-container
69  variables:
70    MESA_IMAGE_TAG: &debian-x86_64_build-base "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}"
71  rules:
72    # python-test requires debian/x86_64_build, which requires this job
73    - !reference [python-test, rules]
74    - !reference [.container, rules]
75
76.use-debian/x86_64_build-base:
77  extends:
78    - .fdo.container-build@debian
79    - .debian-container
80    - .use-base-image
81  variables:
82    MESA_BASE_IMAGE: ${DEBIAN_X86_64_BUILD_BASE_IMAGE}
83    MESA_BASE_TAG: *debian-x86_64_build-base
84    MESA_ARTIFACTS_BASE_TAG: *debian-x86_64_build-base
85  needs:
86    - debian/x86_64_build-base
87
88# Debian based x86_64 main build image
89debian/x86_64_build:
90  extends:
91    - .use-debian/x86_64_build-base
92  variables:
93    MESA_IMAGE_TAG: &debian-x86_64_build ${DEBIAN_BUILD_TAG}
94  rules:
95    # python-test requires this job
96    - !reference [python-test, rules]
97    - !reference [.use-debian/x86_64_build-base, rules]
98
99.use-debian/x86_64_build:
100  extends:
101    - .set-image-base-tag
102  variables:
103    MESA_BASE_TAG: *debian-x86_64_build-base
104    MESA_IMAGE_PATH: ${DEBIAN_X86_64_BUILD_IMAGE_PATH}
105    MESA_IMAGE_TAG: *debian-x86_64_build
106  needs:
107    - debian/x86_64_build
108
109# Debian based x86_32 cross-build image
110debian/x86_32_build:
111  extends:
112    - .use-debian/x86_64_build-base
113  variables:
114    MESA_IMAGE_TAG: &debian-x86_32_build ${DEBIAN_BUILD_TAG}
115
116.use-debian/x86_32_build:
117  extends:
118    - .set-image-base-tag
119  variables:
120    MESA_BASE_TAG: *debian-x86_64_build-base
121    MESA_IMAGE_PATH: "debian/x86_32_build"
122    MESA_IMAGE_TAG: *debian-x86_32_build
123  needs:
124    - debian/x86_32_build
125
126# Debian based ppc64el cross-build image
127debian/ppc64el_build:
128  extends:
129    - .use-debian/x86_64_build-base
130  variables:
131    MESA_IMAGE_TAG: &debian-ppc64el_build ${DEBIAN_BUILD_TAG}
132
133.use-debian/ppc64el_build:
134  extends:
135    - .set-image-base-tag
136  variables:
137    MESA_BASE_TAG: *debian-x86_64_build-base
138    MESA_IMAGE_PATH: "debian/ppc64el_build"
139    MESA_IMAGE_TAG: *debian-ppc64el_build
140  needs:
141    - debian/ppc64el_build
142
143# Debian based s390x cross-build image
144debian/s390x_build:
145  extends:
146    - .use-debian/x86_64_build-base
147  variables:
148    MESA_IMAGE_TAG: &debian-s390x_build ${DEBIAN_BUILD_TAG}
149
150.use-debian/s390x_build:
151  extends:
152    - .set-image-base-tag
153  variables:
154    MESA_BASE_TAG: *debian-x86_64_build-base
155    MESA_IMAGE_PATH: "debian/s390x_build"
156    MESA_IMAGE_TAG: *debian-s390x_build
157  needs:
158    - debian/s390x_build
159
160# Android NDK cross-build image
161debian/android_build:
162  extends:
163    - .use-debian/x86_64_build-base
164  variables:
165    MESA_IMAGE_TAG: &debian-android_build ${DEBIAN_BUILD_TAG}
166    ANDROID_SDK_VERSION: 33
167    ANDROID_NDK: android-ndk-r25b
168
169.use-debian/android_build:
170  extends:
171    - .set-image-base-tag
172  variables:
173    MESA_BASE_TAG: *debian-x86_64_build-base
174    MESA_IMAGE_PATH: "debian/android_build"
175    MESA_IMAGE_TAG: *debian-android_build
176  needs:
177    - debian/android_build
178
179# Debian based x86_64 test image base
180debian/x86_64_test-base:
181  extends: debian/x86_64_build-base
182  variables:
183    MESA_IMAGE_TAG: &debian-x86_64_test-base "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}--${KERNEL_TAG}"
184
185.use-debian/x86_64_test-base:
186  extends:
187    - .fdo.container-build@debian
188    - .debian-container
189    - .use-base-image
190  variables:
191    MESA_BASE_IMAGE: ${DEBIAN_X86_64_TEST_BASE_IMAGE}
192    MESA_BASE_TAG: *debian-x86_64_test-base
193  needs:
194    - debian/x86_64_test-base
195
196# Debian based x86_64 test image for GL
197debian/x86_64_test-gl:
198  extends: .use-debian/x86_64_test-base
199  variables:
200    MESA_IMAGE_TAG: &debian-x86_64_test-gl ${DEBIAN_X86_64_TEST_GL_TAG}
201
202.use-debian/x86_64_test-gl:
203  extends:
204    - .set-image-base-tag
205  variables:
206    MESA_BASE_TAG: *debian-x86_64_test-base
207    MESA_IMAGE_PATH: ${DEBIAN_X86_64_TEST_IMAGE_GL_PATH}
208    MESA_IMAGE_TAG: *debian-x86_64_test-gl
209  needs:
210    - debian/x86_64_test-gl
211
212# Debian based x86_64 test image for VK
213debian/x86_64_test-vk:
214  extends: .use-debian/x86_64_test-base
215  variables:
216    MESA_IMAGE_TAG: &debian-x86_64_test-vk ${DEBIAN_X86_64_TEST_VK_TAG}
217
218.use-debian/x86_64_test-vk:
219  extends:
220    - .set-image-base-tag
221  variables:
222    MESA_BASE_TAG: *debian-x86_64_test-base
223    MESA_IMAGE_PATH: ${DEBIAN_X86_64_TEST_IMAGE_VK_PATH}
224    MESA_IMAGE_TAG: *debian-x86_64_test-vk
225  needs:
226    - debian/x86_64_test-vk
227
228# Debian based x86_64 test image for Android
229debian/x86_64_test-android:
230  extends: .use-debian/x86_64_test-base
231  variables:
232    MESA_IMAGE_TAG: &debian-x86_64_test-android ${DEBIAN_X86_64_TEST_ANDROID_TAG}
233    ANDROID_NDK: android-ndk-r25b
234
235.use-debian/x86_64_test-android:
236  extends:
237    - .set-image-base-tag
238  variables:
239    MESA_BASE_TAG: *debian-x86_64_test-base
240    MESA_IMAGE_PATH: ${DEBIAN_X86_64_TEST_ANDROID_IMAGE_PATH}
241    MESA_IMAGE_TAG: *debian-x86_64_test-android
242  needs:
243    - debian/x86_64_test-android
244
245# Debian based ARM build image
246debian/arm64_build:
247  extends:
248    - .fdo.container-build@debian
249    - .container
250    - .debian-container
251  tags:
252    - aarch64
253  variables:
254    MESA_IMAGE_TAG: &debian-arm64_build "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}"
255
256.use-debian/arm64_build:
257  extends:
258    - .set-image
259  variables:
260    MESA_IMAGE_PATH: "debian/arm64_build"
261    MESA_IMAGE_TAG: *debian-arm64_build
262    MESA_ARTIFACTS_TAG: *debian-arm64_build
263  needs:
264    - debian/arm64_build
265
266
267# Alpine based x86_64 build image
268.alpine/x86_64_build-base:
269  extends:
270    - .fdo.container-build@alpine
271    - .container
272  variables:
273    FDO_DISTRIBUTION_VERSION: "edge"  # switch to 3.20 when gets released
274    FDO_BASE_IMAGE: alpine:$FDO_DISTRIBUTION_VERSION  # since cbuild ignores it
275
276# Alpine based x86_64 build image
277alpine/x86_64_build:
278  extends:
279    - .alpine/x86_64_build-base
280  variables:
281    MESA_IMAGE_TAG: &alpine-x86_64_build ${ALPINE_X86_64_BUILD_TAG}
282
283.use-alpine/x86_64_build:
284  extends:
285    - .set-image
286  variables:
287    MESA_IMAGE_PATH: "alpine/x86_64_build"
288    MESA_IMAGE_TAG: *alpine-x86_64_build
289  needs:
290    - alpine/x86_64_build
291
292# Alpine based x86_64 image for LAVA SSH dockerized client
293alpine/x86_64_lava_ssh_client:
294  extends:
295    - .alpine/x86_64_build-base
296  variables:
297    MESA_IMAGE_TAG: &alpine-x86_64_lava_ssh_client ${ALPINE_X86_64_LAVA_SSH_TAG}
298
299# Fedora based x86_64 build image
300fedora/x86_64_build:
301  extends:
302    - .fdo.container-build@fedora
303    - .container
304  variables:
305    FDO_DISTRIBUTION_VERSION: 38
306    MESA_IMAGE_TAG: &fedora-x86_64_build ${FEDORA_X86_64_BUILD_TAG}
307
308.use-fedora/x86_64_build:
309  extends:
310    - .set-image
311  variables:
312    MESA_IMAGE_PATH: "fedora/x86_64_build"
313    MESA_IMAGE_TAG: *fedora-x86_64_build
314  needs:
315    - fedora/x86_64_build
316
317
318.kernel+rootfs:
319  extends:
320    - .container+build-rules
321    - .debian-container
322  stage: container
323  variables:
324    GIT_STRATEGY: fetch
325    MESA_ROOTFS_TAG: &kernel-rootfs ${KERNEL_ROOTFS_TAG}
326    DISTRIBUTION_TAG: &distribution-tag-arm "${MESA_ROOTFS_TAG}--${KERNEL_TAG}--${MESA_ARTIFACTS_TAG}--${MESA_TEMPLATES_COMMIT}"
327  script:
328    - .gitlab-ci/container/lava_build.sh
329
330kernel+rootfs_x86_64:
331  extends:
332    - .use-debian/x86_64_build-base
333    - .kernel+rootfs
334  image: "$FDO_BASE_IMAGE"
335  variables:
336    DEBIAN_ARCH: "amd64"
337    DISTRIBUTION_TAG: &distribution-tag-x86_64 "${MESA_ROOTFS_TAG}--${KERNEL_TAG}--${MESA_ARTIFACTS_BASE_TAG}--${MESA_TEMPLATES_COMMIT}"
338
339kernel+rootfs_arm64:
340  extends:
341    - .use-debian/arm64_build
342    - .kernel+rootfs
343  tags:
344    - aarch64
345  variables:
346    DEBIAN_ARCH: "arm64"
347
348kernel+rootfs_arm32:
349  extends:
350    - kernel+rootfs_arm64
351  variables:
352    DEBIAN_ARCH: "armhf"
353
354# Cannot use anchors defined here from included files, so use extends: instead
355.use-kernel+rootfs-arm:
356  variables:
357    DISTRIBUTION_TAG: *distribution-tag-arm
358    MESA_ROOTFS_TAG: *kernel-rootfs
359
360.use-kernel+rootfs-x86_64:
361  variables:
362    DISTRIBUTION_TAG: *distribution-tag-x86_64
363    MESA_ROOTFS_TAG: *kernel-rootfs
364
365# x86_64 image with ARM64 & ARM32 kernel & rootfs for baremetal testing
366.debian/arm_test:
367  extends:
368    - .fdo.container-build@debian
369    - .container
370    - .debian-container
371    # Don't want the .container rules
372    - .container+build-rules
373  variables:
374    FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${MESA_ROOTFS_TAG}--${KERNEL_TAG}--${MESA_TEMPLATES_COMMIT}"
375    ARTIFACTS_PREFIX: "https://${S3_HOST}/mesa-lava"
376    ARTIFACTS_SUFFIX: "${MESA_ROOTFS_TAG}--${KERNEL_TAG}--${MESA_ARTIFACTS_TAG}--${MESA_TEMPLATES_COMMIT}"
377    MESA_ARTIFACTS_TAG: *debian-arm64_build
378    MESA_ROOTFS_TAG: *kernel-rootfs
379
380debian/arm32_test:
381  extends:
382    - .debian/arm_test
383  needs:
384    - kernel+rootfs_arm32
385  variables:
386    MESA_IMAGE_TAG: &debian-arm32_test "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}"
387
388debian/arm64_test:
389  extends:
390    - .debian/arm_test
391  needs:
392    - kernel+rootfs_arm64
393  variables:
394    MESA_IMAGE_TAG: &debian-arm64_test "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}"
395
396.use-debian/arm_test:
397  variables:
398    MESA_ROOTFS_TAG: *kernel-rootfs
399
400.use-debian/arm32_test:
401  image: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${MESA_ROOTFS_TAG}--${KERNEL_TAG}--${MESA_TEMPLATES_COMMIT}"
402  extends:
403    - .use-debian/arm_test
404  variables:
405    MESA_IMAGE_PATH: "debian/arm32_test"
406    MESA_IMAGE_TAG: *debian-arm32_test
407  needs:
408    - debian/arm_test
409
410.use-debian/arm64_test:
411  image: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${MESA_ROOTFS_TAG}--${KERNEL_TAG}--${MESA_TEMPLATES_COMMIT}"
412  extends:
413    - .use-debian/arm_test
414  variables:
415    MESA_IMAGE_PATH: "debian/arm64_test"
416    MESA_IMAGE_TAG: *debian-arm64_test
417  needs:
418    - debian/arm_test
419
420# Native Windows docker builds
421#
422# Unlike the above Linux-based builds - including MinGW builds which
423# cross-compile for Windows - which use the freedesktop ci-templates, we
424# cannot use the same scheme here. As Windows lacks support for
425# Docker-in-Docker, and Podman does not run natively on Windows, we have
426# to open-code much of the same ourselves.
427#
428# This is achieved by first running in a native Windows shell instance
429# (host PowerShell) in the container stage to build and push the image,
430# then in the build stage by executing inside Docker.
431
432.windows-docker-msvc:
433  variables:
434    MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}"
435    MESA_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/$MESA_IMAGE_PATH:${MESA_IMAGE_TAG}"
436  extends:
437    - .windows-docker-tags
438
439.windows_container_build:
440  inherit:
441    default: [retry]
442  extends:
443    - .container
444    - .windows-docker-msvc
445    - .windows-shell-tags
446  rules:
447    - !reference [.microsoft-farm-container-rules, rules]
448    - !reference [.container+build-rules, rules]
449  variables:
450    GIT_STRATEGY: fetch # we do actually need the full repository though
451    MESA_BASE_IMAGE: None
452  script:
453    - .\.gitlab-ci\windows\mesa_container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $MESA_IMAGE $MESA_UPSTREAM_IMAGE ${DOCKERFILE} ${MESA_BASE_IMAGE}
454
455windows_msvc:
456  inherit:
457    default: [retry]
458  extends:
459    - .windows_container_build
460  variables:
461    MESA_IMAGE_PATH: &windows_msvc_image_path ${WINDOWS_X64_MSVC_PATH}
462    MESA_IMAGE_TAG: ${WINDOWS_X64_MSVC_TAG}
463    DOCKERFILE: Dockerfile_msvc
464    MESA_BASE_IMAGE: "mcr.microsoft.com/windows/server:ltsc2022"
465
466windows_build_msvc:
467  inherit:
468    default: [retry]
469  extends:
470    - .windows_container_build
471  rules:
472    - !reference [.microsoft-farm-rules, rules]
473    - !reference [.container+build-rules, rules]
474  variables:
475    MESA_IMAGE_PATH: &windows_build_image_path ${WINDOWS_X64_BUILD_PATH}
476    MESA_IMAGE_TAG: &windows_build_image_tag ${WINDOWS_X64_MSVC_TAG}--${WINDOWS_X64_BUILD_TAG}
477    DOCKERFILE: Dockerfile_build
478    MESA_BASE_IMAGE_PATH: *windows_msvc_image_path
479    MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${WINDOWS_X64_MSVC_TAG}"
480  timeout: 2h 30m # LLVM takes ages
481  needs:
482    - windows_msvc
483
484windows_test_msvc:
485  inherit:
486    default: [retry]
487  extends:
488    - .windows_container_build
489  rules:
490    - !reference [.microsoft-farm-rules, rules]
491    - !reference [.container+build-rules, rules]
492  variables:
493    MESA_IMAGE_PATH: &windows_test_image_path ${WINDOWS_X64_TEST_PATH}
494    MESA_IMAGE_TAG: &windows_test_image_tag ${WINDOWS_X64_MSVC_TAG}--${WINDOWS_X64_TEST_TAG}
495    DOCKERFILE: Dockerfile_test
496    MESA_BASE_IMAGE_PATH: *windows_msvc_image_path
497    MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${WINDOWS_X64_MSVC_TAG}"
498  timeout: 2h 30m
499  needs:
500    - windows_msvc
501
502.use-windows_build_msvc:
503  inherit:
504    default: [retry]
505  extends: .windows-docker-msvc
506  image: "$MESA_IMAGE"
507  variables:
508    MESA_IMAGE_PATH: *windows_build_image_path
509    MESA_IMAGE_TAG: *windows_build_image_tag
510  needs:
511    - windows_build_msvc
512
513.use-windows_test_msvc:
514  inherit:
515    default: [retry]
516  extends: .windows-docker-msvc
517  image: "$MESA_IMAGE"
518  variables:
519    MESA_IMAGE_PATH: *windows_test_image_path
520    MESA_IMAGE_TAG: *windows_test_image_tag
521