From 7d474c100e159393dce471f64b08e8f3b3411b9d Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Fri, 8 Apr 2022 13:29:04 +0200 Subject: [PATCH] ci: Move most stuff out of root .gitlab-ci.yml This file was getting a bit hard to navigate. Split container, build and test jobs to their own files. Signed-off-by: Tomeu Vizoso Reviewed-by: Emma Anholt Part-of: --- .gitlab-ci.yml | 1263 +--------------------------- .gitlab-ci/build/gitlab-ci.yml | 525 ++++++++++++ .gitlab-ci/container/gitlab-ci.yml | 414 +++++++++ .gitlab-ci/test/gitlab-ci.yml | 315 +++++++ 4 files changed, 1258 insertions(+), 1259 deletions(-) create mode 100644 .gitlab-ci/build/gitlab-ci.yml create mode 100644 .gitlab-ci/container/gitlab-ci.yml create mode 100644 .gitlab-ci/test/gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d6a6e07cd84..81f30c8ea70 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -47,6 +47,9 @@ include: - '/templates/fedora.yml' - local: '.gitlab-ci/image-tags.yml' - local: '.gitlab-ci/lava/lava-gitlab-ci.yml' + - local: '.gitlab-ci/container/gitlab-ci.yml' + - local: '.gitlab-ci/build/gitlab-ci.yml' + - local: '.gitlab-ci/test/gitlab-ci.yml' - local: '.gitlab-ci/test-source-dep.yml' - local: 'src/amd/ci/gitlab-ci.yml' - local: 'src/broadcom/ci/gitlab-ci.yml' @@ -216,55 +219,9 @@ test-docs-mr: - _build/meson-logs/*.txt - _build/meson-logs/strace - -# 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 -# 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 +.container-rules: extends: - .ci-run-policy - - .incorporate-templates-commit rules: - *ignore_scheduled_pipelines # Run pipeline by default in the main project if any CI pipeline @@ -293,353 +250,6 @@ test-docs-mr: when: manual # Otherwise, container jobs won't run - when: never - variables: - FDO_DISTRIBUTION_VERSION: bullseye-slim - FDO_REPO_SUFFIX: $CI_JOB_NAME - FDO_DISTRIBUTION_EXEC: 'env FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} 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 - - .ci-run-policy - -# 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 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: - 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: - FDO_DISTRIBUTION_EXEC: 'env KERNEL_URL=${KERNEL_URL} FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash .gitlab-ci/container/${CI_JOB_NAME}.sh' - KERNEL_URL: &kernel-rootfs-url "https://gitlab.freedesktop.org/gfx-ci/linux/-/archive/v5.16-for-mesa-ci-991fec6622591/linux-v5.16-for-mesa-ci-991fec6622591.tar.bz2" - MESA_IMAGE_TAG: &debian-x86_test-gl ${DEBIAN_X86_TEST_GL_TAG} - -# 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} - -# 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: - - .ci-run-policy - 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 - - .ci-run-policy - needs: - - kernel+rootfs_arm64 - - kernel+rootfs_armhf - variables: - FDO_DISTRIBUTION_EXEC: 'env ARTIFACTS_PREFIX=https://${MINIO_HOST}/mesa-lava ARTIFACTS_SUFFIX=${MESA_ROOTFS_TAG}--${MESA_ARM_BUILD_TAG}--${MESA_TEMPLATES_COMMIT} CI_PROJECT_PATH=${CI_PROJECT_PATH} FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} FDO_UPSTREAM_REPO=${FDO_UPSTREAM_REPO} bash .gitlab-ci/container/${CI_JOB_NAME}.sh' - FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${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: false - extends: - - .container - - .windows-docker-vs2019 - variables: - GIT_STRATEGY: fetch # we do actually need the full repository though - MESA_BASE_IMAGE: None - tags: - - windows - - shell - - "1809" - - 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_build_vs2019: - inherit: - default: false - extends: - - .windows_container_build - variables: - MESA_IMAGE_PATH: &windows_build_image_path ${WINDOWS_X64_BUILD_PATH} - MESA_IMAGE_TAG: &windows_build_image_tag ${WINDOWS_X64_BUILD_TAG} - DOCKERFILE: Dockerfile_build - timeout: 2h 30m # LLVM takes ages - -windows_test_vs2019: - inherit: - default: false - extends: - - .windows_container_build - # Don't want the .container rules - - .ci-run-policy - variables: - MESA_IMAGE_PATH: &windows_test_image_path ${WINDOWS_X64_TEST_PATH} - MESA_IMAGE_TAG: &windows_test_image_tag ${WINDOWS_X64_BUILD_TAG}--${WINDOWS_X64_TEST_TAG} - DOCKERFILE: Dockerfile_test - # Right now this only needs the VS install to get DXIL.dll. Maybe see about decoupling this at some point - MESA_BASE_IMAGE_PATH: *windows_build_image_path - MESA_BASE_IMAGE_TAG: *windows_build_image_tag - MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${MESA_BASE_IMAGE_TAG}" - script: - - .\.gitlab-ci\windows\mesa_container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $MESA_IMAGE $MESA_UPSTREAM_IMAGE Dockerfile_test ${MESA_BASE_IMAGE} - needs: - - windows_build_vs2019 - -.use-windows_build_vs2019: - inherit: - default: false - extends: .windows-docker-vs2019 - image: "$MESA_IMAGE" - variables: - MESA_IMAGE_PATH: *windows_build_image_path - MESA_IMAGE_TAG: *windows_build_image_tag - needs: - - windows_build_vs2019 - -.use-windows_test_vs2019: - inherit: - default: false - extends: .windows-docker-vs2019 - image: "$MESA_IMAGE" - variables: - MESA_IMAGE_PATH: *windows_test_image_path - MESA_IMAGE_TAG: *windows_test_image_tag - # Git archive @@ -683,665 +293,6 @@ sanity: reports: junit: check-*.xml - -# BUILD - -# Shared between windows and Linux -.build-common: - extends: .ci-run-policy - # Cancel job if a newer commit is pushed to the same branch - interruptible: true - artifacts: - name: "mesa_${CI_JOB_NAME}" - when: always - paths: - - _build/meson-logs/*.txt - - _build/meson-logs/strace - - shader-db - -# Just Linux -.build-linux: - extends: .build-common - variables: - CCACHE_COMPILERCHECK: "content" - CCACHE_COMPRESS: "true" - CCACHE_DIR: /cache/mesa/ccache - # Use ccache transparently, and print stats before/after - before_script: - - !reference [default, before_script] - - export PATH="/usr/lib/ccache:$PATH" - - export CCACHE_BASEDIR="$PWD" - - echo -e "\e[0Ksection_start:$(date +%s):ccache_before[collapsed=true]\r\e[0Kccache stats before build" - - ccache --show-stats - - echo -e "\e[0Ksection_end:$(date +%s):ccache_before\r\e[0K" - after_script: - - echo -e "\e[0Ksection_start:$(date +%s):ccache_after[collapsed=true]\r\e[0Kccache stats after build" - - ccache --show-stats - - echo -e "\e[0Ksection_end:$(date +%s):ccache_after\r\e[0K" - - !reference [default, after_script] - -.build-windows: - extends: .build-common - tags: - - windows - - docker - - "1809" - - mesa - cache: - key: ${CI_JOB_NAME} - paths: - - subprojects/packagecache - -.meson-build: - extends: - - .build-linux - - .use-debian/x86_build - stage: build-x86_64 - variables: - LLVM_VERSION: 11 - script: - - .gitlab-ci/meson/build.sh - -debian-testing: - extends: - - .meson-build - - .ci-deqp-artifacts - variables: - UNWIND: "enabled" - DRI_LOADERS: > - -D glx=dri - -D gbm=enabled - -D egl=enabled - -D platforms=x11 - GALLIUM_ST: > - -D dri3=enabled - -D gallium-va=enabled - GALLIUM_DRIVERS: "swrast,virgl,radeonsi,zink,crocus,iris,i915" - VULKAN_DRIVERS: "swrast,amd,intel" - BUILDTYPE: "debugoptimized" - EXTRA_OPTION: > - -D valgrind=false - MINIO_ARTIFACT_NAME: mesa-amd64 - script: - - .gitlab-ci/lava/lava-pytest.sh - - .gitlab-ci/meson/build.sh - - .gitlab-ci/prepare-artifacts.sh - artifacts: - reports: - junit: artifacts/ci_scripts_report.xml - -debian-testing-asan: - extends: - - debian-testing - variables: - C_ARGS: > - -Wno-error=stringop-truncation - EXTRA_OPTION: > - -D b_sanitize=address - -D valgrind=false - -D tools=dlclose-skip - MINIO_ARTIFACT_NAME: "" - ARTIFACTS_DEBUG_SYMBOLS: 1 - -debian-testing-msan: - extends: - - debian-clang - variables: - # l_undef is incompatible with msan - EXTRA_OPTION: - -D b_sanitize=memory - -D b_lundef=false - MINIO_ARTIFACT_NAME: "" - ARTIFACTS_DEBUG_SYMBOLS: 1 - # Don't run all the tests yet: - # GLSL has some issues in sexpression reading. - # gtest has issues in its test initialization. - MESON_TEST_ARGS: "--suite glcpp --suite gallium --suite format" - # Freedreno dropped because freedreno tools fail at msan. - GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,radeonsi,tegra,d3d12,crocus" - VULKAN_DRIVERS: intel,amd,broadcom,virtio-experimental - -debian-clover-testing: - extends: - - .meson-build - - .ci-deqp-artifacts - variables: - UNWIND: "enabled" - DRI_LOADERS: > - -D glx=disabled - -D egl=disabled - -D gbm=disabled - GALLIUM_ST: > - -D gallium-opencl=icd - -D opencl-spirv=true - GALLIUM_DRIVERS: "swrast" - BUILDTYPE: "debugoptimized" - EXTRA_OPTION: > - -D valgrind=false - script: - - .gitlab-ci/meson/build.sh - - .gitlab-ci/prepare-artifacts.sh - -debian-gallium: - extends: .meson-build - variables: - UNWIND: "enabled" - DRI_LOADERS: > - -D glx=dri - -D gbm=enabled - -D egl=enabled - -D platforms=x11,wayland - GALLIUM_ST: > - -D dri3=enabled - -D gallium-extra-hud=true - -D gallium-vdpau=enabled - -D gallium-xvmc=enabled - -D gallium-omx=bellagio - -D gallium-va=enabled - -D gallium-xa=enabled - -D gallium-nine=true - -D gallium-opencl=disabled - GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12,asahi,crocus" - VULKAN_DRIVERS: swrast - EXTRA_OPTION: > - -D osmesa=true - -D tools=drm-shim,etnaviv,freedreno,glsl,intel,intel-ui,nir,nouveau,xvmc,lima,panfrost,asahi - script: - - .gitlab-ci/meson/build.sh - - .gitlab-ci/run-shader-db.sh - -# Test a release build with -Werror so new warnings don't sneak in. -debian-release: - extends: .meson-build - variables: - UNWIND: "enabled" - DRI_LOADERS: > - -D glx=dri - -D gbm=enabled - -D egl=enabled - -D platforms=x11,wayland - GALLIUM_ST: > - -D dri3=enabled - -D gallium-extra-hud=true - -D gallium-vdpau=enabled - -D gallium-xvmc=disabled - -D gallium-omx=disabled - -D gallium-va=enabled - -D gallium-xa=enabled - -D gallium-nine=false - -D gallium-opencl=disabled - -D llvm=enabled - GALLIUM_DRIVERS: "i915,iris,nouveau,kmsro,freedreno,r300,svga,swrast,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12,crocus" - VULKAN_DRIVERS: "amd,imagination-experimental" - BUILDTYPE: "release" - EXTRA_OPTION: > - -D osmesa=true - -D tools=all - -D intel-clc=enabled - -D imagination-srv=true - script: - - .gitlab-ci/meson/build.sh - -fedora-release: - extends: - - .meson-build - - .use-fedora/x86_build - variables: - BUILDTYPE: "release" - C_ARGS: > - -Wno-error=array-bounds - -Wno-error=maybe-uninitialized - -Wno-error=stringop-overread - -Wno-error=uninitialized - CPP_ARGS: > - -Wno-error=array-bounds - DRI_LOADERS: > - -D glx=dri - -D gbm=enabled - -D egl=enabled - -D glvnd=true - -D platforms=x11,wayland - EXTRA_OPTION: > - -D osmesa=true - -D selinux=true - -D tools=drm-shim,etnaviv,freedreno,glsl,intel,nir,nouveau,lima,panfrost,imagination - -D intel-clc=enabled - -D imagination-srv=true - GALLIUM_DRIVERS: "crocus,etnaviv,freedreno,iris,kmsro,lima,nouveau,panfrost,r300,r600,radeonsi,svga,swrast,tegra,v3d,vc4,virgl,zink" - GALLIUM_ST: > - -D dri3=enabled - -D gallium-extra-hud=true - -D gallium-vdpau=enabled - -D gallium-xvmc=disabled - -D gallium-omx=disabled - -D gallium-va=enabled - -D gallium-xa=enabled - -D gallium-nine=false - -D gallium-opencl=icd - -D gles1=disabled - -D gles2=enabled - -D llvm=enabled - -D microsoft-clc=disabled - -D shared-llvm=enabled - -D vulkan-device-select-layer=true - LLVM_VERSION: "" - UNWIND: "disabled" - VULKAN_DRIVERS: "amd,broadcom,freedreno,intel,imagination-experimental" - script: - - .gitlab-ci/meson/build.sh - -debian-android: - extends: - - .meson-cross - - .use-debian/android_build - variables: - UNWIND: "disabled" - C_ARGS: > - -Wno-error=asm-operand-widths - -Wno-error=constant-conversion - -Wno-error=enum-conversion - -Wno-error=initializer-overrides - -Wno-error=missing-braces - -Wno-error=sometimes-uninitialized - -Wno-error=unused-function - CPP_ARGS: > - -Wno-error=deprecated-declarations - DRI_LOADERS: > - -D glx=disabled - -D gbm=disabled - -D egl=enabled - -D platforms=android - EXTRA_OPTION: > - -D android-stub=true - -D llvm=disabled - -D platform-sdk-version=29 - -D valgrind=false - GALLIUM_ST: > - -D dri3=disabled - -D gallium-vdpau=disabled - -D gallium-xvmc=disabled - -D gallium-omx=disabled - -D gallium-va=disabled - -D gallium-xa=disabled - -D gallium-nine=false - -D gallium-opencl=disabled - LLVM_VERSION: "" - PKG_CONFIG_LIBDIR: "/disable/non/android/system/pc/files" - script: - - PKG_CONFIG_PATH=/usr/local/lib/aarch64-linux-android/pkgconfig/:/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/pkgconfig/ CROSS=aarch64-linux-android GALLIUM_DRIVERS=etnaviv,freedreno,lima,panfrost,vc4,v3d VULKAN_DRIVERS=freedreno,broadcom,virtio-experimental .gitlab-ci/meson/build.sh - # x86_64 build: - # Can't do Intel because gen_decoder.c currently requires libexpat, which - # is not a dependency that AOSP wants to accept. Can't do Radeon Gallium - # drivers because they requires LLVM, which we don't have an Android build - # of. - - PKG_CONFIG_PATH=/usr/local/lib/x86_64-linux-android/pkgconfig/:/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/pkgconfig/ CROSS=x86_64-linux-android GALLIUM_DRIVERS=iris VULKAN_DRIVERS=amd,intel .gitlab-ci/meson/build.sh - -.meson-cross: - extends: - - .meson-build - stage: build-misc - variables: - UNWIND: "disabled" - DRI_LOADERS: > - -D glx=dri - -D gbm=enabled - -D egl=enabled - -D platforms=x11 - -D osmesa=false - GALLIUM_ST: > - -D dri3=enabled - -D gallium-vdpau=disabled - -D gallium-xvmc=disabled - -D gallium-omx=disabled - -D gallium-va=disabled - -D gallium-xa=disabled - -D gallium-nine=false - -.meson-arm: - extends: - - .meson-cross - - .use-debian/arm_build - needs: - - debian/arm_build - variables: - VULKAN_DRIVERS: freedreno,broadcom - GALLIUM_DRIVERS: "etnaviv,freedreno,kmsro,lima,nouveau,panfrost,swrast,tegra,v3d,vc4" - BUILDTYPE: "debugoptimized" - tags: - - aarch64 - -debian-armhf: - extends: - - .meson-arm - - .ci-deqp-artifacts - variables: - CROSS: armhf - EXTRA_OPTION: > - -D llvm=disabled - -D valgrind=false - MINIO_ARTIFACT_NAME: mesa-armhf - script: - - .gitlab-ci/meson/build.sh - - .gitlab-ci/prepare-artifacts.sh - -debian-arm64: - extends: - - .meson-arm - - .ci-deqp-artifacts - variables: - VULKAN_DRIVERS: "freedreno,broadcom,panfrost,imagination-experimental" - EXTRA_OPTION: > - -D llvm=disabled - -D valgrind=false - -D imagination-srv=true - MINIO_ARTIFACT_NAME: mesa-arm64 - script: - - .gitlab-ci/meson/build.sh - - .gitlab-ci/prepare-artifacts.sh - -debian-arm64-asan: - extends: - - debian-arm64 - variables: - C_ARGS: > - -Wno-error=stringop-truncation - EXTRA_OPTION: > - -D llvm=disabled - -D b_sanitize=address - -D valgrind=false - -D tools=dlclose-skip - ARTIFACTS_DEBUG_SYMBOLS: 1 - MINIO_ARTIFACT_NAME: mesa-arm64-asan - MESON_TEST_ARGS: "--no-suite mesa:compiler" - -debian-arm64-build-test: - extends: - - .meson-arm - - .ci-deqp-artifacts - variables: - VULKAN_DRIVERS: "amd" - EXTRA_OPTION: > - -Dtools=panfrost,imagination - script: - - .gitlab-ci/meson/build.sh - -debian-clang: - extends: .meson-build - variables: - UNWIND: "enabled" - C_ARGS: > - -Wno-error=constant-conversion - -Wno-error=enum-conversion - -Wno-error=implicit-const-int-float-conversion - -Wno-error=initializer-overrides - -Wno-error=sometimes-uninitialized - -Wno-error=unused-function - CPP_ARGS: > - -Wno-error=c99-designator - -Wno-error=deprecated-declarations - -Wno-error=implicit-const-int-float-conversion - -Wno-error=missing-braces - -Wno-error=overloaded-virtual - -Wno-error=tautological-constant-out-of-range-compare - -Wno-error=unused-const-variable - -Wno-error=unused-private-field - DRI_LOADERS: > - -D glvnd=true - GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,radeonsi,tegra,d3d12,crocus,i915,asahi" - VULKAN_DRIVERS: intel,amd,freedreno,broadcom,virtio-experimental,swrast,panfrost,imagination-experimental - EXTRA_OPTIONS: - -D imagination-srv=true - CC: clang - CXX: clang++ - -windows-vs2019: - extends: - - .build-windows - - .use-windows_build_vs2019 - - .windows-build-rules - stage: build-misc - script: - - . .\.gitlab-ci\windows\mesa_build.ps1 - artifacts: - paths: - - _build/meson-logs/*.txt - - _install/ - -debian-clover: - extends: .meson-build - variables: - UNWIND: "enabled" - DRI_LOADERS: > - -D glx=disabled - -D egl=disabled - -D gbm=disabled - GALLIUM_DRIVERS: "r600,radeonsi" - GALLIUM_ST: > - -D dri3=disabled - -D gallium-vdpau=disabled - -D gallium-xvmc=disabled - -D gallium-omx=disabled - -D gallium-va=disabled - -D gallium-xa=disabled - -D gallium-nine=false - -D gallium-opencl=icd - EXTRA_OPTION: > - -D valgrind=false - script: - - LLVM_VERSION=9 GALLIUM_DRIVERS=r600,swrast .gitlab-ci/meson/build.sh - - .gitlab-ci/meson/build.sh - -debian-vulkan: - extends: .meson-build - variables: - UNWIND: "disabled" - DRI_LOADERS: > - -D glx=disabled - -D gbm=disabled - -D egl=disabled - -D platforms=x11,wayland - -D osmesa=false - GALLIUM_ST: > - -D dri3=enabled - -D gallium-vdpau=disabled - -D gallium-xvmc=disabled - -D gallium-omx=disabled - -D gallium-va=disabled - -D gallium-xa=disabled - -D gallium-nine=false - -D gallium-opencl=disabled - -D b_sanitize=undefined - -D c_args=-fno-sanitize-recover=all - -D cpp_args=-fno-sanitize-recover=all - UBSAN_OPTIONS: "print_stacktrace=1" - VULKAN_DRIVERS: intel,amd,freedreno,broadcom,virtio-experimental,imagination-experimental - EXTRA_OPTION: > - -D vulkan-layers=device-select,overlay - -D build-aco-tests=true - -D intel-clc=enabled - -D imagination-srv=true - -debian-i386: - extends: - - .meson-cross - - .use-debian/i386_build - variables: - CROSS: i386 - VULKAN_DRIVERS: intel,amd,swrast,virtio-experimental - GALLIUM_DRIVERS: "iris,nouveau,r300,r600,radeonsi,swrast,virgl,zink,crocus" - EXTRA_OPTION: > - -D vulkan-layers=device-select,overlay - -debian-s390x: - extends: - - debian-ppc64el - - .use-debian/s390x_build - - .s390x-rules - tags: - - kvm - variables: - CROSS: s390x - GALLIUM_DRIVERS: "swrast,zink" - # The lp_test_blend test times out with LLVM 11 - LLVM_VERSION: 9 - VULKAN_DRIVERS: "swrast" - -debian-ppc64el: - extends: - - .meson-cross - - .use-debian/ppc64el_build - - .ppc64el-rules - variables: - CROSS: ppc64el - GALLIUM_DRIVERS: "nouveau,radeonsi,swrast,virgl,zink" - VULKAN_DRIVERS: "amd,swrast" - -debian-mingw32-x86_64: - extends: .meson-build - stage: build-misc - variables: - UNWIND: "disabled" - C_ARGS: > - -Wno-error=format - -Wno-error=format-extra-args - CPP_ARGS: $C_ARGS - GALLIUM_DRIVERS: "swrast" - EXTRA_OPTION: > - -Dllvm=disabled - -Dzlib=disabled - -Dosmesa=true - --cross-file=.gitlab-ci/x86_64-w64-mingw32 - -.test: - extends: - - .ci-run-policy - # Cancel job if a newer commit is pushed to the same branch - interruptible: true - variables: - GIT_STRATEGY: none # testing doesn't build anything from source - before_script: - - !reference [default, before_script] - # Note: Build dir (and thus install) may be dirty due to GIT_STRATEGY - - rm -rf install - - tar -xf artifacts/install.tar - - echo -e "\e[0Ksection_start:$(date +%s):ldd_section[collapsed=true]\r\e[0KChecking ldd on driver build" - - LD_LIBRARY_PATH=install/lib find install/lib -name "*.so" -print -exec ldd {} \; - - echo -e "\e[0Ksection_end:$(date +%s):ldd_section\r\e[0K" - artifacts: - when: always - name: "mesa_${CI_JOB_NAME}" - paths: - - results/ - -.use-debian/x86_test-gl: - extends: - - .test - - .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 - -.test-gl: - extends: - - .use-debian/x86_test-gl - needs: - - debian/x86_test-gl - - debian-testing - -.use-debian/x86_test-vk: - extends: - - .test - - .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 - -.test-vk: - extends: - - .use-debian/x86_test-vk - needs: - - debian-testing - - debian/x86_test-vk - -.test-cl: - extends: - - .use-debian/x86_test-gl - needs: - - debian/x86_test-gl - - debian-clover-testing - -.vkd3d-proton-test: - artifacts: - when: on_failure - name: "mesa_${CI_JOB_NAME}" - paths: - - results/vkd3d-proton.log - script: - - ./install/vkd3d-proton/run.sh - -.piglit-test: - artifacts: - name: "mesa_${CI_JOB_NAME}" - paths: - - results - reports: - junit: results/junit.xml - variables: - PIGLIT_NO_WINDOW: 1 - HWCI_TEST_SCRIPT: "/install/piglit/piglit-runner.sh" - script: - - install/piglit/piglit-runner.sh - -.piglit-traces-test: - extends: - - .piglit-test - cache: - key: ${CI_JOB_NAME} - paths: - - replayer-db/ - artifacts: - when: on_failure - name: "mesa_${CI_JOB_NAME}" - reports: - junit: results/junit.xml - paths: - - results/summary/ - - results/*.txt - variables: - PIGLIT_REPLAY_EXTRA_ARGS: --keep-image --db-path ${CI_PROJECT_DIR}/replayer-db/ --minio_host=minio-packet.freedesktop.org --minio_bucket=mesa-tracie-public --role-session-name=${CI_PROJECT_PATH}:${CI_JOB_ID} --jwt-file=${CI_JOB_JWT_FILE} - script: - - install/piglit/piglit-traces.sh - -.deqp-test: - script: - - ./install/deqp-runner.sh - artifacts: - exclude: - - results/*.shader_cache - reports: - junit: results/junit.xml - -.deqp-test-vk: - extends: - - .deqp-test - variables: - DEQP_VER: vk - -.fossilize-test: - script: - - ./install/fossilize-runner.sh - artifacts: - when: on_failure - name: "mesa_${CI_JOB_NAME}" - paths: - - results/ - # Rules for tests that should not be present in MRs or the main # project's pipeline (don't block marge or report red on # mesa/mesa main) but should be present on pipelines in personal @@ -1373,209 +324,3 @@ debian-mingw32-x86_64: GIT_STRATEGY: none JOB_TIMEOUT: 80 -.baremetal-test: - extends: - - .ci-run-policy - - .test - # Cancel job if a newer commit is pushed to the same branch - interruptible: true - stage: test - before_script: - - !reference [default, before_script] - # Use this instead of gitlab's artifacts download because it hits packet.net - # instead of fd.o. Set FDO_HTTP_CACHE_URI to an http cache for your test lab to - # improve it even more (see https://docs.mesa3d.org/ci/bare-metal.html for - # setup). - - wget ${FDO_HTTP_CACHE_URI:-}https://${PIPELINE_ARTIFACTS_BASE}/${MINIO_ARTIFACT_NAME}.tar.gz -S --progress=dot:giga -O- | tar -xz - artifacts: - when: always - name: "mesa_${CI_JOB_NAME}" - paths: - - results/ - - serial*.txt - exclude: - - results/*.shader_cache - reports: - junit: results/junit.xml - -.baremetal-test-armhf: - extends: - - .baremetal-test - variables: - BM_ROOTFS: /rootfs-armhf - MINIO_ARTIFACT_NAME: mesa-armhf - -.baremetal-test-arm64: - extends: - - .baremetal-test - variables: - BM_ROOTFS: /rootfs-arm64 - MINIO_ARTIFACT_NAME: mesa-arm64 - -.baremetal-arm64-asan-test: - variables: - DEQP_RUNNER_OPTIONS: "--env LD_PRELOAD=libasan.so.6:/install/lib/libdlclose-skip.so" - MINIO_ARTIFACT_NAME: mesa-arm64-asan - needs: - - debian/arm_test - - job: debian-arm64-asan - artifacts: false - -.baremetal-deqp-test: - variables: - HWCI_TEST_SCRIPT: "/install/deqp-runner.sh" - FDO_CI_CONCURRENT: 0 # Default to number of CPUs - -.baremetal-skqp-test: - variables: - HWCI_START_XORG: 1 - HWCI_TEST_SCRIPT: "/install/skqp-runner.sh" - -# For Valve's bare-metal testing farm jobs. -.b2c-test: - # It would be nice to use ci-templates within Mesa CI for this job's - # image:, but the integration is not possible for the current - # use-case. Within this job, two containers are managed. 1) the - # gitlab runner container from which the job is submitted to the - # DUT, and 2) the test container (e.g. debian/x86_test-vk) within - # which the test cases will run on the DUT. Since ci-templates and - # the associated image setting macros in this file rely on variables - # like FDO_DISTRIBUTION_TAG for *the* image, there is no way to - # depend on more than one image per job. So, the job container is - # built as part of the CI in the boot2container project. - image: registry.freedesktop.org/mupuf/valve-infra/mesa-trigger:2022-03-03.2 - extends: - # Only pull in what is needed to build up the MESA_IMAGE (which is - # called for clarity IMAGE_UNDER_TEST). This is in distinction to - # the image within which the job runs on the runner machines. The - # IMAGE_UNDER_TEST is deployed to the DUTs. - - .incorporate-base-tag+templates-commit - variables: - # No need by default to pull the whole repo - GIT_STRATEGY: none - # boot2container initrd configuration parameters. - B2C_KERNEL_URL: 'https://gitlab.freedesktop.org/mupuf/valve-infra/-/package_files/117/download' # 5.16-for-mesa-ci - B2C_INITRAMFS_URL: 'https://gitlab.freedesktop.org/mupuf/boot2container/-/releases/v0.9.4/downloads/initramfs.linux_amd64.cpio.xz' - B2C_JOB_SUCCESS_REGEX: '\[.*\]: Execution is over, pipeline status: 0\r$' - B2C_JOB_WARN_REGEX: 'null' - B2C_LOG_LEVEL: 6 - B2C_POWEROFF_DELAY: 15 - B2C_SESSION_END_REGEX: '^.*It''s now safe to turn off your computer\r$' - B2C_SESSION_REBOOT_REGEX: 'GPU hang detected!' - B2C_TIMEOUT_BOOT_MINUTES: 240 - B2C_TIMEOUT_BOOT_RETRIES: 2 - B2C_TIMEOUT_FIRST_MINUTES: 5 - B2C_TIMEOUT_FIRST_RETRIES: 3 - B2C_TIMEOUT_MINUTES: 2 - B2C_TIMEOUT_OVERALL_MINUTES: 240 - B2C_TIMEOUT_RETRIES: 0 - - MESA_BASE_TAG: *debian-x86_test-base - MESA_IMAGE_PATH: "debian/x86_test-vk" - MESA_IMAGE_TAG: *debian-x86_test-vk - IMAGE_UNDER_TEST: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${FDO_DISTRIBUTION_TAG}" - - INSTALL_TARBALL: "./artifacts/install.tar" - CI_VALVE_ARTIFACTS: "./artifacts/valve" - CI_COMMON_SCRIPTS: "./artifacts/ci-common" - GENERATE_ENV_SCRIPT: "${CI_COMMON_SCRIPTS}/generate-env.sh" - B2C_JOB_TEMPLATE: "${CI_VALVE_ARTIFACTS}/b2c.yml.jinja2.jinja2" - JOB_FOLDER: "job_folder" - before_script: - # We don't want the tarball unpacking of .test, but will take the JWT bits. - - !reference [default, before_script] - - | - set -x - - # Useful as a hook point for runner admins. You may edit the - # config.toml for the Gitlab runner and use a bind-mount to - # populate the hook script with some executable commands. This - # allows quicker feedback than resubmitting pipelines and - # potentially having to wait for a debug build of Mesa to - # complete. - if [ -x /runner-before-script.sh ]; then - echo "Executing runner before-script hook..." - sh /runner-before-script.sh - if [ $? -ne 0 ]; then - echo "Runner hook failed, goodbye" - exit $? - fi - fi - - [ -s "$INSTALL_TARBALL" ] || exit 1 - [ -d "$CI_VALVE_ARTIFACTS" ] || exit 1 - [ -d "$CI_COMMON_SCRIPTS" ] || exit 1 - - - B2C_TEST_SCRIPT="bash -c 'source ./set-job-env-vars.sh ; ${B2C_TEST_SCRIPT}'" - - # The Valve CI gateway receives jobs in a YAML format. Create a - # job description from the CI environment. - python3 "$CI_VALVE_ARTIFACTS"/generate_b2c.py \ - --ci-job-id "${CI_JOB_ID}" \ - --container-cmd "${B2C_TEST_SCRIPT}" \ - --initramfs-url "${B2C_INITRAMFS_URL}" \ - --job-success-regex "${B2C_JOB_SUCCESS_REGEX}" \ - --job-warn-regex "${B2C_JOB_WARN_REGEX}" \ - --kernel-url "${B2C_KERNEL_URL}" \ - --log-level "${B2C_LOG_LEVEL}" \ - --poweroff-delay "${B2C_POWEROFF_DELAY}" \ - --session-end-regex "${B2C_SESSION_END_REGEX}" \ - --session-reboot-regex "${B2C_SESSION_REBOOT_REGEX}" \ - --tags "${CI_RUNNER_TAGS}" \ - --template "${B2C_JOB_TEMPLATE}" \ - --timeout-boot-minutes "${B2C_TIMEOUT_BOOT_MINUTES}" \ - --timeout-boot-retries "${B2C_TIMEOUT_BOOT_RETRIES}" \ - --timeout-first-minutes "${B2C_TIMEOUT_FIRST_MINUTES}" \ - --timeout-first-retries "${B2C_TIMEOUT_FIRST_RETRIES}" \ - --timeout-minutes "${B2C_TIMEOUT_MINUTES}" \ - --timeout-overall-minutes "${B2C_TIMEOUT_OVERALL_MINUTES}" \ - --timeout-retries "${B2C_TIMEOUT_RETRIES}" \ - --job-volume-exclusions "${B2C_JOB_VOLUME_EXCLUSIONS}" \ - --local-container "${IMAGE_UNDER_TEST}" \ - ${B2C_EXTRA_VOLUME_ARGS} \ - --working-dir "$CI_PROJECT_DIR" - - cat b2c.yml.jinja2 - - rm -rf ${JOB_FOLDER} || true - mkdir -v ${JOB_FOLDER} - # Create a script to regenerate the CI environment when this job - # begins running on the remote DUT. - set +x - "$CI_COMMON_SCRIPTS"/generate-env.sh > ${JOB_FOLDER}/set-job-env-vars.sh - chmod +x ${JOB_FOLDER}/set-job-env-vars.sh - echo "Variables passed through:" - cat ${JOB_FOLDER}/set-job-env-vars.sh - echo "export CI_JOB_JWT=${CI_JOB_JWT}" >> ${JOB_FOLDER}/set-job-env-vars.sh - set -x - - # Extract the Mesa distribution into the location expected by - # the Mesa CI deqp-runner scripts. - tar x -C ${JOB_FOLDER} -f $INSTALL_TARBALL - - script: | - slugify () { - echo "$1" | sed -r s/[~\^]+//g | sed -r s/[^a-zA-Z0-9]+/-/g | sed -r s/^-+\|-+$//g | tr A-Z a-z - } - - # Submit the job to Valve's CI gateway service with the CI - # provisioned job_folder. - env PYTHONUNBUFFERED=1 executorctl \ - run -w b2c.yml.jinja2 -j $(slugify "$CI_JOB_NAME") -s ${JOB_FOLDER} - - ls -l - # Anything our job places in results/ will be collected by the - # Gitlab coordinator for status presentation. results/junit.xml - # will be parsed by the UI for more detailed explanations of - # test execution. - needs: - - debian/x86_test-vk - - debian-testing - artifacts: - when: always - name: "mesa_${CI_JOB_NAME}" - paths: - - ${JOB_FOLDER}/results - reports: - junit: ${JOB_FOLDER}/results/junit.xml diff --git a/.gitlab-ci/build/gitlab-ci.yml b/.gitlab-ci/build/gitlab-ci.yml new file mode 100644 index 00000000000..e49f62e1199 --- /dev/null +++ b/.gitlab-ci/build/gitlab-ci.yml @@ -0,0 +1,525 @@ +# Shared between windows and Linux +.build-common: + extends: .ci-run-policy + # Cancel job if a newer commit is pushed to the same branch + interruptible: true + artifacts: + name: "mesa_${CI_JOB_NAME}" + when: always + paths: + - _build/meson-logs/*.txt + - _build/meson-logs/strace + - shader-db + +# Just Linux +.build-linux: + extends: .build-common + variables: + CCACHE_COMPILERCHECK: "content" + CCACHE_COMPRESS: "true" + CCACHE_DIR: /cache/mesa/ccache + # Use ccache transparently, and print stats before/after + before_script: + - !reference [default, before_script] + - export PATH="/usr/lib/ccache:$PATH" + - export CCACHE_BASEDIR="$PWD" + - echo -e "\e[0Ksection_start:$(date +%s):ccache_before[collapsed=true]\r\e[0Kccache stats before build" + - ccache --show-stats + - echo -e "\e[0Ksection_end:$(date +%s):ccache_before\r\e[0K" + after_script: + - echo -e "\e[0Ksection_start:$(date +%s):ccache_after[collapsed=true]\r\e[0Kccache stats after build" + - ccache --show-stats + - echo -e "\e[0Ksection_end:$(date +%s):ccache_after\r\e[0K" + - !reference [default, after_script] + +.build-windows: + extends: .build-common + tags: + - windows + - docker + - "1809" + - mesa + cache: + key: ${CI_JOB_NAME} + paths: + - subprojects/packagecache + +.meson-build: + extends: + - .build-linux + - .use-debian/x86_build + stage: build-x86_64 + variables: + LLVM_VERSION: 11 + script: + - .gitlab-ci/meson/build.sh + +debian-testing: + extends: + - .meson-build + - .ci-deqp-artifacts + variables: + UNWIND: "enabled" + DRI_LOADERS: > + -D glx=dri + -D gbm=enabled + -D egl=enabled + -D platforms=x11 + GALLIUM_ST: > + -D dri3=enabled + -D gallium-va=enabled + GALLIUM_DRIVERS: "swrast,virgl,radeonsi,zink,crocus,iris,i915" + VULKAN_DRIVERS: "swrast,amd,intel" + BUILDTYPE: "debugoptimized" + EXTRA_OPTION: > + -D valgrind=false + MINIO_ARTIFACT_NAME: mesa-amd64 + script: + - .gitlab-ci/lava/lava-pytest.sh + - .gitlab-ci/meson/build.sh + - .gitlab-ci/prepare-artifacts.sh + artifacts: + reports: + junit: artifacts/ci_scripts_report.xml + +debian-testing-asan: + extends: + - debian-testing + variables: + C_ARGS: > + -Wno-error=stringop-truncation + EXTRA_OPTION: > + -D b_sanitize=address + -D valgrind=false + -D tools=dlclose-skip + MINIO_ARTIFACT_NAME: "" + ARTIFACTS_DEBUG_SYMBOLS: 1 + +debian-testing-msan: + extends: + - debian-clang + variables: + # l_undef is incompatible with msan + EXTRA_OPTION: + -D b_sanitize=memory + -D b_lundef=false + MINIO_ARTIFACT_NAME: "" + ARTIFACTS_DEBUG_SYMBOLS: 1 + # Don't run all the tests yet: + # GLSL has some issues in sexpression reading. + # gtest has issues in its test initialization. + MESON_TEST_ARGS: "--suite glcpp --suite gallium --suite format" + # Freedreno dropped because freedreno tools fail at msan. + GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,radeonsi,tegra,d3d12,crocus" + VULKAN_DRIVERS: intel,amd,broadcom,virtio-experimental + +debian-clover-testing: + extends: + - .meson-build + - .ci-deqp-artifacts + variables: + UNWIND: "enabled" + DRI_LOADERS: > + -D glx=disabled + -D egl=disabled + -D gbm=disabled + GALLIUM_ST: > + -D gallium-opencl=icd + -D opencl-spirv=true + GALLIUM_DRIVERS: "swrast" + BUILDTYPE: "debugoptimized" + EXTRA_OPTION: > + -D valgrind=false + script: + - .gitlab-ci/meson/build.sh + - .gitlab-ci/prepare-artifacts.sh + +debian-gallium: + extends: .meson-build + variables: + UNWIND: "enabled" + DRI_LOADERS: > + -D glx=dri + -D gbm=enabled + -D egl=enabled + -D platforms=x11,wayland + GALLIUM_ST: > + -D dri3=enabled + -D gallium-extra-hud=true + -D gallium-vdpau=enabled + -D gallium-xvmc=enabled + -D gallium-omx=bellagio + -D gallium-va=enabled + -D gallium-xa=enabled + -D gallium-nine=true + -D gallium-opencl=disabled + GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12,asahi,crocus" + VULKAN_DRIVERS: swrast + EXTRA_OPTION: > + -D osmesa=true + -D tools=drm-shim,etnaviv,freedreno,glsl,intel,intel-ui,nir,nouveau,xvmc,lima,panfrost,asahi + script: + - .gitlab-ci/meson/build.sh + - .gitlab-ci/run-shader-db.sh + +# Test a release build with -Werror so new warnings don't sneak in. +debian-release: + extends: .meson-build + variables: + UNWIND: "enabled" + DRI_LOADERS: > + -D glx=dri + -D gbm=enabled + -D egl=enabled + -D platforms=x11,wayland + GALLIUM_ST: > + -D dri3=enabled + -D gallium-extra-hud=true + -D gallium-vdpau=enabled + -D gallium-xvmc=disabled + -D gallium-omx=disabled + -D gallium-va=enabled + -D gallium-xa=enabled + -D gallium-nine=false + -D gallium-opencl=disabled + -D llvm=enabled + GALLIUM_DRIVERS: "i915,iris,nouveau,kmsro,freedreno,r300,svga,swrast,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12,crocus" + VULKAN_DRIVERS: "amd,imagination-experimental" + BUILDTYPE: "release" + EXTRA_OPTION: > + -D osmesa=true + -D tools=all + -D intel-clc=enabled + -D imagination-srv=true + script: + - .gitlab-ci/meson/build.sh + +fedora-release: + extends: + - .meson-build + - .use-fedora/x86_build + variables: + BUILDTYPE: "release" + C_ARGS: > + -Wno-error=array-bounds + -Wno-error=maybe-uninitialized + -Wno-error=stringop-overread + -Wno-error=uninitialized + CPP_ARGS: > + -Wno-error=array-bounds + DRI_LOADERS: > + -D glx=dri + -D gbm=enabled + -D egl=enabled + -D glvnd=true + -D platforms=x11,wayland + EXTRA_OPTION: > + -D osmesa=true + -D selinux=true + -D tools=drm-shim,etnaviv,freedreno,glsl,intel,nir,nouveau,lima,panfrost,imagination + -D intel-clc=enabled + -D imagination-srv=true + GALLIUM_DRIVERS: "crocus,etnaviv,freedreno,iris,kmsro,lima,nouveau,panfrost,r300,r600,radeonsi,svga,swrast,tegra,v3d,vc4,virgl,zink" + GALLIUM_ST: > + -D dri3=enabled + -D gallium-extra-hud=true + -D gallium-vdpau=enabled + -D gallium-xvmc=disabled + -D gallium-omx=disabled + -D gallium-va=enabled + -D gallium-xa=enabled + -D gallium-nine=false + -D gallium-opencl=icd + -D gles1=disabled + -D gles2=enabled + -D llvm=enabled + -D microsoft-clc=disabled + -D shared-llvm=enabled + -D vulkan-device-select-layer=true + LLVM_VERSION: "" + UNWIND: "disabled" + VULKAN_DRIVERS: "amd,broadcom,freedreno,intel,imagination-experimental" + script: + - .gitlab-ci/meson/build.sh + +debian-android: + extends: + - .meson-cross + - .use-debian/android_build + variables: + UNWIND: "disabled" + C_ARGS: > + -Wno-error=asm-operand-widths + -Wno-error=constant-conversion + -Wno-error=enum-conversion + -Wno-error=initializer-overrides + -Wno-error=missing-braces + -Wno-error=sometimes-uninitialized + -Wno-error=unused-function + CPP_ARGS: > + -Wno-error=deprecated-declarations + DRI_LOADERS: > + -D glx=disabled + -D gbm=disabled + -D egl=enabled + -D platforms=android + EXTRA_OPTION: > + -D android-stub=true + -D llvm=disabled + -D platform-sdk-version=29 + -D valgrind=false + GALLIUM_ST: > + -D dri3=disabled + -D gallium-vdpau=disabled + -D gallium-xvmc=disabled + -D gallium-omx=disabled + -D gallium-va=disabled + -D gallium-xa=disabled + -D gallium-nine=false + -D gallium-opencl=disabled + LLVM_VERSION: "" + PKG_CONFIG_LIBDIR: "/disable/non/android/system/pc/files" + script: + - PKG_CONFIG_PATH=/usr/local/lib/aarch64-linux-android/pkgconfig/:/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/pkgconfig/ CROSS=aarch64-linux-android GALLIUM_DRIVERS=etnaviv,freedreno,lima,panfrost,vc4,v3d VULKAN_DRIVERS=freedreno,broadcom,virtio-experimental .gitlab-ci/meson/build.sh + # x86_64 build: + # Can't do Intel because gen_decoder.c currently requires libexpat, which + # is not a dependency that AOSP wants to accept. Can't do Radeon Gallium + # drivers because they requires LLVM, which we don't have an Android build + # of. + - PKG_CONFIG_PATH=/usr/local/lib/x86_64-linux-android/pkgconfig/:/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/pkgconfig/ CROSS=x86_64-linux-android GALLIUM_DRIVERS=iris VULKAN_DRIVERS=amd,intel .gitlab-ci/meson/build.sh + +.meson-cross: + extends: + - .meson-build + stage: build-misc + variables: + UNWIND: "disabled" + DRI_LOADERS: > + -D glx=dri + -D gbm=enabled + -D egl=enabled + -D platforms=x11 + -D osmesa=false + GALLIUM_ST: > + -D dri3=enabled + -D gallium-vdpau=disabled + -D gallium-xvmc=disabled + -D gallium-omx=disabled + -D gallium-va=disabled + -D gallium-xa=disabled + -D gallium-nine=false + +.meson-arm: + extends: + - .meson-cross + - .use-debian/arm_build + needs: + - debian/arm_build + variables: + VULKAN_DRIVERS: freedreno,broadcom + GALLIUM_DRIVERS: "etnaviv,freedreno,kmsro,lima,nouveau,panfrost,swrast,tegra,v3d,vc4" + BUILDTYPE: "debugoptimized" + tags: + - aarch64 + +debian-armhf: + extends: + - .meson-arm + - .ci-deqp-artifacts + variables: + CROSS: armhf + EXTRA_OPTION: > + -D llvm=disabled + -D valgrind=false + MINIO_ARTIFACT_NAME: mesa-armhf + script: + - .gitlab-ci/meson/build.sh + - .gitlab-ci/prepare-artifacts.sh + +debian-arm64: + extends: + - .meson-arm + - .ci-deqp-artifacts + variables: + VULKAN_DRIVERS: "freedreno,broadcom,panfrost,imagination-experimental" + EXTRA_OPTION: > + -D llvm=disabled + -D valgrind=false + -D imagination-srv=true + MINIO_ARTIFACT_NAME: mesa-arm64 + script: + - .gitlab-ci/meson/build.sh + - .gitlab-ci/prepare-artifacts.sh + +debian-arm64-asan: + extends: + - debian-arm64 + variables: + C_ARGS: > + -Wno-error=stringop-truncation + EXTRA_OPTION: > + -D llvm=disabled + -D b_sanitize=address + -D valgrind=false + -D tools=dlclose-skip + ARTIFACTS_DEBUG_SYMBOLS: 1 + MINIO_ARTIFACT_NAME: mesa-arm64-asan + MESON_TEST_ARGS: "--no-suite mesa:compiler" + +debian-arm64-build-test: + extends: + - .meson-arm + - .ci-deqp-artifacts + variables: + VULKAN_DRIVERS: "amd" + EXTRA_OPTION: > + -Dtools=panfrost,imagination + script: + - .gitlab-ci/meson/build.sh + +debian-clang: + extends: .meson-build + variables: + UNWIND: "enabled" + C_ARGS: > + -Wno-error=constant-conversion + -Wno-error=enum-conversion + -Wno-error=implicit-const-int-float-conversion + -Wno-error=initializer-overrides + -Wno-error=sometimes-uninitialized + -Wno-error=unused-function + CPP_ARGS: > + -Wno-error=c99-designator + -Wno-error=deprecated-declarations + -Wno-error=implicit-const-int-float-conversion + -Wno-error=missing-braces + -Wno-error=overloaded-virtual + -Wno-error=tautological-constant-out-of-range-compare + -Wno-error=unused-const-variable + -Wno-error=unused-private-field + DRI_LOADERS: > + -D glvnd=true + GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,radeonsi,tegra,d3d12,crocus,i915,asahi" + VULKAN_DRIVERS: intel,amd,freedreno,broadcom,virtio-experimental,swrast,panfrost,imagination-experimental + EXTRA_OPTIONS: + -D imagination-srv=true + CC: clang + CXX: clang++ + +windows-vs2019: + extends: + - .build-windows + - .use-windows_build_vs2019 + - .windows-build-rules + stage: build-misc + script: + - . .\.gitlab-ci\windows\mesa_build.ps1 + artifacts: + paths: + - _build/meson-logs/*.txt + - _install/ + +debian-clover: + extends: .meson-build + variables: + UNWIND: "enabled" + DRI_LOADERS: > + -D glx=disabled + -D egl=disabled + -D gbm=disabled + GALLIUM_DRIVERS: "r600,radeonsi" + GALLIUM_ST: > + -D dri3=disabled + -D gallium-vdpau=disabled + -D gallium-xvmc=disabled + -D gallium-omx=disabled + -D gallium-va=disabled + -D gallium-xa=disabled + -D gallium-nine=false + -D gallium-opencl=icd + EXTRA_OPTION: > + -D valgrind=false + script: + - LLVM_VERSION=9 GALLIUM_DRIVERS=r600,swrast .gitlab-ci/meson/build.sh + - .gitlab-ci/meson/build.sh + +debian-vulkan: + extends: .meson-build + variables: + UNWIND: "disabled" + DRI_LOADERS: > + -D glx=disabled + -D gbm=disabled + -D egl=disabled + -D platforms=x11,wayland + -D osmesa=false + GALLIUM_ST: > + -D dri3=enabled + -D gallium-vdpau=disabled + -D gallium-xvmc=disabled + -D gallium-omx=disabled + -D gallium-va=disabled + -D gallium-xa=disabled + -D gallium-nine=false + -D gallium-opencl=disabled + -D b_sanitize=undefined + -D c_args=-fno-sanitize-recover=all + -D cpp_args=-fno-sanitize-recover=all + UBSAN_OPTIONS: "print_stacktrace=1" + VULKAN_DRIVERS: intel,amd,freedreno,broadcom,virtio-experimental,imagination-experimental + EXTRA_OPTION: > + -D vulkan-layers=device-select,overlay + -D build-aco-tests=true + -D intel-clc=enabled + -D imagination-srv=true + +debian-i386: + extends: + - .meson-cross + - .use-debian/i386_build + variables: + CROSS: i386 + VULKAN_DRIVERS: intel,amd,swrast,virtio-experimental + GALLIUM_DRIVERS: "iris,nouveau,r300,r600,radeonsi,swrast,virgl,zink,crocus" + EXTRA_OPTION: > + -D vulkan-layers=device-select,overlay + +debian-s390x: + extends: + - debian-ppc64el + - .use-debian/s390x_build + - .s390x-rules + tags: + - kvm + variables: + CROSS: s390x + GALLIUM_DRIVERS: "swrast,zink" + # The lp_test_blend test times out with LLVM 11 + LLVM_VERSION: 9 + VULKAN_DRIVERS: "swrast" + +debian-ppc64el: + extends: + - .meson-cross + - .use-debian/ppc64el_build + - .ppc64el-rules + variables: + CROSS: ppc64el + GALLIUM_DRIVERS: "nouveau,radeonsi,swrast,virgl,zink" + VULKAN_DRIVERS: "amd,swrast" + +debian-mingw32-x86_64: + extends: .meson-build + stage: build-misc + variables: + UNWIND: "disabled" + C_ARGS: > + -Wno-error=format + -Wno-error=format-extra-args + CPP_ARGS: $C_ARGS + GALLIUM_DRIVERS: "swrast" + EXTRA_OPTION: > + -Dllvm=disabled + -Dzlib=disabled + -Dosmesa=true + --cross-file=.gitlab-ci/x86_64-w64-mingw32 diff --git a/.gitlab-ci/container/gitlab-ci.yml b/.gitlab-ci/container/gitlab-ci.yml new file mode 100644 index 00000000000..a79c0d1391b --- /dev/null +++ b/.gitlab-ci/container/gitlab-ci.yml @@ -0,0 +1,414 @@ +# 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 +# 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 + variables: + FDO_DISTRIBUTION_VERSION: bullseye-slim + FDO_REPO_SUFFIX: $CI_JOB_NAME + FDO_DISTRIBUTION_EXEC: 'env FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} 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 + - .ci-run-policy + +# 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 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: + 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: + FDO_DISTRIBUTION_EXEC: 'env KERNEL_URL=${KERNEL_URL} FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash .gitlab-ci/container/${CI_JOB_NAME}.sh' + KERNEL_URL: &kernel-rootfs-url "https://gitlab.freedesktop.org/gfx-ci/linux/-/archive/v5.16-for-mesa-ci-991fec6622591/linux-v5.16-for-mesa-ci-991fec6622591.tar.bz2" + 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: + - .ci-run-policy + 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 + - .ci-run-policy + needs: + - kernel+rootfs_arm64 + - kernel+rootfs_armhf + variables: + FDO_DISTRIBUTION_EXEC: 'env ARTIFACTS_PREFIX=https://${MINIO_HOST}/mesa-lava ARTIFACTS_SUFFIX=${MESA_ROOTFS_TAG}--${MESA_ARM_BUILD_TAG}--${MESA_TEMPLATES_COMMIT} CI_PROJECT_PATH=${CI_PROJECT_PATH} FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} FDO_UPSTREAM_REPO=${FDO_UPSTREAM_REPO} bash .gitlab-ci/container/${CI_JOB_NAME}.sh' + FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${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: false + extends: + - .container + - .windows-docker-vs2019 + variables: + GIT_STRATEGY: fetch # we do actually need the full repository though + MESA_BASE_IMAGE: None + tags: + - windows + - shell + - "1809" + - 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_build_vs2019: + inherit: + default: false + extends: + - .windows_container_build + variables: + MESA_IMAGE_PATH: &windows_build_image_path ${WINDOWS_X64_BUILD_PATH} + MESA_IMAGE_TAG: &windows_build_image_tag ${WINDOWS_X64_BUILD_TAG} + DOCKERFILE: Dockerfile_build + timeout: 2h 30m # LLVM takes ages + +windows_test_vs2019: + inherit: + default: false + extends: + - .windows_container_build + # Don't want the .container rules + - .ci-run-policy + variables: + MESA_IMAGE_PATH: &windows_test_image_path ${WINDOWS_X64_TEST_PATH} + MESA_IMAGE_TAG: &windows_test_image_tag ${WINDOWS_X64_BUILD_TAG}--${WINDOWS_X64_TEST_TAG} + DOCKERFILE: Dockerfile_test + # Right now this only needs the VS install to get DXIL.dll. Maybe see about decoupling this at some point + MESA_BASE_IMAGE_PATH: *windows_build_image_path + MESA_BASE_IMAGE_TAG: *windows_build_image_tag + MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${MESA_BASE_IMAGE_TAG}" + script: + - .\.gitlab-ci\windows\mesa_container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $MESA_IMAGE $MESA_UPSTREAM_IMAGE Dockerfile_test ${MESA_BASE_IMAGE} + needs: + - windows_build_vs2019 + +.use-windows_build_vs2019: + inherit: + default: false + extends: .windows-docker-vs2019 + image: "$MESA_IMAGE" + variables: + MESA_IMAGE_PATH: *windows_build_image_path + MESA_IMAGE_TAG: *windows_build_image_tag + needs: + - windows_build_vs2019 + +.use-windows_test_vs2019: + inherit: + default: false + extends: .windows-docker-vs2019 + image: "$MESA_IMAGE" + variables: + MESA_IMAGE_PATH: *windows_test_image_path + MESA_IMAGE_TAG: *windows_test_image_tag \ No newline at end of file diff --git a/.gitlab-ci/test/gitlab-ci.yml b/.gitlab-ci/test/gitlab-ci.yml new file mode 100644 index 00000000000..585e4474c17 --- /dev/null +++ b/.gitlab-ci/test/gitlab-ci.yml @@ -0,0 +1,315 @@ +.test: + extends: + - .ci-run-policy + # Cancel job if a newer commit is pushed to the same branch + interruptible: true + variables: + GIT_STRATEGY: none # testing doesn't build anything from source + before_script: + - !reference [default, before_script] + # Note: Build dir (and thus install) may be dirty due to GIT_STRATEGY + - rm -rf install + - tar -xf artifacts/install.tar + - echo -e "\e[0Ksection_start:$(date +%s):ldd_section[collapsed=true]\r\e[0KChecking ldd on driver build" + - LD_LIBRARY_PATH=install/lib find install/lib -name "*.so" -print -exec ldd {} \; + - echo -e "\e[0Ksection_end:$(date +%s):ldd_section\r\e[0K" + artifacts: + when: always + name: "mesa_${CI_JOB_NAME}" + paths: + - results/ + +.test-gl: + extends: + - .test + - .use-debian/x86_test-gl + needs: + - debian/x86_test-gl + - debian-testing + +.test-vk: + extends: + - .test + - .use-debian/x86_test-vk + needs: + - debian-testing + - debian/x86_test-vk + +.test-cl: + extends: + - .test + - .use-debian/x86_test-gl + needs: + - debian/x86_test-gl + - debian-clover-testing + +.vkd3d-proton-test: + artifacts: + when: on_failure + name: "mesa_${CI_JOB_NAME}" + paths: + - results/vkd3d-proton.log + script: + - ./install/vkd3d-proton/run.sh + +.piglit-test: + artifacts: + name: "mesa_${CI_JOB_NAME}" + paths: + - results + reports: + junit: results/junit.xml + variables: + PIGLIT_NO_WINDOW: 1 + HWCI_TEST_SCRIPT: "/install/piglit/piglit-runner.sh" + script: + - install/piglit/piglit-runner.sh + +.piglit-traces-test: + extends: + - .piglit-test + cache: + key: ${CI_JOB_NAME} + paths: + - replayer-db/ + artifacts: + when: on_failure + name: "mesa_${CI_JOB_NAME}" + reports: + junit: results/junit.xml + paths: + - results/summary/ + - results/*.txt + variables: + PIGLIT_REPLAY_EXTRA_ARGS: --keep-image --db-path ${CI_PROJECT_DIR}/replayer-db/ --minio_host=minio-packet.freedesktop.org --minio_bucket=mesa-tracie-public --role-session-name=${CI_PROJECT_PATH}:${CI_JOB_ID} --jwt-file=${CI_JOB_JWT_FILE} + script: + - install/piglit/piglit-traces.sh + +.deqp-test: + script: + - ./install/deqp-runner.sh + artifacts: + exclude: + - results/*.shader_cache + reports: + junit: results/junit.xml + +.deqp-test-vk: + extends: + - .deqp-test + variables: + DEQP_VER: vk + +.fossilize-test: + script: + - ./install/fossilize-runner.sh + artifacts: + when: on_failure + name: "mesa_${CI_JOB_NAME}" + paths: + - results/ + +.baremetal-test: + extends: + - .ci-run-policy + - .test + # Cancel job if a newer commit is pushed to the same branch + interruptible: true + stage: test + before_script: + - !reference [default, before_script] + # Use this instead of gitlab's artifacts download because it hits packet.net + # instead of fd.o. Set FDO_HTTP_CACHE_URI to an http cache for your test lab to + # improve it even more (see https://docs.mesa3d.org/ci/bare-metal.html for + # setup). + - wget ${FDO_HTTP_CACHE_URI:-}https://${PIPELINE_ARTIFACTS_BASE}/${MINIO_ARTIFACT_NAME}.tar.gz -S --progress=dot:giga -O- | tar -xz + artifacts: + when: always + name: "mesa_${CI_JOB_NAME}" + paths: + - results/ + - serial*.txt + exclude: + - results/*.shader_cache + reports: + junit: results/junit.xml + +.baremetal-test-armhf: + extends: + - .baremetal-test + variables: + BM_ROOTFS: /rootfs-armhf + MINIO_ARTIFACT_NAME: mesa-armhf + +.baremetal-test-arm64: + extends: + - .baremetal-test + variables: + BM_ROOTFS: /rootfs-arm64 + MINIO_ARTIFACT_NAME: mesa-arm64 + +.baremetal-arm64-asan-test: + variables: + DEQP_RUNNER_OPTIONS: "--env LD_PRELOAD=libasan.so.6:/install/lib/libdlclose-skip.so" + MINIO_ARTIFACT_NAME: mesa-arm64-asan + needs: + - debian/arm_test + - job: debian-arm64-asan + artifacts: false + +.baremetal-deqp-test: + variables: + HWCI_TEST_SCRIPT: "/install/deqp-runner.sh" + FDO_CI_CONCURRENT: 0 # Default to number of CPUs + +.baremetal-skqp-test: + variables: + HWCI_START_XORG: 1 + HWCI_TEST_SCRIPT: "/install/skqp-runner.sh" + +# For Valve's bare-metal testing farm jobs. +.b2c-test: + # It would be nice to use ci-templates within Mesa CI for this job's + # image:, but the integration is not possible for the current + # use-case. Within this job, two containers are managed. 1) the + # gitlab runner container from which the job is submitted to the + # DUT, and 2) the test container (e.g. debian/x86_test-vk) within + # which the test cases will run on the DUT. Since ci-templates and + # the associated image setting macros in this file rely on variables + # like FDO_DISTRIBUTION_TAG for *the* image, there is no way to + # depend on more than one image per job. So, the job container is + # built as part of the CI in the boot2container project. + image: registry.freedesktop.org/mupuf/valve-infra/mesa-trigger:2022-03-03.2 + extends: + # Only pull in what is needed to build up the MESA_IMAGE (which is + # called for clarity IMAGE_UNDER_TEST). This is in distinction to + # the image within which the job runs on the runner machines. The + # IMAGE_UNDER_TEST is deployed to the DUTs. + - .incorporate-base-tag+templates-commit + variables: + # No need by default to pull the whole repo + GIT_STRATEGY: none + # boot2container initrd configuration parameters. + B2C_KERNEL_URL: 'https://gitlab.freedesktop.org/mupuf/valve-infra/-/package_files/117/download' # 5.16-for-mesa-ci + B2C_INITRAMFS_URL: 'https://gitlab.freedesktop.org/mupuf/boot2container/-/releases/v0.9.4/downloads/initramfs.linux_amd64.cpio.xz' + B2C_JOB_SUCCESS_REGEX: '\[.*\]: Execution is over, pipeline status: 0\r$' + B2C_JOB_WARN_REGEX: 'null' + B2C_LOG_LEVEL: 6 + B2C_POWEROFF_DELAY: 15 + B2C_SESSION_END_REGEX: '^.*It''s now safe to turn off your computer\r$' + B2C_SESSION_REBOOT_REGEX: 'GPU hang detected!' + B2C_TIMEOUT_BOOT_MINUTES: 240 + B2C_TIMEOUT_BOOT_RETRIES: 2 + B2C_TIMEOUT_FIRST_MINUTES: 5 + B2C_TIMEOUT_FIRST_RETRIES: 3 + B2C_TIMEOUT_MINUTES: 2 + B2C_TIMEOUT_OVERALL_MINUTES: 240 + B2C_TIMEOUT_RETRIES: 0 + + MESA_IMAGE_PATH: "debian/x86_test-vk" + IMAGE_UNDER_TEST: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${FDO_DISTRIBUTION_TAG}" + + INSTALL_TARBALL: "./artifacts/install.tar" + CI_VALVE_ARTIFACTS: "./artifacts/valve" + CI_COMMON_SCRIPTS: "./artifacts/ci-common" + GENERATE_ENV_SCRIPT: "${CI_COMMON_SCRIPTS}/generate-env.sh" + B2C_JOB_TEMPLATE: "${CI_VALVE_ARTIFACTS}/b2c.yml.jinja2.jinja2" + JOB_FOLDER: "job_folder" + before_script: + # We don't want the tarball unpacking of .test, but will take the JWT bits. + - !reference [default, before_script] + - | + set -x + + # Useful as a hook point for runner admins. You may edit the + # config.toml for the Gitlab runner and use a bind-mount to + # populate the hook script with some executable commands. This + # allows quicker feedback than resubmitting pipelines and + # potentially having to wait for a debug build of Mesa to + # complete. + if [ -x /runner-before-script.sh ]; then + echo "Executing runner before-script hook..." + sh /runner-before-script.sh + if [ $? -ne 0 ]; then + echo "Runner hook failed, goodbye" + exit $? + fi + fi + + [ -s "$INSTALL_TARBALL" ] || exit 1 + [ -d "$CI_VALVE_ARTIFACTS" ] || exit 1 + [ -d "$CI_COMMON_SCRIPTS" ] || exit 1 + + + B2C_TEST_SCRIPT="bash -c 'source ./set-job-env-vars.sh ; ${B2C_TEST_SCRIPT}'" + + # The Valve CI gateway receives jobs in a YAML format. Create a + # job description from the CI environment. + python3 "$CI_VALVE_ARTIFACTS"/generate_b2c.py \ + --ci-job-id "${CI_JOB_ID}" \ + --container-cmd "${B2C_TEST_SCRIPT}" \ + --initramfs-url "${B2C_INITRAMFS_URL}" \ + --job-success-regex "${B2C_JOB_SUCCESS_REGEX}" \ + --job-warn-regex "${B2C_JOB_WARN_REGEX}" \ + --kernel-url "${B2C_KERNEL_URL}" \ + --log-level "${B2C_LOG_LEVEL}" \ + --poweroff-delay "${B2C_POWEROFF_DELAY}" \ + --session-end-regex "${B2C_SESSION_END_REGEX}" \ + --session-reboot-regex "${B2C_SESSION_REBOOT_REGEX}" \ + --tags "${CI_RUNNER_TAGS}" \ + --template "${B2C_JOB_TEMPLATE}" \ + --timeout-boot-minutes "${B2C_TIMEOUT_BOOT_MINUTES}" \ + --timeout-boot-retries "${B2C_TIMEOUT_BOOT_RETRIES}" \ + --timeout-first-minutes "${B2C_TIMEOUT_FIRST_MINUTES}" \ + --timeout-first-retries "${B2C_TIMEOUT_FIRST_RETRIES}" \ + --timeout-minutes "${B2C_TIMEOUT_MINUTES}" \ + --timeout-overall-minutes "${B2C_TIMEOUT_OVERALL_MINUTES}" \ + --timeout-retries "${B2C_TIMEOUT_RETRIES}" \ + --job-volume-exclusions "${B2C_JOB_VOLUME_EXCLUSIONS}" \ + --local-container "${IMAGE_UNDER_TEST}" \ + ${B2C_EXTRA_VOLUME_ARGS} \ + --working-dir "$CI_PROJECT_DIR" + + cat b2c.yml.jinja2 + + rm -rf ${JOB_FOLDER} || true + mkdir -v ${JOB_FOLDER} + # Create a script to regenerate the CI environment when this job + # begins running on the remote DUT. + set +x + "$CI_COMMON_SCRIPTS"/generate-env.sh > ${JOB_FOLDER}/set-job-env-vars.sh + chmod +x ${JOB_FOLDER}/set-job-env-vars.sh + echo "Variables passed through:" + cat ${JOB_FOLDER}/set-job-env-vars.sh + echo "export CI_JOB_JWT=${CI_JOB_JWT}" >> ${JOB_FOLDER}/set-job-env-vars.sh + set -x + + # Extract the Mesa distribution into the location expected by + # the Mesa CI deqp-runner scripts. + tar x -C ${JOB_FOLDER} -f $INSTALL_TARBALL + + script: | + slugify () { + echo "$1" | sed -r s/[~\^]+//g | sed -r s/[^a-zA-Z0-9]+/-/g | sed -r s/^-+\|-+$//g | tr A-Z a-z + } + + # Submit the job to Valve's CI gateway service with the CI + # provisioned job_folder. + env PYTHONUNBUFFERED=1 executorctl \ + run -w b2c.yml.jinja2 -j $(slugify "$CI_JOB_NAME") -s ${JOB_FOLDER} + + ls -l + # Anything our job places in results/ will be collected by the + # Gitlab coordinator for status presentation. results/junit.xml + # will be parsed by the UI for more detailed explanations of + # test execution. + needs: + - debian/x86_test-vk + - debian-testing + artifacts: + when: always + name: "mesa_${CI_JOB_NAME}" + paths: + - ${JOB_FOLDER}/results + reports: + junit: ${JOB_FOLDER}/results/junit.xml