1 # Docker image tag helper templates
3 .incorporate-templates-commit:
5 FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${MESA_TEMPLATES_COMMIT}"
7 .incorporate-base-tag+templates-commit:
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}"
14 - .incorporate-templates-commit
16 MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${FDO_DISTRIBUTION_TAG}"
22 - .incorporate-base-tag+templates-commit
24 MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${FDO_DISTRIBUTION_TAG}"
27 # Build the CI docker images.
29 # MESA_IMAGE_TAG is the tag of the docker image used by later stage jobs. If the
30 # image doesn't exist yet, the container stage job generates it.
32 # In order to generate a new image, one should generally change the tag.
33 # While removing the image from the registry would also work, that's not
34 # recommended except for ephemeral images during development: Replacing
35 # an image after a significant amount of time might pull in newer
36 # versions of gcc/clang or other packages, which might break the build
37 # with older commits using the same tag.
39 # After merging a change resulting in generating a new image to the
40 # main repository, it's recommended to remove the image from the source
41 # repository's container registry, so that the image from the main
42 # repository's registry will be used there as well.
48 - .incorporate-templates-commit
50 FDO_DISTRIBUTION_VERSION: bullseye-slim
51 FDO_REPO_SUFFIX: $CI_JOB_NAME
52 FDO_DISTRIBUTION_EXEC: 'env FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash .gitlab-ci/container/${CI_JOB_NAME}.sh'
53 # no need to pull the whole repo to build the container image
59 - .incorporate-base-tag+templates-commit
60 # Don't want the .container rules
63 # Debian 11 based x86 build image base
64 debian/x86_build-base:
66 - .fdo.container-build@debian
69 MESA_IMAGE_TAG: &debian-x86_build-base ${DEBIAN_BASE_TAG}
71 .use-debian/x86_build-base:
73 - .fdo.container-build@debian
76 MESA_BASE_IMAGE: ${DEBIAN_X86_BUILD_BASE_IMAGE}
77 MESA_BASE_TAG: *debian-x86_build-base
78 MESA_ARTIFACTS_BASE_TAG: *debian-x86_build-base
80 - debian/x86_build-base
82 # Debian 11 based x86 main build image
85 - .use-debian/x86_build-base
87 MESA_IMAGE_TAG: &debian-x86_build ${DEBIAN_BUILD_TAG}
89 .use-debian/x86_build:
93 MESA_BASE_TAG: *debian-x86_build-base
94 MESA_IMAGE_PATH: ${DEBIAN_X86_BUILD_IMAGE_PATH}
95 MESA_IMAGE_TAG: *debian-x86_build
99 # Debian 11 based i386 cross-build image
102 - .use-debian/x86_build-base
104 MESA_IMAGE_TAG: &debian-i386_build ${DEBIAN_BUILD_TAG}
106 .use-debian/i386_build:
108 - .set-image-base-tag
110 MESA_BASE_TAG: *debian-x86_build-base
111 MESA_IMAGE_PATH: "debian/i386_build"
112 MESA_IMAGE_TAG: *debian-i386_build
116 # Debian 11 based ppc64el cross-build image
117 debian/ppc64el_build:
119 - .use-debian/x86_build-base
121 MESA_IMAGE_TAG: &debian-ppc64el_build ${DEBIAN_BUILD_TAG}
123 .use-debian/ppc64el_build:
125 - .set-image-base-tag
127 MESA_BASE_TAG: *debian-x86_build-base
128 MESA_IMAGE_PATH: "debian/ppc64el_build"
129 MESA_IMAGE_TAG: *debian-ppc64el_build
131 - debian/ppc64el_build
133 # Debian 11 based s390x cross-build image
136 - .use-debian/x86_build-base
138 MESA_IMAGE_TAG: &debian-s390x_build ${DEBIAN_BUILD_TAG}
140 .use-debian/s390x_build:
142 - .set-image-base-tag
144 MESA_BASE_TAG: *debian-x86_build-base
145 MESA_IMAGE_PATH: "debian/s390x_build"
146 MESA_IMAGE_TAG: *debian-s390x_build
150 # Android NDK cross-build image
151 debian/android_build:
153 - .use-debian/x86_build-base
155 MESA_IMAGE_TAG: &debian-android_build ${DEBIAN_BUILD_TAG}
157 .use-debian/android_build:
159 - .set-image-base-tag
161 MESA_BASE_TAG: *debian-x86_build-base
162 MESA_IMAGE_PATH: "debian/android_build"
163 MESA_IMAGE_TAG: *debian-android_build
165 - debian/android_build
167 # Debian 11 based x86 test image base
168 debian/x86_test-base:
169 extends: debian/x86_build-base
171 MESA_IMAGE_TAG: &debian-x86_test-base ${DEBIAN_BASE_TAG}
173 .use-debian/x86_test-base:
175 - .fdo.container-build@debian
178 MESA_BASE_IMAGE: ${DEBIAN_X86_TEST_BASE_IMAGE}
179 MESA_BASE_TAG: *debian-x86_test-base
181 - debian/x86_test-base
183 # Debian 11 based x86 test image for GL
185 extends: .use-debian/x86_test-base
187 FDO_DISTRIBUTION_EXEC: 'env KERNEL_URL=${KERNEL_URL} FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash .gitlab-ci/container/${CI_JOB_NAME}.sh'
188 KERNEL_URL: &kernel-rootfs-url "https://gitlab.freedesktop.org/gfx-ci/linux/-/archive/v5.17-for-mesa-ci-b78f7870d97b/linux-v5.17-for-mesa-ci-b78f7870d97b.tar.bz2"
189 MESA_IMAGE_TAG: &debian-x86_test-gl ${DEBIAN_X86_TEST_GL_TAG}
191 .use-debian/x86_test-gl:
193 - .set-image-base-tag
195 MESA_BASE_TAG: *debian-x86_test-base
196 MESA_IMAGE_PATH: ${DEBIAN_X86_TEST_IMAGE_PATH}
197 MESA_IMAGE_TAG: *debian-x86_test-gl
201 # Debian 11 based x86 test image for VK
203 extends: .use-debian/x86_test-base
205 MESA_IMAGE_TAG: &debian-x86_test-vk ${DEBIAN_X86_TEST_VK_TAG}
207 .use-debian/x86_test-vk:
209 - .set-image-base-tag
211 MESA_BASE_TAG: *debian-x86_test-base
212 MESA_IMAGE_PATH: "debian/x86_test-vk"
213 MESA_IMAGE_TAG: *debian-x86_test-vk
217 # Debian 11 based ARM build image
220 - .fdo.container-build@debian
225 MESA_IMAGE_TAG: &debian-arm_build ${DEBIAN_BASE_TAG}
227 .use-debian/arm_build:
231 MESA_IMAGE_PATH: "debian/arm_build"
232 MESA_IMAGE_TAG: *debian-arm_build
233 MESA_ARTIFACTS_TAG: *debian-arm_build
238 # Fedora 34 based x86 build image
241 - .fdo.container-build@fedora
244 FDO_DISTRIBUTION_VERSION: 34
245 MESA_IMAGE_TAG: &fedora-x86_build ${FEDORA_X86_BUILD_TAG}
247 .use-fedora/x86_build:
251 MESA_IMAGE_PATH: "fedora/x86_build"
252 MESA_IMAGE_TAG: *fedora-x86_build
263 KERNEL_URL: *kernel-rootfs-url
264 MESA_ROOTFS_TAG: &kernel-rootfs ${KERNEL_ROOTFS_TAG}
265 DISTRIBUTION_TAG: &distribution-tag-arm "${MESA_ROOTFS_TAG}--${MESA_ARTIFACTS_TAG}--${MESA_TEMPLATES_COMMIT}"
267 - .gitlab-ci/container/lava_build.sh
271 - .use-debian/x86_build-base
273 image: "$FDO_BASE_IMAGE"
276 DISTRIBUTION_TAG: &distribution-tag-amd64 "${MESA_ROOTFS_TAG}--${MESA_ARTIFACTS_BASE_TAG}--${MESA_TEMPLATES_COMMIT}"
280 - .use-debian/arm_build
289 - kernel+rootfs_arm64
293 # Cannot use anchors defined here from included files, so use extends: instead
294 .use-kernel+rootfs-arm:
296 DISTRIBUTION_TAG: *distribution-tag-arm
297 MESA_ROOTFS_TAG: *kernel-rootfs
299 .use-kernel+rootfs-amd64:
301 DISTRIBUTION_TAG: *distribution-tag-amd64
302 MESA_ROOTFS_TAG: *kernel-rootfs
304 # x86 image with ARM64 & armhf kernel & rootfs for baremetal testing
307 - .fdo.container-build@debian
309 # Don't want the .container rules
312 - kernel+rootfs_arm64
313 - kernel+rootfs_armhf
315 FDO_DISTRIBUTION_EXEC: 'env ARTIFACTS_PREFIX=https://${MINIO_HOST}/mesa-lava ARTIFACTS_SUFFIX=${MESA_ROOTFS_TAG}--${MESA_ARM_BUILD_TAG}--${MESA_TEMPLATES_COMMIT} CI_PROJECT_PATH=${CI_PROJECT_PATH} FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} FDO_UPSTREAM_REPO=${FDO_UPSTREAM_REPO} bash .gitlab-ci/container/${CI_JOB_NAME}.sh'
316 FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${MESA_ROOTFS_TAG}--${MESA_ARM_BUILD_TAG}--${MESA_TEMPLATES_COMMIT}"
317 MESA_ARM_BUILD_TAG: *debian-arm_build
318 MESA_IMAGE_TAG: &debian-arm_test ${DEBIAN_BASE_TAG}
319 MESA_ROOTFS_TAG: *kernel-rootfs
321 .use-debian/arm_test:
322 image: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${MESA_ROOTFS_TAG}--${MESA_ARM_BUILD_TAG}--${MESA_TEMPLATES_COMMIT}"
324 MESA_ARM_BUILD_TAG: *debian-arm_build
325 MESA_IMAGE_PATH: "debian/arm_test"
326 MESA_IMAGE_TAG: *debian-arm_test
327 MESA_ROOTFS_TAG: *kernel-rootfs
331 # Native Windows docker builds
333 # Unlike the above Linux-based builds - including MinGW builds which
334 # cross-compile for Windows - which use the freedesktop ci-templates, we
335 # cannot use the same scheme here. As Windows lacks support for
336 # Docker-in-Docker, and Podman does not run natively on Windows, we have
337 # to open-code much of the same ourselves.
339 # This is achieved by first running in a native Windows shell instance
340 # (host PowerShell) in the container stage to build and push the image,
341 # then in the build stage by executing inside Docker.
343 .windows-docker-vs2019:
345 MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}"
346 MESA_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/$MESA_IMAGE_PATH:${MESA_IMAGE_TAG}"
348 .windows_container_build:
353 - .windows-docker-vs2019
355 - if: '$MICROSOFT_FARM == "offline"'
357 - !reference [.container-rules, rules]
359 GIT_STRATEGY: fetch # we do actually need the full repository though
360 MESA_BASE_IMAGE: None
367 - .\.gitlab-ci\windows\mesa_container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $MESA_IMAGE $MESA_UPSTREAM_IMAGE ${DOCKERFILE} ${MESA_BASE_IMAGE}
369 windows_build_vs2019:
373 - .windows_container_build
375 MESA_IMAGE_PATH: &windows_build_image_path ${WINDOWS_X64_BUILD_PATH}
376 MESA_IMAGE_TAG: &windows_build_image_tag ${WINDOWS_X64_BUILD_TAG}
377 DOCKERFILE: Dockerfile_build
378 timeout: 2h 30m # LLVM takes ages
384 - .windows_container_build
386 - if: '$MICROSOFT_FARM == "offline"'
388 - !reference [.ci-run-policy, rules]
390 MESA_IMAGE_PATH: &windows_test_image_path ${WINDOWS_X64_TEST_PATH}
391 MESA_IMAGE_TAG: &windows_test_image_tag ${WINDOWS_X64_BUILD_TAG}--${WINDOWS_X64_TEST_TAG}
392 DOCKERFILE: Dockerfile_test
393 # Right now this only needs the VS install to get DXIL.dll. Maybe see about decoupling this at some point
394 MESA_BASE_IMAGE_PATH: *windows_build_image_path
395 MESA_BASE_IMAGE_TAG: *windows_build_image_tag
396 MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${MESA_BASE_IMAGE_TAG}"
398 - windows_build_vs2019
400 .use-windows_build_vs2019:
403 extends: .windows-docker-vs2019
406 MESA_IMAGE_PATH: *windows_build_image_path
407 MESA_IMAGE_TAG: *windows_build_image_tag
409 - windows_build_vs2019
411 .use-windows_test_vs2019:
414 extends: .windows-docker-vs2019
417 MESA_IMAGE_PATH: *windows_test_image_path
418 MESA_IMAGE_TAG: *windows_test_image_tag