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