diff --git a/.gitlab-ci/container/alpine/gitlab-ci.yml b/.gitlab-ci/container/alpine/gitlab-ci.yml new file mode 100644 index 00000000000..9b2e41fc99c --- /dev/null +++ b/.gitlab-ci/container/alpine/gitlab-ci.yml @@ -0,0 +1,68 @@ +# Build the CI Alpine 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. + +# Alpine based x86_64 build image +.alpine/x86_64_build-base: + extends: + - .fdo.container-build@alpine + - .container + variables: + FDO_DISTRIBUTION_VERSION: "3.21" + FDO_BASE_IMAGE: alpine:$FDO_DISTRIBUTION_VERSION # since cbuild ignores it + +# Alpine based x86_64 build image +alpine/x86_64_build: + extends: + - .alpine/x86_64_build-base + variables: + MESA_IMAGE_TAG: &alpine-x86_64_build ${ALPINE_X86_64_BUILD_TAG} + LLVM_VERSION: &alpine-llvm_version 19 + rules: + - !reference [.container, rules] + # Note: the next three lines must remain in that order, so that the rules + # in `linkcheck-docs` catch nightly pipelines before the rules in `deploy-docs` + # exclude them. + - !reference [linkcheck-docs, rules] + - !reference [deploy-docs, rules] + - !reference [test-docs, rules] + +.use-alpine/x86_64_build: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 + extends: + - .set-image + variables: + MESA_IMAGE_PATH: "alpine/x86_64_build" + MESA_IMAGE_TAG: *alpine-x86_64_build + LLVM_VERSION: *alpine-llvm_version + needs: + - job: alpine/x86_64_build + optional: true + +# Alpine based x86_64 image for LAVA SSH dockerized client +alpine/x86_64_lava_ssh_client: + extends: + - .alpine/x86_64_build-base + variables: + MESA_IMAGE_TAG: &alpine-x86_64_lava_ssh_client ${ALPINE_X86_64_LAVA_SSH_TAG} + +# Alpine based x86_64 image to run LAVA jobs +alpine/x86_64_lava-trigger: + extends: + - .alpine/x86_64_build-base + variables: + MESA_IMAGE_TAG: &alpine-x86_64_lava_trigger ${ALPINE_X86_64_LAVA_TRIGGER_TAG} diff --git a/.gitlab-ci/container/debian/gitlab-ci.yml b/.gitlab-ci/container/debian/gitlab-ci.yml new file mode 100644 index 00000000000..c9c6cc01c9e --- /dev/null +++ b/.gitlab-ci/container/debian/gitlab-ci.yml @@ -0,0 +1,536 @@ +# Build the CI Debian 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. + +.debian-container-version: + variables: + FDO_DISTRIBUTION_VERSION: bookworm-slim + +.debian-container: + extends: + - .fdo.container-build@debian + - .container + - .debian-container-version + +# Debian based x86_64 build image base +debian/x86_64_build-base: + extends: + - .debian-container + variables: + MESA_IMAGE_TAG: &debian-x86_64_build-base "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" + LLVM_VERSION: &debian-x86_64-llvm 19 + +.use-debian/x86_64_build-base: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 + extends: + - .fdo.container-build@debian + - .debian-container-version + - .use-base-image + variables: + MESA_BASE_IMAGE: "debian/x86_64_build-base" + MESA_BASE_TAG: *debian-x86_64_build-base + LLVM_VERSION: *debian-x86_64-llvm + needs: + - job: debian/x86_64_build-base + optional: true + +# Debian based x86_64 main build image +debian/x86_64_build: + extends: + - .use-debian/x86_64_build-base + variables: + MESA_IMAGE_TAG: &debian-x86_64_build ${DEBIAN_BUILD_TAG} + LLVM_VERSION: *debian-x86_64-llvm + +.use-debian/x86_64_build: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 + extends: + - .set-image-base-tag + variables: + MESA_BASE_TAG: *debian-x86_64_build-base + MESA_IMAGE_PATH: "debian/x86_64_build" + MESA_IMAGE_TAG: *debian-x86_64_build + LLVM_VERSION: *debian-x86_64-llvm + needs: + - job: debian/x86_64_build + optional: true + +# Debian based x86_32 cross-build image +debian/x86_32_build: + extends: + - .use-debian/x86_64_build-base + variables: + MESA_IMAGE_TAG: &debian-x86_32_build ${DEBIAN_BUILD_TAG} + +.use-debian/x86_32_build: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 + extends: + - .set-image-base-tag + variables: + MESA_BASE_TAG: *debian-x86_64_build-base + MESA_IMAGE_PATH: "debian/x86_32_build" + MESA_IMAGE_TAG: *debian-x86_32_build + LLVM_VERSION: *debian-x86_64-llvm + needs: + - job: debian/x86_32_build + optional: true + +# Debian based ppc64el cross-build image +debian/ppc64el_build: + extends: + - .use-debian/x86_64_build-base + variables: + MESA_IMAGE_TAG: &debian-ppc64el_build ${DEBIAN_BUILD_TAG} + LLVM_VERSION: &debian-ppc64el-llvm 15 # no LLVM packages for PPC + +.use-debian/ppc64el_build: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 + extends: + - .set-image-base-tag + variables: + MESA_BASE_TAG: *debian-x86_64_build-base + MESA_IMAGE_PATH: "debian/ppc64el_build" + MESA_IMAGE_TAG: *debian-ppc64el_build + LLVM_VERSION: *debian-ppc64el-llvm + needs: + - job: debian/ppc64el_build + optional: true + +# Debian based s390x cross-build image +debian/s390x_build: + extends: + - .use-debian/x86_64_build-base + variables: + MESA_IMAGE_TAG: &debian-s390x_build ${DEBIAN_BUILD_TAG} + LLVM_VERSION: &debian-s390x-llvm 19 + +.use-debian/s390x_build: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 + extends: + - .set-image-base-tag + variables: + MESA_BASE_TAG: *debian-x86_64_build-base + MESA_IMAGE_PATH: "debian/s390x_build" + MESA_IMAGE_TAG: *debian-s390x_build + LLVM_VERSION: *debian-s390x-llvm + needs: + - job: debian/s390x_build + optional: true + +# Android NDK cross-build image +.android-variables: + variables: + ANDROID_VERSION: 14 + ANDROID_NDK_VERSION: "r27c" + ANDROID_SDK_VERSION: 34 + ANDROID_LLVM_VERSION: llvmorg-19.1.7 + ANDROID_LLVM_ARTIFACT_NAME: android-x86_64-llvm-20250324 + # This can be confusing: LLVM_VERSION refers to the host LLVM toolchain + # used (LLVM 19 in our Debian system), but ANDROID_LLVM_VERSION refers to + # the cross-compiling LLVM toolchain used to build for the Android system. + LLVM_VERSION: &debian-android-llvm 19 + CUTTLEFISH_PROJECT_PATH: ao2/aosp-manifest + CUTTLEFISH_BUILD_VERSION_TAGS: mesa-venus + CUTTLEFISH_BUILD_NUMBER: 20250506.001 + AOSP_KERNEL_PROJECT_PATH: ao2/aosp-kernel-manifest + AOSP_KERNEL_BUILD_VERSION_TAGS: common-android14-6.1-venus + AOSP_KERNEL_BUILD_NUMBER: 20241107.001 + +debian/android_build: + extends: + - .android-variables + - .use-debian/x86_64_build-base + variables: + MESA_IMAGE_TAG: &debian-android_build ${DEBIAN_BUILD_TAG} + +.use-debian/android_build: + extends: + - .android-variables + - .set-image-base-tag + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 + variables: + MESA_BASE_TAG: *debian-x86_64_build-base + MESA_IMAGE_PATH: "debian/android_build" + MESA_IMAGE_TAG: *debian-android_build + needs: + - job: debian/android_build + optional: true + +# Debian based ARM build image +debian/arm64_build: + extends: + - .fdo.container-build@debian + - .container + - .debian-container-version + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 + variables: + MESA_IMAGE_TAG: &debian-arm64_build "${DEBIAN_BUILD_TAG}--${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" + LLVM_VERSION: &debian-arm64-llvm 19 + +.use-debian/arm64_build: + extends: + - .set-image + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 + variables: + MESA_IMAGE_PATH: "debian/arm64_build" + MESA_IMAGE_TAG: *debian-arm64_build + MESA_ARTIFACTS_TAG: *debian-arm64_build + LLVM_VERSION: *debian-arm64-llvm + needs: + - job: debian/arm64_build + optional: true + + +# Debian based x86_64 test image base +debian/x86_64_test-base: + extends: + - .debian-container + - .container-builds-base + variables: + MESA_IMAGE_TAG: &debian-x86_64_test-base "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" + LLVM_VERSION: *debian-x86_64-llvm + +.use-debian/x86_64_test-base: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 + extends: + - .fdo.container-build@debian + - .debian-container-version + - .use-base-image + variables: + MESA_BASE_IMAGE: "debian/x86_64_test-base" + MESA_BASE_TAG: *debian-x86_64_test-base + LLVM_VERSION: *debian-x86_64-llvm + needs: + - job: debian/x86_64_test-base + optional: true + +# Debian based ARMv7/armhf test image base +debian/arm32_test-base: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 + extends: + - .debian-container + - .container-builds-base + variables: + MESA_IMAGE_TAG: &debian-arm32_test-base "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" + LLVM_VERSION: *debian-arm64-llvm + FDO_DISTRIBUTION_PLATFORM: "linux/arm/v7" + +.use-debian/arm32_test-base: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 + extends: + - .fdo.container-build@debian + - .debian-container-version + - .use-base-image + variables: + MESA_BASE_IMAGE: "debian/arm32_test-base" + MESA_BASE_TAG: *debian-arm32_test-base + LLVM_VERSION: *debian-arm64-llvm + FDO_DISTRIBUTION_PLATFORM: "linux/arm/v7" + needs: + - job: debian/arm32_test-base + optional: true + +# Debian based aarch64 test image base +debian/arm64_test-base: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 + extends: + - .debian-container + - .container-builds-base + variables: + MESA_IMAGE_TAG: &debian-arm64_test-base "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" + LLVM_VERSION: *debian-arm64-llvm + +.use-debian/arm64_test-base: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 + extends: + - .fdo.container-build@debian + - .debian-container-version + - .use-base-image + variables: + MESA_BASE_IMAGE: "debian/arm64_test-base" + MESA_BASE_TAG: *debian-arm64_test-base + LLVM_VERSION: *debian-arm64-llvm + needs: + - job: debian/arm64_test-base + optional: true + +# Debian based x86_64 test image for GL +debian/x86_64_test-gl: + extends: + - .use-debian/x86_64_test-base + - .container-builds-gl + - .export-container + variables: + MESA_IMAGE_TAG: &debian-x86_64_test-gl ${DEBIAN_TEST_GL_TAG} + +.use-debian/x86_64_test-gl: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 + extends: + - .set-image-base-tag + variables: + MESA_BASE_TAG: *debian-x86_64_test-base + MESA_IMAGE_PATH: "debian/x86_64_test-gl" + MESA_IMAGE_TAG: *debian-x86_64_test-gl + needs: + - job: debian/x86_64_test-gl + optional: true + +# Debian based x86_64 test image for VK +debian/x86_64_test-vk: + extends: + - .use-debian/x86_64_test-base + - .container-builds-vk + - .export-container + variables: + MESA_IMAGE_TAG: &debian-x86_64_test-vk ${DEBIAN_TEST_VK_TAG} + +.use-debian/x86_64_test-vk: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 + extends: + - .set-image-base-tag + variables: + MESA_BASE_TAG: *debian-x86_64_test-base + MESA_IMAGE_PATH: "debian/x86_64_test-vk" + MESA_IMAGE_TAG: *debian-x86_64_test-vk + needs: + - job: debian/x86_64_test-vk + optional: true + +# Debian based x86_64 test image for Android +debian/x86_64_test-android: + extends: + - .android-variables + - .use-debian/x86_64_test-base + - .container-builds-android + - .export-container + variables: + MESA_IMAGE_TAG: &debian-x86_64_test-android ${DEBIAN_TEST_ANDROID_TAG} + +.use-debian/x86_64_test-android: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64_KVM + extends: + - .android-variables + - .set-image-base-tag + variables: + MESA_BASE_TAG: *debian-x86_64_test-base + MESA_IMAGE_PATH: "debian/x86_64_test-android" + MESA_IMAGE_TAG: *debian-x86_64_test-android + needs: + - job: debian/x86_64_test-android + optional: true + +# Debian based x86_64 test image for video +debian/x86_64_test-video: + extends: + - .use-debian/x86_64_test-base + - .container-builds-video + - .export-container + variables: + MESA_IMAGE_TAG: &debian-x86_64_test-video ${DEBIAN_TEST_VIDEO_TAG} + +.use-debian/x86_64_test-video: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 + extends: + - .set-image-base-tag + variables: + MESA_BASE_TAG: *debian-x86_64_test-base + MESA_IMAGE_PATH: "debian/x86_64_test-video" + MESA_IMAGE_TAG: *debian-x86_64_test-video + needs: + - job: debian/x86_64_test-video + optional: true + +# Debian based ARMv7/armhf test image for GL +debian/arm32_test-gl: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 + extends: + - .use-debian/arm32_test-base + - .container-builds-arm32 + - .export-container + variables: + MESA_IMAGE_TAG: &debian-arm32_test-gl ${DEBIAN_TEST_GL_TAG} + +.use-debian/arm32_test-gl: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 + extends: + - .set-image-base-tag + variables: + MESA_BASE_TAG: *debian-arm32_test-base + MESA_IMAGE_PATH: "debian/arm32_test-gl" + MESA_IMAGE_TAG: *debian-arm32_test-gl + needs: + - job: debian/arm32_test-gl + optional: true + +# Debian based ARMv7/armhf test image for VK +debian/arm32_test-vk: + rules: + - when: never # There are currently no arm32 VK jobs + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 + extends: + - .use-debian/arm32_test-base + - .container-builds-arm32 + variables: + MESA_IMAGE_TAG: &debian-arm32_test-vk ${DEBIAN_TEST_VK_TAG} + +.use-debian/arm32_test-vk: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 + extends: + - .set-image-base-tag + variables: + MESA_BASE_TAG: *debian-arm32_test-base + MESA_IMAGE_PATH: "debian/arm32_test-vk" + MESA_IMAGE_TAG: *debian-arm32_test-vk + needs: + - job: debian/arm32_test-vk + optional: true + +# Debian based aarch64 test image for GL +debian/arm64_test-gl: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 + extends: + - .use-debian/arm64_test-base + - .container-builds-gl + - .export-container + variables: + MESA_IMAGE_TAG: &debian-arm64_test-gl ${DEBIAN_TEST_GL_TAG} + +.use-debian/arm64_test-gl: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 + extends: + - .set-image-base-tag + variables: + MESA_BASE_TAG: *debian-arm64_test-base + MESA_IMAGE_PATH: "debian/arm64_test-gl" + MESA_IMAGE_TAG: *debian-arm64_test-gl + needs: + - job: debian/arm64_test-gl + optional: true + +# Debian based aarch64 test image for VK +debian/arm64_test-vk: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 + extends: + - .use-debian/arm64_test-base + - .container-builds-vk + - .export-container + variables: + MESA_IMAGE_TAG: &debian-arm64_test-vk ${DEBIAN_TEST_VK_TAG} + +.use-debian/arm64_test-vk: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 + extends: + - .set-image-base-tag + variables: + MESA_BASE_TAG: *debian-arm64_test-base + MESA_IMAGE_PATH: "debian/arm64_test-vk" + MESA_IMAGE_TAG: *debian-arm64_test-vk + needs: + - job: debian/arm64_test-vk + optional: true + +# x86_64 image with ARM64 & ARM32 kernel & rootfs for baremetal testing +.debian/baremetal_arm_test: + extends: + - .fdo.container-build@debian + - .container + - .debian-container-version + variables: + FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${KERNEL_TAG}--${MESA_TEMPLATES_COMMIT}" + MESA_ARTIFACTS_TAG: *debian-arm64_build + +debian/baremetal_arm32_test-gl: + extends: + - .debian/baremetal_arm_test + needs: + - job: debian/arm32_test-gl + optional: true + variables: + MESA_IMAGE_TAG: &baremetal-arm32_test-gl "${DEBIAN_TEST_GL_TAG}--${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" + LAVA_DISTRIBUTION_TAG: "debian/arm32_test-gl:${DEBIAN_TEST_GL_TAG}--${DEBIAN_BASE_TAG}--${PKG_REPO_REV}--${MESA_TEMPLATES_COMMIT}" + +debian/baremetal_arm64_test-gl: + extends: + - .debian/baremetal_arm_test + needs: + - job: debian/arm64_test-gl + optional: true + variables: + MESA_IMAGE_TAG: &baremetal-arm64_test-gl "${DEBIAN_TEST_GL_TAG}--${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" + LAVA_DISTRIBUTION_TAG: "debian/arm64_test-gl:${DEBIAN_TEST_GL_TAG}--${DEBIAN_BASE_TAG}--${PKG_REPO_REV}--${MESA_TEMPLATES_COMMIT}" + +debian/baremetal_arm64_test-vk: + extends: + - .debian/baremetal_arm_test + needs: + - job: debian/arm64_test-vk + optional: true + variables: + MESA_IMAGE_TAG: &baremetal-arm64_test-vk "${DEBIAN_TEST_VK_TAG}--${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" + LAVA_DISTRIBUTION_TAG: "debian/arm64_test-vk:${DEBIAN_TEST_VK_TAG}--${DEBIAN_BASE_TAG}--${PKG_REPO_REV}--${MESA_TEMPLATES_COMMIT}" + +.use-debian/baremetal_arm32_test-gl: + image: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${KERNEL_TAG}--${MESA_TEMPLATES_COMMIT}" + variables: + MESA_IMAGE_PATH: "debian/baremetal_arm32_test-gl" + MESA_IMAGE_TAG: *baremetal-arm32_test-gl + needs: + - job: debian/baremetal_arm32_test-gl + optional: true + +.use-debian/baremetal_arm64_test-gl: + image: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${KERNEL_TAG}--${MESA_TEMPLATES_COMMIT}" + variables: + MESA_IMAGE_PATH: "debian/baremetal_arm64_test-gl" + MESA_IMAGE_TAG: *baremetal-arm64_test-gl + needs: + - job: debian/baremetal_arm64_test-gl + optional: true + +.use-debian/baremetal_arm64_test-vk: + image: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${KERNEL_TAG}--${MESA_TEMPLATES_COMMIT}" + variables: + MESA_IMAGE_PATH: "debian/baremetal_arm64_test-vk" + MESA_IMAGE_TAG: *baremetal-arm64_test-vk + needs: + - job: debian/baremetal_arm64_test-vk + optional: true + diff --git a/.gitlab-ci/container/fedora/gitlab-ci.yml b/.gitlab-ci/container/fedora/gitlab-ci.yml new file mode 100644 index 00000000000..72d33542cd1 --- /dev/null +++ b/.gitlab-ci/container/fedora/gitlab-ci.yml @@ -0,0 +1,40 @@ +# Build the CI Fedora 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. + +# Fedora based x86_64 build image +fedora/x86_64_build: + extends: + - .fdo.container-build@fedora + - .container + variables: + FDO_DISTRIBUTION_VERSION: 42 + MESA_IMAGE_TAG: &fedora-x86_64_build ${FEDORA_X86_64_BUILD_TAG} + LLVM_VERSION: &fedora-x86_64-llvm 20 + +.use-fedora/x86_64_build: + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 + extends: + - .set-image + variables: + MESA_IMAGE_PATH: "fedora/x86_64_build" + MESA_IMAGE_TAG: *fedora-x86_64_build + LLVM_VERSION: *fedora-x86_64-llvm + needs: + - job: fedora/x86_64_build + optional: true + diff --git a/.gitlab-ci/container/gitlab-ci-inc.yml b/.gitlab-ci/container/gitlab-ci-inc.yml new file mode 100644 index 00000000000..266a1ef9a31 --- /dev/null +++ b/.gitlab-ci/container/gitlab-ci-inc.yml @@ -0,0 +1,114 @@ +# 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}" + +.container: + stage: container + timeout: 1h + extends: + - .container-rules + - .incorporate-templates-commit + tags: + - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 + before_script: + - !reference [default, before_script] + # Undoing the `eval "$S3_JWT_FILE_SCRIPT"` from the default before_script, + # because container_job_trampoline.sh and fdo_cntr_export.sh both need it. + - S3_JWT=$(cat "${S3_JWT_FILE}") + - export S3_JWT_FILE_SCRIPT="echo -n '${S3_JWT}' > '${S3_JWT_FILE}' && S3_JWT_FILE_SCRIPT= && unset CI_JOB_JWT S3_JWT" + variables: + FDO_REPO_SUFFIX: $CI_JOB_NAME + FDO_DISTRIBUTION_EXEC: 'bash .gitlab-ci/container/container_job_trampoline.sh "${CI_JOB_NAME}"' + # no need to pull the whole repo to build the container image + GIT_STRATEGY: none + CI_BUILD_COMPONENTS: "$CI_BUILD_COMPONENTS_ANDROID_CTS $CI_BUILD_COMPONENTS_ANGLE $CI_BUILD_COMPONENTS_CROSVM $CI_BUILD_COMPONENTS_FLUSTER $CI_BUILD_COMPONENTS_PIGLIT $CI_BUILD_COMPONENTS_VKD3D_PROTON" + +.container-builds-angle: + variables: + ANGLE_TAG: "${CONDITIONAL_BUILD_ANGLE_TAG}" + CI_BUILD_COMPONENTS_ANGLE: angle + +.container-builds-crosvm: + variables: + CROSVM_TAG: "${CONDITIONAL_BUILD_CROSVM_TAG}" + CI_BUILD_COMPONENTS_CROSVM: crosvm + +.container-builds-fluster: + variables: + FLUSTER_TAG: "${CONDITIONAL_BUILD_FLUSTER_TAG}" + CI_BUILD_COMPONENTS_FLUSTER: fluster + +.container-builds-piglit: + variables: + PIGLIT_TAG: "${CONDITIONAL_BUILD_PIGLIT_TAG}" + CI_BUILD_COMPONENTS_PIGLIT: piglit + +.container-builds-vkd3d-proton: + variables: + VKD3D_PROTON_TAG: "${CONDITIONAL_BUILD_VKD3D_PROTON_TAG}" + CI_BUILD_COMPONENTS_VKD3D_PROTON: vkd3d-proton + +.container-builds-android-cts: + variables: + ANDROID_CTS_TAG: "${CONDITIONAL_BUILD_ANDROID_CTS_TAG}" + CI_BUILD_COMPONENTS_ANDROID_CTS: android-cts + +.container-builds-android: + extends: + - .container-builds-android-cts + - .container-builds-angle + +.container-builds-arm32: + extends: + - .container-builds-piglit + +.container-builds-base: + extends: + - .container-builds-crosvm + +.container-builds-gl: + extends: + - .container-builds-angle + - .container-builds-piglit + +.container-builds-video: + extends: + - .container-builds-fluster + +.container-builds-vk: + extends: + - .container-builds-piglit + - .container-builds-vkd3d-proton + +# Export the container rootfs and upload it to S3 +.export-container: + variables: + FDO_DISTRIBUTION_PACKAGES: zstd + FDO_DISTRIBUTION_POST_EXEC: 'bash .gitlab-ci/container/fdo_cntr_export.sh' + +.use-base-image: + extends: + - .container + - .incorporate-base-tag+templates-commit + diff --git a/.gitlab-ci/container/gitlab-ci.yml b/.gitlab-ci/container/gitlab-ci.yml index 4965ba14dcf..79460a465d5 100644 --- a/.gitlab-ci/container/gitlab-ci.yml +++ b/.gitlab-ci/container/gitlab-ci.yml @@ -1,28 +1,3 @@ -# 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}" - # Build the CI docker images. # # MESA_IMAGE_TAG is the tag of the docker image used by later stage jobs. If the @@ -40,793 +15,7 @@ # repository's container registry, so that the image from the main # repository's registry will be used there as well. -.debian-container-version: - variables: - FDO_DISTRIBUTION_VERSION: bookworm-slim +include: + - local: '.gitlab-ci/container/gitlab-ci-inc.yml' + - local: '.gitlab-ci/container/*/gitlab-ci.yml' -.debian-container: - extends: - - .fdo.container-build@debian - - .container - - .debian-container-version - -.container: - stage: container - timeout: 1h - extends: - - .container-rules - - .incorporate-templates-commit - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 - before_script: - - !reference [default, before_script] - # Undoing the `eval "$S3_JWT_FILE_SCRIPT"` from the default before_script, - # because container_job_trampoline.sh and fdo_cntr_export.sh both need it. - - S3_JWT=$(cat "${S3_JWT_FILE}") - - export S3_JWT_FILE_SCRIPT="echo -n '${S3_JWT}' > '${S3_JWT_FILE}' && S3_JWT_FILE_SCRIPT= && unset CI_JOB_JWT S3_JWT" - variables: - FDO_REPO_SUFFIX: $CI_JOB_NAME - FDO_DISTRIBUTION_EXEC: 'bash .gitlab-ci/container/container_job_trampoline.sh "${CI_JOB_NAME}"' - # no need to pull the whole repo to build the container image - GIT_STRATEGY: none - CI_BUILD_COMPONENTS: "$CI_BUILD_COMPONENTS_ANDROID_CTS $CI_BUILD_COMPONENTS_ANGLE $CI_BUILD_COMPONENTS_CROSVM $CI_BUILD_COMPONENTS_FLUSTER $CI_BUILD_COMPONENTS_PIGLIT $CI_BUILD_COMPONENTS_VKD3D_PROTON" - -.container-builds-angle: - variables: - ANGLE_TAG: "${CONDITIONAL_BUILD_ANGLE_TAG}" - CI_BUILD_COMPONENTS_ANGLE: angle - -.container-builds-crosvm: - variables: - CROSVM_TAG: "${CONDITIONAL_BUILD_CROSVM_TAG}" - CI_BUILD_COMPONENTS_CROSVM: crosvm - -.container-builds-fluster: - variables: - FLUSTER_TAG: "${CONDITIONAL_BUILD_FLUSTER_TAG}" - CI_BUILD_COMPONENTS_FLUSTER: fluster - -.container-builds-piglit: - variables: - PIGLIT_TAG: "${CONDITIONAL_BUILD_PIGLIT_TAG}" - CI_BUILD_COMPONENTS_PIGLIT: piglit - -.container-builds-vkd3d-proton: - variables: - VKD3D_PROTON_TAG: "${CONDITIONAL_BUILD_VKD3D_PROTON_TAG}" - CI_BUILD_COMPONENTS_VKD3D_PROTON: vkd3d-proton - -.container-builds-android-cts: - variables: - ANDROID_CTS_TAG: "${CONDITIONAL_BUILD_ANDROID_CTS_TAG}" - CI_BUILD_COMPONENTS_ANDROID_CTS: android-cts - -.container-builds-android: - extends: - - .container-builds-android-cts - - .container-builds-angle - -.container-builds-arm32: - extends: - - .container-builds-piglit - -.container-builds-base: - extends: - - .container-builds-crosvm - -.container-builds-gl: - extends: - - .container-builds-angle - - .container-builds-piglit - -.container-builds-video: - extends: - - .container-builds-fluster - -.container-builds-vk: - extends: - - .container-builds-piglit - - .container-builds-vkd3d-proton - -# Export the container rootfs and upload it to S3 -.export-container: - variables: - FDO_DISTRIBUTION_PACKAGES: zstd - FDO_DISTRIBUTION_POST_EXEC: 'bash .gitlab-ci/container/fdo_cntr_export.sh' - -.use-base-image: - extends: - - .container - - .incorporate-base-tag+templates-commit - -# Debian based x86_64 build image base -debian/x86_64_build-base: - extends: - - .debian-container - variables: - MESA_IMAGE_TAG: &debian-x86_64_build-base "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" - LLVM_VERSION: &debian-x86_64-llvm 19 - -.use-debian/x86_64_build-base: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 - extends: - - .fdo.container-build@debian - - .debian-container-version - - .use-base-image - variables: - MESA_BASE_IMAGE: "debian/x86_64_build-base" - MESA_BASE_TAG: *debian-x86_64_build-base - LLVM_VERSION: *debian-x86_64-llvm - needs: - - job: debian/x86_64_build-base - optional: true - -# Debian based x86_64 main build image -debian/x86_64_build: - extends: - - .use-debian/x86_64_build-base - variables: - MESA_IMAGE_TAG: &debian-x86_64_build ${DEBIAN_BUILD_TAG} - LLVM_VERSION: *debian-x86_64-llvm - -.use-debian/x86_64_build: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_64_build-base - MESA_IMAGE_PATH: "debian/x86_64_build" - MESA_IMAGE_TAG: *debian-x86_64_build - LLVM_VERSION: *debian-x86_64-llvm - needs: - - job: debian/x86_64_build - optional: true - -# Debian based x86_32 cross-build image -debian/x86_32_build: - extends: - - .use-debian/x86_64_build-base - variables: - MESA_IMAGE_TAG: &debian-x86_32_build ${DEBIAN_BUILD_TAG} - -.use-debian/x86_32_build: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_64_build-base - MESA_IMAGE_PATH: "debian/x86_32_build" - MESA_IMAGE_TAG: *debian-x86_32_build - LLVM_VERSION: *debian-x86_64-llvm - needs: - - job: debian/x86_32_build - optional: true - -# Debian based ppc64el cross-build image -debian/ppc64el_build: - extends: - - .use-debian/x86_64_build-base - variables: - MESA_IMAGE_TAG: &debian-ppc64el_build ${DEBIAN_BUILD_TAG} - LLVM_VERSION: &debian-ppc64el-llvm 15 # no LLVM packages for PPC - -.use-debian/ppc64el_build: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_64_build-base - MESA_IMAGE_PATH: "debian/ppc64el_build" - MESA_IMAGE_TAG: *debian-ppc64el_build - LLVM_VERSION: *debian-ppc64el-llvm - needs: - - job: debian/ppc64el_build - optional: true - -# Debian based s390x cross-build image -debian/s390x_build: - extends: - - .use-debian/x86_64_build-base - variables: - MESA_IMAGE_TAG: &debian-s390x_build ${DEBIAN_BUILD_TAG} - LLVM_VERSION: &debian-s390x-llvm 19 - -.use-debian/s390x_build: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_64_build-base - MESA_IMAGE_PATH: "debian/s390x_build" - MESA_IMAGE_TAG: *debian-s390x_build - LLVM_VERSION: *debian-s390x-llvm - needs: - - job: debian/s390x_build - optional: true - -# Android NDK cross-build image -.android-variables: - variables: - ANDROID_VERSION: 14 - ANDROID_NDK_VERSION: "r27c" - ANDROID_SDK_VERSION: 34 - ANDROID_LLVM_VERSION: llvmorg-19.1.7 - ANDROID_LLVM_ARTIFACT_NAME: android-x86_64-llvm-20250324 - # This can be confusing: LLVM_VERSION refers to the host LLVM toolchain - # used (LLVM 19 in our Debian system), but ANDROID_LLVM_VERSION refers to - # the cross-compiling LLVM toolchain used to build for the Android system. - LLVM_VERSION: &debian-android-llvm 19 - CUTTLEFISH_PROJECT_PATH: ao2/aosp-manifest - CUTTLEFISH_BUILD_VERSION_TAGS: mesa-venus - CUTTLEFISH_BUILD_NUMBER: 20250506.001 - AOSP_KERNEL_PROJECT_PATH: ao2/aosp-kernel-manifest - AOSP_KERNEL_BUILD_VERSION_TAGS: common-android14-6.1-venus - AOSP_KERNEL_BUILD_NUMBER: 20241107.001 - -debian/android_build: - extends: - - .android-variables - - .use-debian/x86_64_build-base - variables: - MESA_IMAGE_TAG: &debian-android_build ${DEBIAN_BUILD_TAG} - -.use-debian/android_build: - extends: - - .android-variables - - .set-image-base-tag - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 - variables: - MESA_BASE_TAG: *debian-x86_64_build-base - MESA_IMAGE_PATH: "debian/android_build" - MESA_IMAGE_TAG: *debian-android_build - needs: - - job: debian/android_build - optional: true - -# Debian based ARM build image -debian/arm64_build: - extends: - - .fdo.container-build@debian - - .container - - .debian-container-version - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 - variables: - MESA_IMAGE_TAG: &debian-arm64_build "${DEBIAN_BUILD_TAG}--${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" - LLVM_VERSION: &debian-arm64-llvm 19 - -.use-debian/arm64_build: - extends: - - .set-image - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 - variables: - MESA_IMAGE_PATH: "debian/arm64_build" - MESA_IMAGE_TAG: *debian-arm64_build - MESA_ARTIFACTS_TAG: *debian-arm64_build - LLVM_VERSION: *debian-arm64-llvm - needs: - - job: debian/arm64_build - optional: true - -# Alpine based x86_64 build image -.alpine/x86_64_build-base: - extends: - - .fdo.container-build@alpine - - .container - variables: - FDO_DISTRIBUTION_VERSION: "3.21" - FDO_BASE_IMAGE: alpine:$FDO_DISTRIBUTION_VERSION # since cbuild ignores it - -# Alpine based x86_64 build image -alpine/x86_64_build: - extends: - - .alpine/x86_64_build-base - variables: - MESA_IMAGE_TAG: &alpine-x86_64_build ${ALPINE_X86_64_BUILD_TAG} - LLVM_VERSION: &alpine-llvm_version 19 - rules: - - !reference [.container, rules] - # Note: the next three lines must remain in that order, so that the rules - # in `linkcheck-docs` catch nightly pipelines before the rules in `deploy-docs` - # exclude them. - - !reference [linkcheck-docs, rules] - - !reference [deploy-docs, rules] - - !reference [test-docs, rules] - -.use-alpine/x86_64_build: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 - extends: - - .set-image - variables: - MESA_IMAGE_PATH: "alpine/x86_64_build" - MESA_IMAGE_TAG: *alpine-x86_64_build - LLVM_VERSION: *alpine-llvm_version - needs: - - job: alpine/x86_64_build - optional: true - -# Alpine based x86_64 image for LAVA SSH dockerized client -alpine/x86_64_lava_ssh_client: - extends: - - .alpine/x86_64_build-base - variables: - MESA_IMAGE_TAG: &alpine-x86_64_lava_ssh_client ${ALPINE_X86_64_LAVA_SSH_TAG} - -# Alpine based x86_64 image to run LAVA jobs -alpine/x86_64_lava-trigger: - extends: - - .alpine/x86_64_build-base - variables: - MESA_IMAGE_TAG: &alpine-x86_64_lava_trigger ${ALPINE_X86_64_LAVA_TRIGGER_TAG} - -# Fedora based x86_64 build image -fedora/x86_64_build: - extends: - - .fdo.container-build@fedora - - .container - variables: - FDO_DISTRIBUTION_VERSION: 42 - MESA_IMAGE_TAG: &fedora-x86_64_build ${FEDORA_X86_64_BUILD_TAG} - LLVM_VERSION: &fedora-x86_64-llvm 20 - -.use-fedora/x86_64_build: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 - extends: - - .set-image - variables: - MESA_IMAGE_PATH: "fedora/x86_64_build" - MESA_IMAGE_TAG: *fedora-x86_64_build - LLVM_VERSION: *fedora-x86_64-llvm - needs: - - job: fedora/x86_64_build - optional: true - -# Debian based x86_64 test image base -debian/x86_64_test-base: - extends: - - .debian-container - - .container-builds-base - variables: - MESA_IMAGE_TAG: &debian-x86_64_test-base "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" - LLVM_VERSION: *debian-x86_64-llvm - -.use-debian/x86_64_test-base: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 - extends: - - .fdo.container-build@debian - - .debian-container-version - - .use-base-image - variables: - MESA_BASE_IMAGE: "debian/x86_64_test-base" - MESA_BASE_TAG: *debian-x86_64_test-base - LLVM_VERSION: *debian-x86_64-llvm - needs: - - job: debian/x86_64_test-base - optional: true - -# Debian based ARMv7/armhf test image base -debian/arm32_test-base: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 - extends: - - .debian-container - - .container-builds-base - variables: - MESA_IMAGE_TAG: &debian-arm32_test-base "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" - LLVM_VERSION: *debian-arm64-llvm - FDO_DISTRIBUTION_PLATFORM: "linux/arm/v7" - -.use-debian/arm32_test-base: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 - extends: - - .fdo.container-build@debian - - .debian-container-version - - .use-base-image - variables: - MESA_BASE_IMAGE: "debian/arm32_test-base" - MESA_BASE_TAG: *debian-arm32_test-base - LLVM_VERSION: *debian-arm64-llvm - FDO_DISTRIBUTION_PLATFORM: "linux/arm/v7" - needs: - - job: debian/arm32_test-base - optional: true - -# Debian based aarch64 test image base -debian/arm64_test-base: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 - extends: - - .debian-container - - .container-builds-base - variables: - MESA_IMAGE_TAG: &debian-arm64_test-base "${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" - LLVM_VERSION: *debian-arm64-llvm - -.use-debian/arm64_test-base: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 - extends: - - .fdo.container-build@debian - - .debian-container-version - - .use-base-image - variables: - MESA_BASE_IMAGE: "debian/arm64_test-base" - MESA_BASE_TAG: *debian-arm64_test-base - LLVM_VERSION: *debian-arm64-llvm - needs: - - job: debian/arm64_test-base - optional: true - -# Debian based x86_64 test image for GL -debian/x86_64_test-gl: - extends: - - .use-debian/x86_64_test-base - - .container-builds-gl - - .export-container - variables: - MESA_IMAGE_TAG: &debian-x86_64_test-gl ${DEBIAN_TEST_GL_TAG} - -.use-debian/x86_64_test-gl: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_64_test-base - MESA_IMAGE_PATH: "debian/x86_64_test-gl" - MESA_IMAGE_TAG: *debian-x86_64_test-gl - needs: - - job: debian/x86_64_test-gl - optional: true - -# Debian based x86_64 test image for VK -debian/x86_64_test-vk: - extends: - - .use-debian/x86_64_test-base - - .container-builds-vk - - .export-container - variables: - MESA_IMAGE_TAG: &debian-x86_64_test-vk ${DEBIAN_TEST_VK_TAG} - -.use-debian/x86_64_test-vk: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_64_test-base - MESA_IMAGE_PATH: "debian/x86_64_test-vk" - MESA_IMAGE_TAG: *debian-x86_64_test-vk - needs: - - job: debian/x86_64_test-vk - optional: true - -# Debian based x86_64 test image for Android -debian/x86_64_test-android: - extends: - - .android-variables - - .use-debian/x86_64_test-base - - .container-builds-android - - .export-container - variables: - MESA_IMAGE_TAG: &debian-x86_64_test-android ${DEBIAN_TEST_ANDROID_TAG} - -.use-debian/x86_64_test-android: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64_KVM - extends: - - .android-variables - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_64_test-base - MESA_IMAGE_PATH: "debian/x86_64_test-android" - MESA_IMAGE_TAG: *debian-x86_64_test-android - needs: - - job: debian/x86_64_test-android - optional: true - -# Debian based x86_64 test image for video -debian/x86_64_test-video: - extends: - - .use-debian/x86_64_test-base - - .container-builds-video - - .export-container - variables: - MESA_IMAGE_TAG: &debian-x86_64_test-video ${DEBIAN_TEST_VIDEO_TAG} - -.use-debian/x86_64_test-video: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_64_test-base - MESA_IMAGE_PATH: "debian/x86_64_test-video" - MESA_IMAGE_TAG: *debian-x86_64_test-video - needs: - - job: debian/x86_64_test-video - optional: true - -# Debian based ARMv7/armhf test image for GL -debian/arm32_test-gl: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 - extends: - - .use-debian/arm32_test-base - - .container-builds-arm32 - - .export-container - variables: - MESA_IMAGE_TAG: &debian-arm32_test-gl ${DEBIAN_TEST_GL_TAG} - -.use-debian/arm32_test-gl: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-arm32_test-base - MESA_IMAGE_PATH: "debian/arm32_test-gl" - MESA_IMAGE_TAG: *debian-arm32_test-gl - needs: - - job: debian/arm32_test-gl - optional: true - -# Debian based ARMv7/armhf test image for VK -debian/arm32_test-vk: - rules: - - when: never # There are currently no arm32 VK jobs - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 - extends: - - .use-debian/arm32_test-base - - .container-builds-arm32 - variables: - MESA_IMAGE_TAG: &debian-arm32_test-vk ${DEBIAN_TEST_VK_TAG} - -.use-debian/arm32_test-vk: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-arm32_test-base - MESA_IMAGE_PATH: "debian/arm32_test-vk" - MESA_IMAGE_TAG: *debian-arm32_test-vk - needs: - - job: debian/arm32_test-vk - optional: true - -# Debian based aarch64 test image for GL -debian/arm64_test-gl: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 - extends: - - .use-debian/arm64_test-base - - .container-builds-gl - - .export-container - variables: - MESA_IMAGE_TAG: &debian-arm64_test-gl ${DEBIAN_TEST_GL_TAG} - -.use-debian/arm64_test-gl: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-arm64_test-base - MESA_IMAGE_PATH: "debian/arm64_test-gl" - MESA_IMAGE_TAG: *debian-arm64_test-gl - needs: - - job: debian/arm64_test-gl - optional: true - -# Debian based aarch64 test image for VK -debian/arm64_test-vk: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 - extends: - - .use-debian/arm64_test-base - - .container-builds-vk - - .export-container - variables: - MESA_IMAGE_TAG: &debian-arm64_test-vk ${DEBIAN_TEST_VK_TAG} - -.use-debian/arm64_test-vk: - tags: - - $FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64 - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-arm64_test-base - MESA_IMAGE_PATH: "debian/arm64_test-vk" - MESA_IMAGE_TAG: *debian-arm64_test-vk - needs: - - job: debian/arm64_test-vk - optional: true - -# x86_64 image with ARM64 & ARM32 kernel & rootfs for baremetal testing -.debian/baremetal_arm_test: - extends: - - .fdo.container-build@debian - - .container - - .debian-container-version - variables: - FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${KERNEL_TAG}--${MESA_TEMPLATES_COMMIT}" - MESA_ARTIFACTS_TAG: *debian-arm64_build - -debian/baremetal_arm32_test-gl: - extends: - - .debian/baremetal_arm_test - needs: - - job: debian/arm32_test-gl - optional: true - variables: - MESA_IMAGE_TAG: &baremetal-arm32_test-gl "${DEBIAN_TEST_GL_TAG}--${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" - LAVA_DISTRIBUTION_TAG: "debian/arm32_test-gl:${DEBIAN_TEST_GL_TAG}--${DEBIAN_BASE_TAG}--${PKG_REPO_REV}--${MESA_TEMPLATES_COMMIT}" - -debian/baremetal_arm64_test-gl: - extends: - - .debian/baremetal_arm_test - needs: - - job: debian/arm64_test-gl - optional: true - variables: - MESA_IMAGE_TAG: &baremetal-arm64_test-gl "${DEBIAN_TEST_GL_TAG}--${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" - LAVA_DISTRIBUTION_TAG: "debian/arm64_test-gl:${DEBIAN_TEST_GL_TAG}--${DEBIAN_BASE_TAG}--${PKG_REPO_REV}--${MESA_TEMPLATES_COMMIT}" - -debian/baremetal_arm64_test-vk: - extends: - - .debian/baremetal_arm_test - needs: - - job: debian/arm64_test-vk - optional: true - variables: - MESA_IMAGE_TAG: &baremetal-arm64_test-vk "${DEBIAN_TEST_VK_TAG}--${DEBIAN_BASE_TAG}--${PKG_REPO_REV}" - LAVA_DISTRIBUTION_TAG: "debian/arm64_test-vk:${DEBIAN_TEST_VK_TAG}--${DEBIAN_BASE_TAG}--${PKG_REPO_REV}--${MESA_TEMPLATES_COMMIT}" - -.use-debian/baremetal_arm32_test-gl: - image: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${KERNEL_TAG}--${MESA_TEMPLATES_COMMIT}" - variables: - MESA_IMAGE_PATH: "debian/baremetal_arm32_test-gl" - MESA_IMAGE_TAG: *baremetal-arm32_test-gl - needs: - - job: debian/baremetal_arm32_test-gl - optional: true - -.use-debian/baremetal_arm64_test-gl: - image: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${KERNEL_TAG}--${MESA_TEMPLATES_COMMIT}" - variables: - MESA_IMAGE_PATH: "debian/baremetal_arm64_test-gl" - MESA_IMAGE_TAG: *baremetal-arm64_test-gl - needs: - - job: debian/baremetal_arm64_test-gl - optional: true - -.use-debian/baremetal_arm64_test-vk: - image: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${KERNEL_TAG}--${MESA_TEMPLATES_COMMIT}" - variables: - MESA_IMAGE_PATH: "debian/baremetal_arm64_test-vk" - MESA_IMAGE_TAG: *baremetal-arm64_test-vk - needs: - - job: debian/baremetal_arm64_test-vk - optional: true - -# 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-msvc: - 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}" - extends: - - .windows-docker-tags - -.windows_container_build: - inherit: - default: [retry] - extends: - - .container - - .windows-docker-msvc - - .windows-shell-tags - rules: - - !reference [.common-rules, rules] - - !reference [.microsoft-farm-container-rules, rules] - - !reference [.container-rules, rules] - variables: - GIT_STRATEGY: fetch # we do actually need the full repository though - MESA_BASE_IMAGE: None - before_script: null # remove .container before_script as it's unix-only - 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_msvc: - inherit: - default: [retry] - extends: - - .windows_container_build - variables: - MESA_IMAGE_PATH: &windows_msvc_image_path "windows/x86_64_msvc" - MESA_IMAGE_TAG: ${WINDOWS_X64_MSVC_TAG} - DOCKERFILE: Dockerfile_msvc - MESA_BASE_IMAGE: "mcr.microsoft.com/windows/server:ltsc2022" - -windows_build_msvc: - inherit: - default: [retry] - extends: - - .windows_container_build - rules: - - !reference [.common-rules, rules] - - !reference [.microsoft-farm-rules, rules] - - !reference [.container-rules, rules] - variables: - MESA_IMAGE_PATH: &windows_build_image_path "windows/x86_64_build" - MESA_IMAGE_TAG: &windows_build_image_tag ${WINDOWS_X64_MSVC_TAG}--${WINDOWS_X64_BUILD_TAG} - DOCKERFILE: Dockerfile_build - MESA_BASE_IMAGE_PATH: *windows_msvc_image_path - MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${WINDOWS_X64_MSVC_TAG}" - timeout: 2h 30m # LLVM takes ages - needs: - - job: windows_msvc - optional: true - -windows_test_msvc: - inherit: - default: [retry] - extends: - - .windows_container_build - rules: - - !reference [.common-rules, rules] - - !reference [.microsoft-farm-rules, rules] - - !reference [.container-rules, rules] - variables: - MESA_IMAGE_PATH: &windows_test_image_path "windows/x86_64_test" - MESA_IMAGE_TAG: &windows_test_image_tag ${WINDOWS_X64_MSVC_TAG}--${WINDOWS_X64_TEST_TAG} - DOCKERFILE: Dockerfile_test - MESA_BASE_IMAGE_PATH: *windows_msvc_image_path - MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${WINDOWS_X64_MSVC_TAG}" - timeout: 2h 30m - needs: - - job: windows_msvc - optional: true - -.use-windows_build_msvc: - inherit: - default: [retry] - extends: .windows-docker-msvc - image: "$MESA_IMAGE" - variables: - MESA_IMAGE_PATH: *windows_build_image_path - MESA_IMAGE_TAG: *windows_build_image_tag - needs: - - job: windows_build_msvc - optional: true - -.use-windows_test_msvc: - inherit: - default: [retry] - extends: .windows-docker-msvc - image: "$MESA_IMAGE" - variables: - MESA_IMAGE_PATH: *windows_test_image_path - MESA_IMAGE_TAG: *windows_test_image_tag diff --git a/.gitlab-ci/container/windows/gitlab-ci.yml b/.gitlab-ci/container/windows/gitlab-ci.yml new file mode 100644 index 00000000000..bfe7b81463c --- /dev/null +++ b/.gitlab-ci/container/windows/gitlab-ci.yml @@ -0,0 +1,109 @@ +# 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-msvc: + 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}" + extends: + - .windows-docker-tags + +.windows_container_build: + inherit: + default: [retry] + extends: + - .container + - .windows-docker-msvc + - .windows-shell-tags + rules: + - !reference [.common-rules, rules] + - !reference [.microsoft-farm-container-rules, rules] + - !reference [.container-rules, rules] + variables: + GIT_STRATEGY: fetch # we do actually need the full repository though + MESA_BASE_IMAGE: None + before_script: null # remove .container before_script as it's unix-only + 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_msvc: + inherit: + default: [retry] + extends: + - .windows_container_build + variables: + MESA_IMAGE_PATH: &windows_msvc_image_path "windows/x86_64_msvc" + MESA_IMAGE_TAG: ${WINDOWS_X64_MSVC_TAG} + DOCKERFILE: Dockerfile_msvc + MESA_BASE_IMAGE: "mcr.microsoft.com/windows/server:ltsc2022" + +windows_build_msvc: + inherit: + default: [retry] + extends: + - .windows_container_build + rules: + - !reference [.common-rules, rules] + - !reference [.microsoft-farm-rules, rules] + - !reference [.container-rules, rules] + variables: + MESA_IMAGE_PATH: &windows_build_image_path "windows/x86_64_build" + MESA_IMAGE_TAG: &windows_build_image_tag ${WINDOWS_X64_MSVC_TAG}--${WINDOWS_X64_BUILD_TAG} + DOCKERFILE: Dockerfile_build + MESA_BASE_IMAGE_PATH: *windows_msvc_image_path + MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${WINDOWS_X64_MSVC_TAG}" + timeout: 2h 30m # LLVM takes ages + needs: + - job: windows_msvc + optional: true + +windows_test_msvc: + inherit: + default: [retry] + extends: + - .windows_container_build + rules: + - !reference [.common-rules, rules] + - !reference [.microsoft-farm-rules, rules] + - !reference [.container-rules, rules] + variables: + MESA_IMAGE_PATH: &windows_test_image_path "windows/x86_64_test" + MESA_IMAGE_TAG: &windows_test_image_tag ${WINDOWS_X64_MSVC_TAG}--${WINDOWS_X64_TEST_TAG} + DOCKERFILE: Dockerfile_test + MESA_BASE_IMAGE_PATH: *windows_msvc_image_path + MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${WINDOWS_X64_MSVC_TAG}" + timeout: 2h 30m + needs: + - job: windows_msvc + optional: true + +.use-windows_build_msvc: + inherit: + default: [retry] + extends: .windows-docker-msvc + image: "$MESA_IMAGE" + variables: + MESA_IMAGE_PATH: *windows_build_image_path + MESA_IMAGE_TAG: *windows_build_image_tag + needs: + - job: windows_build_msvc + optional: true + +.use-windows_test_msvc: + inherit: + default: [retry] + extends: .windows-docker-msvc + image: "$MESA_IMAGE" + variables: + MESA_IMAGE_PATH: *windows_test_image_path + MESA_IMAGE_TAG: *windows_test_image_tag +