# 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