| # Docker image tag helper templates |
| |
| .incorporate-templates-commit: |
| variables: |
| FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${MESA_TEMPLATES_COMMIT}" |
| |
| .incorporate-base-tag+templates-commit: |
| variables: |
| FDO_BASE_IMAGE: "${CI_REGISTRY_IMAGE}/${MESA_BASE_IMAGE}:${MESA_BASE_TAG}--${MESA_TEMPLATES_COMMIT}" |
| FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${MESA_BASE_TAG}--${MESA_TEMPLATES_COMMIT}" |
| |
| .set-image: |
| extends: |
| - .incorporate-templates-commit |
| variables: |
| MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${FDO_DISTRIBUTION_TAG}" |
| image: "$MESA_IMAGE" |
| |
| .set-image-base-tag: |
| extends: |
| - .set-image |
| - .incorporate-base-tag+templates-commit |
| variables: |
| MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${FDO_DISTRIBUTION_TAG}" |
| |
| .use-wine: |
| variables: |
| WINEPATH: "/usr/x86_64-w64-mingw32/bin;/usr/x86_64-w64-mingw32/lib;/usr/lib/gcc/x86_64-w64-mingw32/10-posix;c:/windows;c:/windows/system32" |
| |
| # Build the CI docker images. |
| # |
| # MESA_IMAGE_TAG is the tag of the docker image used by later stage jobs. If the |
| # image doesn't exist yet, the container stage job generates it. |
| # |
| # In order to generate a new image, one should generally change the tag. |
| # While removing the image from the registry would also work, that's not |
| # recommended except for ephemeral images during development: Replacing |
| # an image after a significant amount of time might pull in newer |
| # versions of gcc/clang or other packages, which might break the build |
| # with older commits using the same tag. |
| # |
| # After merging a change resulting in generating a new image to the |
| # main repository, it's recommended to remove the image from the source |
| # repository's container registry, so that the image from the main |
| # repository's registry will be used there as well. |
| |
| .container: |
| stage: container |
| extends: |
| - .container-rules |
| - .incorporate-templates-commit |
| - .use-wine |
| variables: |
| FDO_DISTRIBUTION_VERSION: bullseye-slim |
| FDO_REPO_SUFFIX: $CI_JOB_NAME |
| FDO_DISTRIBUTION_EXEC: 'bash .gitlab-ci/container/${CI_JOB_NAME}.sh' |
| # no need to pull the whole repo to build the container image |
| GIT_STRATEGY: none |
| |
| .use-base-image: |
| extends: |
| - .container |
| - .incorporate-base-tag+templates-commit |
| # Don't want the .container rules |
| - .build-rules |
| |
| # Debian 11 based x86 build image base |
| debian/x86_build-base: |
| extends: |
| - .fdo.container-build@debian |
| - .container |
| variables: |
| MESA_IMAGE_TAG: &debian-x86_build-base ${DEBIAN_BASE_TAG} |
| |
| .use-debian/x86_build-base: |
| extends: |
| - .fdo.container-build@debian |
| - .use-base-image |
| variables: |
| MESA_BASE_IMAGE: ${DEBIAN_X86_BUILD_BASE_IMAGE} |
| MESA_BASE_TAG: *debian-x86_build-base |
| MESA_ARTIFACTS_BASE_TAG: *debian-x86_build-base |
| needs: |
| - debian/x86_build-base |
| |
| # Debian 11 based x86 main build image |
| debian/x86_build: |
| extends: |
| - .use-debian/x86_build-base |
| variables: |
| MESA_IMAGE_TAG: &debian-x86_build ${DEBIAN_BUILD_TAG} |
| |
| .use-debian/x86_build: |
| extends: |
| - .set-image-base-tag |
| variables: |
| MESA_BASE_TAG: *debian-x86_build-base |
| MESA_IMAGE_PATH: ${DEBIAN_X86_BUILD_IMAGE_PATH} |
| MESA_IMAGE_TAG: *debian-x86_build |
| needs: |
| - debian/x86_build |
| |
| # Debian 11 based i386 cross-build image |
| debian/i386_build: |
| extends: |
| - .use-debian/x86_build-base |
| variables: |
| MESA_IMAGE_TAG: &debian-i386_build ${DEBIAN_BUILD_TAG} |
| |
| .use-debian/i386_build: |
| extends: |
| - .set-image-base-tag |
| variables: |
| MESA_BASE_TAG: *debian-x86_build-base |
| MESA_IMAGE_PATH: "debian/i386_build" |
| MESA_IMAGE_TAG: *debian-i386_build |
| needs: |
| - debian/i386_build |
| |
| # Debian 11 based x86-mingw cross main build image |
| debian/x86_build-mingw: |
| extends: |
| - .use-debian/x86_build-base |
| variables: |
| MESA_IMAGE_TAG: &debian-x86_build_mingw ${DEBIAN_BUILD_MINGW_TAG} |
| |
| .use-debian/x86_build_mingw: |
| extends: |
| - .set-image-base-tag |
| variables: |
| MESA_BASE_TAG: *debian-x86_build-base |
| MESA_IMAGE_PATH: ${DEBIAN_X86_BUILD_MINGW_IMAGE_PATH} |
| MESA_IMAGE_TAG: *debian-x86_build_mingw |
| needs: |
| - debian/x86_build-mingw |
| |
| # Debian 11 based ppc64el cross-build image |
| debian/ppc64el_build: |
| extends: |
| - .use-debian/x86_build-base |
| variables: |
| MESA_IMAGE_TAG: &debian-ppc64el_build ${DEBIAN_BUILD_TAG} |
| |
| .use-debian/ppc64el_build: |
| extends: |
| - .set-image-base-tag |
| variables: |
| MESA_BASE_TAG: *debian-x86_build-base |
| MESA_IMAGE_PATH: "debian/ppc64el_build" |
| MESA_IMAGE_TAG: *debian-ppc64el_build |
| needs: |
| - debian/ppc64el_build |
| |
| # Debian 11 based s390x cross-build image |
| debian/s390x_build: |
| extends: |
| - .use-debian/x86_build-base |
| variables: |
| MESA_IMAGE_TAG: &debian-s390x_build ${DEBIAN_BUILD_TAG} |
| |
| .use-debian/s390x_build: |
| extends: |
| - .set-image-base-tag |
| variables: |
| MESA_BASE_TAG: *debian-x86_build-base |
| MESA_IMAGE_PATH: "debian/s390x_build" |
| MESA_IMAGE_TAG: *debian-s390x_build |
| needs: |
| - debian/s390x_build |
| |
| # Android NDK cross-build image |
| debian/android_build: |
| extends: |
| - .use-debian/x86_build-base |
| variables: |
| MESA_IMAGE_TAG: &debian-android_build ${DEBIAN_BUILD_TAG} |
| |
| .use-debian/android_build: |
| extends: |
| - .set-image-base-tag |
| variables: |
| MESA_BASE_TAG: *debian-x86_build-base |
| MESA_IMAGE_PATH: "debian/android_build" |
| MESA_IMAGE_TAG: *debian-android_build |
| needs: |
| - debian/android_build |
| |
| # Debian 11 based x86 test image base |
| debian/x86_test-base: |
| extends: debian/x86_build-base |
| variables: |
| KERNEL_URL: &kernel-rootfs-url "https://gitlab.freedesktop.org/gfx-ci/linux/-/archive/v5.19-for-mesa-ci-d4efddaec194/linux-v5.17-for-mesa-ci-b78f7870d97b.tar.bz2" |
| MESA_IMAGE_TAG: &debian-x86_test-base ${DEBIAN_BASE_TAG} |
| |
| .use-debian/x86_test-base: |
| extends: |
| - .fdo.container-build@debian |
| - .use-base-image |
| variables: |
| MESA_BASE_IMAGE: ${DEBIAN_X86_TEST_BASE_IMAGE} |
| MESA_BASE_TAG: *debian-x86_test-base |
| needs: |
| - debian/x86_test-base |
| |
| # Debian 11 based x86 test image for GL |
| debian/x86_test-gl: |
| extends: .use-debian/x86_test-base |
| variables: |
| MESA_IMAGE_TAG: &debian-x86_test-gl ${DEBIAN_X86_TEST_GL_TAG} |
| |
| .use-debian/x86_test-gl: |
| extends: |
| - .set-image-base-tag |
| variables: |
| MESA_BASE_TAG: *debian-x86_test-base |
| MESA_IMAGE_PATH: ${DEBIAN_X86_TEST_IMAGE_PATH} |
| MESA_IMAGE_TAG: *debian-x86_test-gl |
| needs: |
| - debian/x86_test-gl |
| |
| # Debian 11 based x86 test image for VK |
| debian/x86_test-vk: |
| extends: .use-debian/x86_test-base |
| variables: |
| MESA_IMAGE_TAG: &debian-x86_test-vk ${DEBIAN_X86_TEST_VK_TAG} |
| |
| .use-debian/x86_test-vk: |
| extends: |
| - .set-image-base-tag |
| variables: |
| MESA_BASE_TAG: *debian-x86_test-base |
| MESA_IMAGE_PATH: "debian/x86_test-vk" |
| MESA_IMAGE_TAG: *debian-x86_test-vk |
| needs: |
| - debian/x86_test-vk |
| |
| # Debian 11 based ARM build image |
| debian/arm_build: |
| extends: |
| - .fdo.container-build@debian |
| - .container |
| tags: |
| - aarch64 |
| variables: |
| MESA_IMAGE_TAG: &debian-arm_build ${DEBIAN_BASE_TAG} |
| |
| .use-debian/arm_build: |
| extends: |
| - .set-image |
| variables: |
| MESA_IMAGE_PATH: "debian/arm_build" |
| MESA_IMAGE_TAG: *debian-arm_build |
| MESA_ARTIFACTS_TAG: *debian-arm_build |
| needs: |
| - debian/arm_build |
| |
| |
| # Fedora 34 based x86 build image |
| fedora/x86_build: |
| extends: |
| - .fdo.container-build@fedora |
| - .container |
| variables: |
| FDO_DISTRIBUTION_VERSION: 34 |
| MESA_IMAGE_TAG: &fedora-x86_build ${FEDORA_X86_BUILD_TAG} |
| |
| .use-fedora/x86_build: |
| extends: |
| - .set-image |
| variables: |
| MESA_IMAGE_PATH: "fedora/x86_build" |
| MESA_IMAGE_TAG: *fedora-x86_build |
| needs: |
| - fedora/x86_build |
| |
| |
| .kernel+rootfs: |
| extends: |
| - .build-rules |
| stage: container |
| variables: |
| GIT_STRATEGY: fetch |
| KERNEL_URL: *kernel-rootfs-url |
| MESA_ROOTFS_TAG: &kernel-rootfs ${KERNEL_ROOTFS_TAG} |
| DISTRIBUTION_TAG: &distribution-tag-arm "${MESA_ROOTFS_TAG}--${MESA_ARTIFACTS_TAG}--${MESA_TEMPLATES_COMMIT}" |
| script: |
| - .gitlab-ci/container/lava_build.sh |
| |
| kernel+rootfs_amd64: |
| extends: |
| - .use-debian/x86_build-base |
| - .kernel+rootfs |
| image: "$FDO_BASE_IMAGE" |
| variables: |
| DEBIAN_ARCH: "amd64" |
| DISTRIBUTION_TAG: &distribution-tag-amd64 "${MESA_ROOTFS_TAG}--${MESA_ARTIFACTS_BASE_TAG}--${MESA_TEMPLATES_COMMIT}" |
| |
| kernel+rootfs_arm64: |
| extends: |
| - .use-debian/arm_build |
| - .kernel+rootfs |
| tags: |
| - aarch64 |
| variables: |
| DEBIAN_ARCH: "arm64" |
| |
| kernel+rootfs_armhf: |
| extends: |
| - kernel+rootfs_arm64 |
| variables: |
| DEBIAN_ARCH: "armhf" |
| |
| # Cannot use anchors defined here from included files, so use extends: instead |
| .use-kernel+rootfs-arm: |
| variables: |
| DISTRIBUTION_TAG: *distribution-tag-arm |
| MESA_ROOTFS_TAG: *kernel-rootfs |
| |
| .use-kernel+rootfs-amd64: |
| variables: |
| DISTRIBUTION_TAG: *distribution-tag-amd64 |
| MESA_ROOTFS_TAG: *kernel-rootfs |
| |
| # x86 image with ARM64 & armhf kernel & rootfs for baremetal testing |
| debian/arm_test: |
| extends: |
| - .fdo.container-build@debian |
| - .container |
| # Don't want the .container rules |
| - .build-rules |
| needs: |
| - kernel+rootfs_arm64 |
| - kernel+rootfs_armhf |
| variables: |
| FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${MESA_ROOTFS_TAG}--${MESA_ARM_BUILD_TAG}--${MESA_TEMPLATES_COMMIT}" |
| ARTIFACTS_PREFIX: "https://${MINIO_HOST}/mesa-lava" |
| ARTIFACTS_SUFFIX: "${MESA_ROOTFS_TAG}--${MESA_ARM_BUILD_TAG}--${MESA_TEMPLATES_COMMIT}" |
| MESA_ARM_BUILD_TAG: *debian-arm_build |
| MESA_IMAGE_TAG: &debian-arm_test ${DEBIAN_BASE_TAG} |
| MESA_ROOTFS_TAG: *kernel-rootfs |
| |
| .use-debian/arm_test: |
| image: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${MESA_ROOTFS_TAG}--${MESA_ARM_BUILD_TAG}--${MESA_TEMPLATES_COMMIT}" |
| variables: |
| MESA_ARM_BUILD_TAG: *debian-arm_build |
| MESA_IMAGE_PATH: "debian/arm_test" |
| MESA_IMAGE_TAG: *debian-arm_test |
| MESA_ROOTFS_TAG: *kernel-rootfs |
| needs: |
| - debian/arm_test |
| |
| # Native Windows docker builds |
| # |
| # Unlike the above Linux-based builds - including MinGW builds which |
| # cross-compile for Windows - which use the freedesktop ci-templates, we |
| # cannot use the same scheme here. As Windows lacks support for |
| # Docker-in-Docker, and Podman does not run natively on Windows, we have |
| # to open-code much of the same ourselves. |
| # |
| # This is achieved by first running in a native Windows shell instance |
| # (host PowerShell) in the container stage to build and push the image, |
| # then in the build stage by executing inside Docker. |
| |
| .windows-docker-vs2019: |
| variables: |
| MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}" |
| MESA_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/$MESA_IMAGE_PATH:${MESA_IMAGE_TAG}" |
| |
| .windows_container_build: |
| inherit: |
| default: [retry] |
| extends: |
| - .container |
| - .windows-docker-vs2019 |
| rules: |
| - if: '$MICROSOFT_FARM == "offline"' |
| when: never |
| - !reference [.container-rules, rules] |
| variables: |
| GIT_STRATEGY: fetch # we do actually need the full repository though |
| MESA_BASE_IMAGE: None |
| tags: |
| - windows |
| - shell |
| - "2022" |
| - mesa |
| script: |
| - .\.gitlab-ci\windows\mesa_container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $MESA_IMAGE $MESA_UPSTREAM_IMAGE ${DOCKERFILE} ${MESA_BASE_IMAGE} |
| |
| windows_vs2019: |
| inherit: |
| default: [retry] |
| extends: |
| - .windows_container_build |
| variables: |
| MESA_IMAGE_PATH: &windows_vs_image_path ${WINDOWS_X64_VS_PATH} |
| MESA_IMAGE_TAG: &windows_vs_image_tag ${WINDOWS_X64_VS_TAG} |
| DOCKERFILE: Dockerfile_vs |
| MESA_BASE_IMAGE: "mcr.microsoft.com/windows/server:ltsc2022" |
| |
| windows_build_vs2019: |
| inherit: |
| default: [retry] |
| extends: |
| - .windows_container_build |
| rules: |
| - if: '$MICROSOFT_FARM == "offline"' |
| when: never |
| - !reference [.build-rules, rules] |
| variables: |
| MESA_IMAGE_PATH: &windows_build_image_path ${WINDOWS_X64_BUILD_PATH} |
| MESA_IMAGE_TAG: &windows_build_image_tag ${MESA_BASE_IMAGE_TAG}--${WINDOWS_X64_BUILD_TAG} |
| DOCKERFILE: Dockerfile_build |
| MESA_BASE_IMAGE_PATH: *windows_vs_image_path |
| MESA_BASE_IMAGE_TAG: *windows_vs_image_tag |
| MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${MESA_BASE_IMAGE_TAG}" |
| timeout: 2h 30m # LLVM takes ages |
| needs: |
| - windows_vs2019 |
| |
| windows_test_vs2019: |
| inherit: |
| default: [retry] |
| extends: |
| - .windows_container_build |
| rules: |
| - if: '$MICROSOFT_FARM == "offline"' |
| when: never |
| - !reference [.build-rules, rules] |
| variables: |
| MESA_IMAGE_PATH: &windows_test_image_path ${WINDOWS_X64_TEST_PATH} |
| MESA_IMAGE_TAG: &windows_test_image_tag ${MESA_BASE_IMAGE_TAG}--${WINDOWS_X64_TEST_TAG} |
| DOCKERFILE: Dockerfile_test |
| MESA_BASE_IMAGE_PATH: *windows_vs_image_path |
| MESA_BASE_IMAGE_TAG: *windows_vs_image_tag |
| MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${MESA_BASE_IMAGE_TAG}" |
| needs: |
| - windows_vs2019 |
| |
| .use-windows_build_vs2019: |
| inherit: |
| default: [retry] |
| extends: .windows-docker-vs2019 |
| image: "$MESA_IMAGE" |
| variables: |
| MESA_IMAGE_PATH: *windows_build_image_path |
| MESA_IMAGE_TAG: *windows_build_image_tag |
| MESA_BASE_IMAGE_TAG: *windows_vs_image_tag |
| needs: |
| - windows_build_vs2019 |
| |
| .use-windows_test_vs2019: |
| inherit: |
| default: [retry] |
| extends: .windows-docker-vs2019 |
| image: "$MESA_IMAGE" |
| variables: |
| MESA_IMAGE_PATH: *windows_test_image_path |
| MESA_IMAGE_TAG: *windows_test_image_tag |
| MESA_BASE_IMAGE_TAG: *windows_vs_image_tag |