• 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-version:
44  variables:
45    FDO_DISTRIBUTION_VERSION: bookworm-slim
46
47.debian-container:
48  extends:
49    - .fdo.container-build@debian
50    - .container
51    - .debian-container-version
52
53.container:
54  stage: container
55  extends:
56    - .container+build-rules
57    - .incorporate-templates-commit
58  variables:
59    FDO_REPO_SUFFIX: $CI_JOB_NAME
60    FDO_DISTRIBUTION_EXEC: 'bash .gitlab-ci/container/container_job_trampoline.sh "${CI_JOB_NAME}"'
61    # no need to pull the whole repo to build the container image
62    GIT_STRATEGY: none
63
64.use-base-image:
65  extends:
66    - .container
67    - .incorporate-base-tag+templates-commit
68
69# Debian based x86_64 build image base
70debian/x86_64_build-base:
71  extends:
72    - .debian-container
73  variables:
74    MESA_IMAGE_TAG: &debian-x86_64_build-base "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}"
75    LLVM_VERSION: &debian-x86_64-llvm 19
76
77.use-debian/x86_64_build-base:
78  extends:
79    - .fdo.container-build@debian
80    - .debian-container-version
81    - .use-base-image
82  variables:
83    MESA_BASE_IMAGE: ${DEBIAN_X86_64_BUILD_BASE_IMAGE}
84    MESA_BASE_TAG: *debian-x86_64_build-base
85    MESA_ARTIFACTS_BASE_TAG: *debian-x86_64_build-base
86    LLVM_VERSION: *debian-x86_64-llvm
87  needs:
88    - debian/x86_64_build-base
89
90# Debian based x86_64 main build image
91debian/x86_64_build:
92  extends:
93    - .use-debian/x86_64_build-base
94  variables:
95    MESA_IMAGE_TAG: &debian-x86_64_build ${DEBIAN_BUILD_TAG}
96    LLVM_VERSION: *debian-x86_64-llvm
97
98.use-debian/x86_64_build:
99  extends:
100    - .set-image-base-tag
101  variables:
102    MESA_BASE_TAG: *debian-x86_64_build-base
103    MESA_IMAGE_PATH: ${DEBIAN_X86_64_BUILD_IMAGE_PATH}
104    MESA_IMAGE_TAG: *debian-x86_64_build
105    LLVM_VERSION: *debian-x86_64-llvm
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    LLVM_VERSION: *debian-x86_64-llvm
124  needs:
125    - debian/x86_32_build
126
127# Debian based ppc64el cross-build image
128debian/ppc64el_build:
129  extends:
130    - .use-debian/x86_64_build-base
131  variables:
132    MESA_IMAGE_TAG: &debian-ppc64el_build ${DEBIAN_BUILD_TAG}
133    LLVM_VERSION: &debian-ppc64el-llvm 15 # no LLVM packages for PPC
134
135.use-debian/ppc64el_build:
136  extends:
137    - .set-image-base-tag
138  variables:
139    MESA_BASE_TAG: *debian-x86_64_build-base
140    MESA_IMAGE_PATH: "debian/ppc64el_build"
141    MESA_IMAGE_TAG: *debian-ppc64el_build
142    LLVM_VERSION: *debian-ppc64el-llvm
143  needs:
144    - debian/ppc64el_build
145
146# Debian based s390x cross-build image
147debian/s390x_build:
148  extends:
149    - .use-debian/x86_64_build-base
150  variables:
151    MESA_IMAGE_TAG: &debian-s390x_build ${DEBIAN_BUILD_TAG}
152    LLVM_VERSION: &debian-s390x-llvm 19
153
154.use-debian/s390x_build:
155  extends:
156    - .set-image-base-tag
157  variables:
158    MESA_BASE_TAG: *debian-x86_64_build-base
159    MESA_IMAGE_PATH: "debian/s390x_build"
160    MESA_IMAGE_TAG: *debian-s390x_build
161    LLVM_VERSION: *debian-s390x-llvm
162  needs:
163    - debian/s390x_build
164
165# Android NDK cross-build image
166.android-variables:
167  variables:
168    ANDROID_NDK_VERSION: "r27c"
169    ANDROID_SDK_VERSION: 34
170    ANDROID_LLVM_VERSION: llvmorg-18.1.8
171    ANDROID_LLVM_ARTIFACT_NAME: android-x86_64-llvm-20250103
172    # This can be confusing: LLVM_VERSION refers to the host LLVM toolchain
173    # used (LLVM 19 in our Debian system), but ANDROID_LLVM_VERSION refers to
174    # the cross-compiling LLVM toolchain used to build for the Android system.
175    LLVM_VERSION: &debian-android-llvm 19
176
177debian/android_build:
178  extends:
179    - .android-variables
180    - .use-debian/x86_64_build-base
181  variables:
182    MESA_IMAGE_TAG: &debian-android_build ${DEBIAN_BUILD_TAG}
183
184.use-debian/android_build:
185  extends:
186    - .android-variables
187    - .set-image-base-tag
188  variables:
189    MESA_BASE_TAG: *debian-x86_64_build-base
190    MESA_IMAGE_PATH: "debian/android_build"
191    MESA_IMAGE_TAG: *debian-android_build
192  needs:
193    - debian/android_build
194
195# Debian based ARM build image
196debian/arm64_build:
197  extends:
198    - .fdo.container-build@debian
199    - .container
200    - .debian-container-version
201  tags:
202    - aarch64
203  variables:
204    MESA_IMAGE_TAG: &debian-arm64_build "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}"
205    LLVM_VERSION: &debian-arm64-llvm 19
206
207.use-debian/arm64_build:
208  extends:
209    - .set-image
210  variables:
211    MESA_IMAGE_PATH: "debian/arm64_build"
212    MESA_IMAGE_TAG: *debian-arm64_build
213    MESA_ARTIFACTS_TAG: *debian-arm64_build
214    LLVM_VERSION: *debian-arm64-llvm
215  needs:
216    - debian/arm64_build
217
218# Alpine based x86_64 build image
219.alpine/x86_64_build-base:
220  extends:
221    - .fdo.container-build@alpine
222    - .container
223  variables:
224    FDO_DISTRIBUTION_VERSION: "edge"  # switch to 3.20 when gets released
225    FDO_BASE_IMAGE: alpine:$FDO_DISTRIBUTION_VERSION  # since cbuild ignores it
226
227# Alpine based x86_64 build image
228alpine/x86_64_build:
229  extends:
230    - .alpine/x86_64_build-base
231  variables:
232    MESA_IMAGE_TAG: &alpine-x86_64_build ${ALPINE_X86_64_BUILD_TAG}
233    LLVM_VERSION: &alpine-llvm_version 19
234  rules:
235    # Note: the next three lines must remain in that order, so that the rules
236    # in `linkcheck-docs` catch nightly pipelines before the rules in `pages`
237    # exclude them.
238    - !reference [linkcheck-docs, rules]
239    - !reference [pages, rules]
240    - !reference [test-docs, rules]
241    - !reference [.container, rules]
242
243.use-alpine/x86_64_build:
244  extends:
245    - .set-image
246  variables:
247    MESA_IMAGE_PATH: "alpine/x86_64_build"
248    MESA_IMAGE_TAG: *alpine-x86_64_build
249    LLVM_VERSION: *alpine-llvm_version
250  needs:
251    - alpine/x86_64_build
252
253# Alpine based x86_64 image for LAVA SSH dockerized client
254alpine/x86_64_lava_ssh_client:
255  extends:
256    - .alpine/x86_64_build-base
257  variables:
258    MESA_IMAGE_TAG: &alpine-x86_64_lava_ssh_client ${ALPINE_X86_64_LAVA_SSH_TAG}
259
260# Fedora based x86_64 build image
261fedora/x86_64_build:
262  extends:
263    - .fdo.container-build@fedora
264    - .container
265  variables:
266    FDO_DISTRIBUTION_VERSION: 41
267    MESA_IMAGE_TAG: &fedora-x86_64_build ${FEDORA_X86_64_BUILD_TAG}
268    LLVM_VERSION: &fedora-x86_64-llvm 19
269
270.use-fedora/x86_64_build:
271  extends:
272    - .set-image
273  variables:
274    MESA_IMAGE_PATH: "fedora/x86_64_build"
275    MESA_IMAGE_TAG: *fedora-x86_64_build
276    LLVM_VERSION: *fedora-x86_64-llvm
277  needs:
278    - fedora/x86_64_build
279
280# Debian based x86_64 test image base
281debian/x86_64_test-base:
282  extends:
283    - .debian-container
284  variables:
285    MESA_IMAGE_TAG: &debian-x86_64_test-base "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}--${KERNEL_TAG}"
286    LLVM_VERSION: *debian-x86_64-llvm
287
288.use-debian/x86_64_test-base:
289  extends:
290    - .fdo.container-build@debian
291    - .debian-container-version
292    - .use-base-image
293  variables:
294    MESA_BASE_IMAGE: ${DEBIAN_X86_64_TEST_BASE_IMAGE}
295    MESA_BASE_TAG: *debian-x86_64_test-base
296    LLVM_VERSION: *debian-x86_64-llvm
297  needs:
298    - debian/x86_64_test-base
299
300# Debian based aarch64 test image base
301debian/arm64_test-base:
302  tags:
303    - aarch64
304  extends:
305    - .debian-container
306  variables:
307    MESA_IMAGE_TAG: &debian-arm64_test-base "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}"
308    LLVM_VERSION: *debian-arm64-llvm
309
310.use-debian/arm64_test-base:
311  tags:
312    - aarch64
313  extends:
314    - .fdo.container-build@debian
315    - .debian-container-version
316    - .use-base-image
317  variables:
318    MESA_BASE_IMAGE: ${DEBIAN_ARM64_TEST_BASE_IMAGE}
319    MESA_BASE_TAG: *debian-arm64_test-base
320    LLVM_VERSION: *debian-arm64-llvm
321  needs:
322    - debian/arm64_test-base
323
324# Debian based x86_64 test image for GL
325debian/x86_64_test-gl:
326  extends: .use-debian/x86_64_test-base
327  variables:
328    MESA_IMAGE_TAG: &debian-x86_64_test-gl ${DEBIAN_TEST_GL_TAG}
329
330.use-debian/x86_64_test-gl:
331  extends:
332    - .set-image-base-tag
333  variables:
334    MESA_BASE_TAG: *debian-x86_64_test-base
335    MESA_IMAGE_PATH: ${DEBIAN_X86_64_TEST_IMAGE_GL_PATH}
336    MESA_IMAGE_TAG: *debian-x86_64_test-gl
337  needs:
338    - debian/x86_64_test-gl
339
340# Debian based x86_64 test image for VK
341debian/x86_64_test-vk:
342  extends: .use-debian/x86_64_test-base
343  variables:
344    MESA_IMAGE_TAG: &debian-x86_64_test-vk ${DEBIAN_TEST_VK_TAG}
345
346.use-debian/x86_64_test-vk:
347  extends:
348    - .set-image-base-tag
349  variables:
350    MESA_BASE_TAG: *debian-x86_64_test-base
351    MESA_IMAGE_PATH: ${DEBIAN_X86_64_TEST_IMAGE_VK_PATH}
352    MESA_IMAGE_TAG: *debian-x86_64_test-vk
353  needs:
354    - debian/x86_64_test-vk
355
356# Debian based x86_64 test image for Android
357.debian/x86_64_test-android:
358  extends:
359    - .android-variables
360    - .use-debian/x86_64_test-base
361  variables:
362    MESA_IMAGE_TAG: &debian-x86_64_test-android ${DEBIAN_TEST_ANDROID_TAG}
363
364.use-debian/x86_64_test-android:
365  extends:
366    - .set-image-base-tag
367  variables:
368    MESA_BASE_TAG: *debian-x86_64_test-base
369    MESA_IMAGE_PATH: ${DEBIAN_X86_64_TEST_ANDROID_IMAGE_PATH}
370    MESA_IMAGE_TAG: *debian-x86_64_test-android
371  needs:
372    - debian/x86_64_test-android
373
374# Debian-based x86_64 image to run Python utilities
375debian/x86_64_pyutils:
376  extends:
377    - .debian-container
378  variables:
379    MESA_IMAGE_TAG: &debian-x86_64_pyutils "${DEBIAN_PYUTILS_TAG}"
380
381.use-debian/x86_64_pyutils:
382  extends:
383    - .fdo.container-build@debian
384    - .debian-container-version
385    - .set-image
386  variables:
387    MESA_IMAGE_PATH: ${DEBIAN_PYUTILS_IMAGE}
388    MESA_IMAGE_TAG: *debian-x86_64_pyutils
389  needs:
390    - debian/x86_64_pyutils
391
392# Debian based aarch64 test image for GL
393debian/arm64_test-gl:
394  tags:
395    - aarch64
396  extends: .use-debian/arm64_test-base
397  variables:
398    MESA_IMAGE_TAG: &debian-arm64_test-gl ${DEBIAN_TEST_GL_TAG}
399
400.use-debian/arm64_test-gl:
401  tags:
402    - aarch64
403  extends:
404    - .set-image-base-tag
405  variables:
406    MESA_BASE_TAG: *debian-arm64_test-base
407    MESA_IMAGE_PATH: ${DEBIAN_ARM64_TEST_IMAGE_GL_PATH}
408    MESA_IMAGE_TAG: *debian-arm64_test-gl
409  needs:
410    - debian/arm64_test-gl
411
412# Debian based aarch64 test image for VK
413debian/arm64_test-vk:
414  tags:
415    - aarch64
416  extends: .use-debian/arm64_test-base
417  variables:
418    MESA_IMAGE_TAG: &debian-arm64_test-vk ${DEBIAN_TEST_VK_TAG}
419
420.use-debian/arm64_test-vk:
421  tags:
422    - aarch64
423  extends:
424    - .set-image-base-tag
425  variables:
426    MESA_BASE_TAG: *debian-arm64_test-base
427    MESA_IMAGE_PATH: ${DEBIAN_ARM64_TEST_IMAGE_VK_PATH}
428    MESA_IMAGE_TAG: *debian-arm64_test-vk
429  needs:
430    - debian/arm64_test-vk
431
432# Get firmware directly rather than using package versions.
433# Change KERNEL_ROOTFS_TAG to add firmware changes.
434# FIRMWARE_FILES is a list of json files arranged by vendor in .gitlab-ci/firmware/*
435.firmware_x86_64:
436  variables:
437    FIRMWARE_FILES: |
438      .gitlab-ci/firmware/i915/mtl-fw.json
439
440.firmware_arm64:
441  variables:
442    FIRMWARE_FILES: |
443      .gitlab-ci/firmware/arm/mali/arch10.8/mali-fw.json
444
445.firmware_arm32:
446  variables:
447    FIRMWARE_FILES: |
448
449.kernel+rootfs:
450  extends:
451    - .container+build-rules
452    - .debian-container-version
453  stage: container
454  timeout: 120m
455  variables:
456    GIT_STRATEGY: fetch
457    MESA_ROOTFS_TAG: &kernel-rootfs ${KERNEL_ROOTFS_TAG}
458    DISTRIBUTION_TAG: &distribution-tag-arm "${MESA_ROOTFS_TAG}--${KERNEL_TAG}--${MESA_ARTIFACTS_TAG}--${MESA_TEMPLATES_COMMIT}"
459  script:
460    - .gitlab-ci/container/lava_build.sh
461
462kernel+rootfs_x86_64:
463  extends:
464    - .use-debian/x86_64_build-base
465    - .kernel+rootfs
466    - .firmware_x86_64
467  image: "$FDO_BASE_IMAGE"
468  variables:
469    DEBIAN_ARCH: "amd64"
470    DISTRIBUTION_TAG: &distribution-tag-x86_64 "${MESA_ROOTFS_TAG}--${KERNEL_TAG}--${MESA_ARTIFACTS_BASE_TAG}--${MESA_TEMPLATES_COMMIT}"
471    LLVM_VERSION: *debian-x86_64-llvm
472
473kernel+rootfs_arm64:
474  extends:
475    - .use-debian/arm64_build
476    - .kernel+rootfs
477    - .firmware_arm64
478  tags:
479    - aarch64
480  variables:
481    DEBIAN_ARCH: "arm64"
482    LLVM_VERSION: *debian-arm64-llvm
483
484kernel+rootfs_arm32:
485  extends:
486    - kernel+rootfs_arm64
487    - .firmware_arm32
488  variables:
489    DEBIAN_ARCH: "armhf"
490    LLVM_VERSION: &debian-arm32-llvm 15 # no armhf builds for LLVM
491
492# Cannot use anchors defined here from included files, so use extends: instead
493.use-kernel+rootfs-arm:
494  variables:
495    DISTRIBUTION_TAG: *distribution-tag-arm
496    MESA_ROOTFS_TAG: *kernel-rootfs
497
498.use-kernel+rootfs-x86_64:
499  variables:
500    DISTRIBUTION_TAG: *distribution-tag-x86_64
501    MESA_ROOTFS_TAG: *kernel-rootfs
502
503# x86_64 image with ARM64 & ARM32 kernel & rootfs for baremetal testing
504.debian/baremetal_arm_test:
505  extends:
506    - .fdo.container-build@debian
507    - .container
508    - .debian-container-version
509    # Don't want the .container rules
510    - .container+build-rules
511  variables:
512    FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${MESA_ROOTFS_TAG}--${KERNEL_TAG}--${MESA_TEMPLATES_COMMIT}"
513    ARTIFACTS_PREFIX: "https://${S3_HOST}/${S3_KERNEL_BUCKET}"
514    ARTIFACTS_SUFFIX: "${MESA_ROOTFS_TAG}--${KERNEL_TAG}--${MESA_ARTIFACTS_TAG}--${MESA_TEMPLATES_COMMIT}"
515    MESA_ARTIFACTS_TAG: *debian-arm64_build
516    MESA_ROOTFS_TAG: *kernel-rootfs
517
518debian/baremetal_arm32_test:
519  extends:
520    - .debian/baremetal_arm_test
521  needs:
522    - kernel+rootfs_arm32
523  variables:
524    MESA_IMAGE_TAG: &debian-arm32_test "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}"
525
526debian/baremetal_arm64_test:
527  extends:
528    - .debian/baremetal_arm_test
529  needs:
530    - kernel+rootfs_arm64
531  variables:
532    MESA_IMAGE_TAG: &debian-arm64_test "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}"
533
534.use-debian/baremetal_arm_test:
535  variables:
536    MESA_ROOTFS_TAG: *kernel-rootfs
537
538.use-debian/baremetal_arm32_test:
539  image: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${MESA_ROOTFS_TAG}--${KERNEL_TAG}--${MESA_TEMPLATES_COMMIT}"
540  extends:
541    - .use-debian/baremetal_arm_test
542  variables:
543    MESA_IMAGE_PATH: "debian/baremetal_arm32_test"
544    MESA_IMAGE_TAG: *debian-arm32_test
545  needs:
546    - debian/baremetal_arm_test
547
548.use-debian/baremetal_arm64_test:
549  image: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${MESA_ROOTFS_TAG}--${KERNEL_TAG}--${MESA_TEMPLATES_COMMIT}"
550  extends:
551    - .use-debian/baremetal_arm_test
552  variables:
553    MESA_IMAGE_PATH: "debian/baremetal_arm64_test"
554    MESA_IMAGE_TAG: *debian-arm64_test
555  needs:
556    - debian/baremetal_arm_test
557
558# Native Windows docker builds
559#
560# Unlike the above Linux-based builds - including MinGW builds which
561# cross-compile for Windows - which use the freedesktop ci-templates, we
562# cannot use the same scheme here. As Windows lacks support for
563# Docker-in-Docker, and Podman does not run natively on Windows, we have
564# to open-code much of the same ourselves.
565#
566# This is achieved by first running in a native Windows shell instance
567# (host PowerShell) in the container stage to build and push the image,
568# then in the build stage by executing inside Docker.
569
570.windows-docker-msvc:
571  variables:
572    MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}"
573    MESA_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/$MESA_IMAGE_PATH:${MESA_IMAGE_TAG}"
574  extends:
575    - .windows-docker-tags
576
577.windows_container_build:
578  inherit:
579    default: [retry]
580  extends:
581    - .container
582    - .windows-docker-msvc
583    - .windows-shell-tags
584  rules:
585    - !reference [.common-rules, rules]
586    - !reference [.microsoft-farm-container-rules, rules]
587    - !reference [.container+build-rules, rules]
588  variables:
589    GIT_STRATEGY: fetch # we do actually need the full repository though
590    MESA_BASE_IMAGE: None
591  script:
592    - .\.gitlab-ci\windows\mesa_container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $MESA_IMAGE $MESA_UPSTREAM_IMAGE ${DOCKERFILE} ${MESA_BASE_IMAGE}
593
594windows_msvc:
595  inherit:
596    default: [retry]
597  extends:
598    - .windows_container_build
599  variables:
600    MESA_IMAGE_PATH: &windows_msvc_image_path ${WINDOWS_X64_MSVC_PATH}
601    MESA_IMAGE_TAG: ${WINDOWS_X64_MSVC_TAG}
602    DOCKERFILE: Dockerfile_msvc
603    MESA_BASE_IMAGE: "mcr.microsoft.com/windows/server:ltsc2022"
604
605windows_build_msvc:
606  inherit:
607    default: [retry]
608  extends:
609    - .windows_container_build
610  rules:
611    - !reference [.common-rules, rules]
612    - !reference [.microsoft-farm-rules, rules]
613    - !reference [.container+build-rules, rules]
614  variables:
615    MESA_IMAGE_PATH: &windows_build_image_path ${WINDOWS_X64_BUILD_PATH}
616    MESA_IMAGE_TAG: &windows_build_image_tag ${WINDOWS_X64_MSVC_TAG}--${WINDOWS_X64_BUILD_TAG}
617    DOCKERFILE: Dockerfile_build
618    MESA_BASE_IMAGE_PATH: *windows_msvc_image_path
619    MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${WINDOWS_X64_MSVC_TAG}"
620  timeout: 2h 30m # LLVM takes ages
621  needs:
622    - windows_msvc
623
624windows_test_msvc:
625  inherit:
626    default: [retry]
627  extends:
628    - .windows_container_build
629  rules:
630    - !reference [.common-rules, rules]
631    - !reference [.microsoft-farm-rules, rules]
632    - !reference [.container+build-rules, rules]
633  variables:
634    MESA_IMAGE_PATH: &windows_test_image_path ${WINDOWS_X64_TEST_PATH}
635    MESA_IMAGE_TAG: &windows_test_image_tag ${WINDOWS_X64_MSVC_TAG}--${WINDOWS_X64_TEST_TAG}
636    DOCKERFILE: Dockerfile_test
637    MESA_BASE_IMAGE_PATH: *windows_msvc_image_path
638    MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${WINDOWS_X64_MSVC_TAG}"
639  timeout: 2h 30m
640  needs:
641    - windows_msvc
642
643.use-windows_build_msvc:
644  inherit:
645    default: [retry]
646  extends: .windows-docker-msvc
647  image: "$MESA_IMAGE"
648  variables:
649    MESA_IMAGE_PATH: *windows_build_image_path
650    MESA_IMAGE_TAG: *windows_build_image_tag
651  needs:
652    - windows_build_msvc
653
654.use-windows_test_msvc:
655  inherit:
656    default: [retry]
657  extends: .windows-docker-msvc
658  image: "$MESA_IMAGE"
659  variables:
660    MESA_IMAGE_PATH: *windows_test_image_path
661    MESA_IMAGE_TAG: *windows_test_image_tag
662