variables: FDO_UPSTREAM_REPO: mesa/mesa include: - project: 'freedesktop/ci-templates' ref: 4b2997287317808830e9cb4eb0f99b691787da88 file: '/templates/debian.yml' - local: '.gitlab-ci/lava-gitlab-ci.yml' - local: '.gitlab-ci/test-source-dep.yml' stages: - container - meson-x86_64 - scons - meson-misc - llvmpipe - softpipe - freedreno - panfrost - radv - lima - success # When to automatically run the CI .ci-run-policy: rules: # If any files affecting the pipeline are changed, build/test jobs run # automatically once all dependency jobs have passed - changes: &all_paths - VERSION - bin/**/* # GitLab CI - .gitlab-ci.yml - .gitlab-ci/**/* # Meson - meson* - build-support/**/* - subprojects/**/* # SCons - SConstruct - scons/**/* - common.py # Source code - include/**/* - src/**/* when: on_success # Otherwise, build/test jobs won't run - when: never retry: max: 2 when: - runner_system_failure # Cancel CI run if a newer commit is pushed to the same branch interruptible: true success: stage: success image: debian:stable-slim only: - merge_requests except: changes: *all_paths variables: GIT_STRATEGY: none script: - echo "Dummy job to make sure every merge request pipeline runs at least one job" .ci-deqp-artifacts: artifacts: name: "mesa_${CI_JOB_NAME}" when: always untracked: false paths: # Watch out! Artifacts are relative to the build dir. # https://gitlab.com/gitlab-org/gitlab-ce/commit/8788fb925706cad594adf6917a6c5f6587dd1521 - artifacts # Build the CI docker images. # # FDO_DISTRIBUTION_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: - .ci-run-policy rules: # Run pipeline by default if it was triggered by Marge Bot, is for a # merge request, and any files affecting it were changed - if: '$GITLAB_USER_LOGIN == "marge-bot" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME' changes: *all_paths when: on_success # Run pipeline by default in the main project if any files affecting it were # changed - if: '$CI_PROJECT_PATH == "mesa/mesa"' changes: *all_paths when: on_success # Allow triggering jobs manually for MRs or branches of forked projects if # any files affecting the pipeline were changed - changes: *all_paths when: manual # Otherwise, container jobs won't run - when: never variables: FDO_DISTRIBUTION_VERSION: buster-slim FDO_REPO_SUFFIX: "debian/$CI_JOB_NAME" FDO_DISTRIBUTION_EXEC: 'bash .gitlab-ci/container/${CI_JOB_NAME}.sh' # no need to pull the whole repo to build the container image GIT_STRATEGY: none # Debian 10 based x86 build image x86_build: extends: - .fdo.container-build@debian - .container variables: FDO_DISTRIBUTION_TAG: &x86_build "2020-03-18-jflags" .use-x86_build: variables: TAG: *x86_build image: "$CI_REGISTRY_IMAGE/debian/x86_build:$TAG" needs: - x86_build # Debian 10 based x86 test image for GL x86_test-gl: extends: x86_build variables: FDO_DISTRIBUTION_TAG: &x86_test-gl "2020-03-18-jflags" # Debian 10 based x86 test image for VK x86_test-vk: extends: x86_build variables: FDO_DISTRIBUTION_TAG: &x86_test-vk "2020-04-09" # Debian 9 based x86 build image (old LLVM) x86_build_old: extends: x86_build variables: FDO_DISTRIBUTION_TAG: &x86_build_old "2019-03-18-jflags" FDO_DISTRIBUTION_VERSION: stretch-slim .use-x86_build_old: variables: TAG: *x86_build_old image: "$CI_REGISTRY_IMAGE/debian/x86_build_old:$TAG" needs: - x86_build_old # Debian 10 based ARM build image arm_build: extends: - .fdo.container-build@debian@arm64v8 - .container variables: FDO_DISTRIBUTION_TAG: &arm_build "2020-04-01-jflags" .use-arm_build: variables: TAG: *arm_build image: "$CI_REGISTRY_IMAGE/debian/arm_build:$TAG" needs: - arm_build # Debian 10 based ARM test image arm_test: extends: arm_build variables: FDO_DISTRIBUTION_TAG: &arm_test "2020-03-18-jflags" .use-arm_test: variables: TAG: *arm_test image: "$CI_REGISTRY_IMAGE/debian/arm_test:$TAG" needs: - meson-arm64 - arm_test # Native Windows docker builds # # Unlike the above Linux-based builds - including MinGW/SCons 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: WINDOWS_TAG: "2020-03-24" WINDOWS_IMAGE: "$CI_REGISTRY_IMAGE/windows/x64_build:$WINDOWS_TAG" WINDOWS_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/windows/x64_build:$WINDOWS_TAG" .windows_build_vs2019: extends: - .container - .windows-docker-vs2019 stage: container variables: GIT_STRATEGY: fetch # we do actually need the full repository though tags: - windows - shell - "1809" - mesa script: - .\.gitlab-ci\windows\mesa_container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $WINDOWS_IMAGE $WINDOWS_UPSTREAM_IMAGE .use-windows_build_vs2019: extends: .windows-docker-vs2019 image: "$WINDOWS_IMAGE" needs: - .windows_build_vs2019 # BUILD # Shared between windows and Linux .build-common: extends: .ci-run-policy artifacts: name: "mesa_${CI_JOB_NAME}" when: always paths: - _build/meson-logs/*.txt # scons: - build/*/config.log - 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: - export PATH="/usr/lib/ccache:$PATH" - export CCACHE_BASEDIR="$PWD" - ccache --show-stats after_script: - ccache --show-stats .build-windows: extends: .build-common tags: - windows - docker - "1809" - mesa cache: key: ${CI_JOB_NAME} paths: - subprojects/packagecache .meson-build: extends: - .build-linux - .use-x86_build stage: meson-x86_64 variables: LLVM_VERSION: 9 script: - .gitlab-ci/meson-build.sh .scons-build: extends: - .build-linux - .use-x86_build stage: scons variables: SCONSFLAGS: "-j4" script: - .gitlab-ci/scons-build.sh meson-testing: extends: - .meson-build - .ci-deqp-artifacts variables: UNWIND: "true" DRI_LOADERS: > -D glx=dri -D gbm=true -D egl=true -D platforms=x11,drm,surfaceless GALLIUM_ST: > -D dri3=true GALLIUM_DRIVERS: "swrast" VULKAN_DRIVERS: amd BUILDTYPE: "debugoptimized" EXTRA_OPTION: > -D werror=true script: - .gitlab-ci/meson-build.sh - .gitlab-ci/prepare-artifacts.sh meson-gallium: extends: .meson-build variables: UNWIND: "true" DRI_LOADERS: > -D glx=dri -D gbm=true -D egl=true -D platforms=x11,wayland,drm,surfaceless GALLIUM_ST: > -D dri3=true -D gallium-extra-hud=true -D gallium-vdpau=true -D gallium-xvmc=true -D gallium-omx=bellagio -D gallium-va=true -D gallium-xa=true -D gallium-nine=true -D gallium-opencl=disabled GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swr,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink" EXTRA_OPTION: > -D osmesa=gallium -D tools=all script: - .gitlab-ci/meson-build.sh - .gitlab-ci/run-shader-db.sh meson-classic: extends: .meson-build variables: UNWIND: "true" DRI_LOADERS: > -D glx=dri -D gbm=true -D egl=true -D platforms=x11,wayland,drm,surfaceless DRI_DRIVERS: "auto" EXTRA_OPTION: > -D osmesa=classic -D tools=all .meson-cross: extends: - .meson-build stage: meson-misc variables: UNWIND: "false" DRI_LOADERS: > -D glx=disabled -D gbm=false -D egl=true -D platforms=surfaceless -D osmesa=none GALLIUM_ST: > -D dri3=false -D gallium-vdpau=false -D gallium-xvmc=false -D gallium-omx=disabled -D gallium-va=false -D gallium-xa=false -D gallium-nine=false LLVM_VERSION: "8" .meson-arm: extends: - .meson-cross - .use-arm_build variables: VULKAN_DRIVERS: freedreno GALLIUM_DRIVERS: "etnaviv,freedreno,kmsro,lima,nouveau,panfrost,swrast,tegra,v3d,vc4" BUILDTYPE: "debugoptimized" tags: - aarch64 meson-armhf: extends: - .meson-arm - .ci-deqp-artifacts variables: CROSS: armhf LLVM_VERSION: "7" EXTRA_OPTION: > -D llvm=false script: - .gitlab-ci/meson-build.sh - .gitlab-ci/prepare-artifacts.sh meson-arm64: extends: - .meson-arm - .ci-deqp-artifacts variables: VULKAN_DRIVERS: "freedreno" EXTRA_OPTION: > -D llvm=false script: - .gitlab-ci/meson-build.sh - .gitlab-ci/prepare-artifacts.sh meson-arm64-build-test: extends: - .meson-arm - .ci-deqp-artifacts variables: VULKAN_DRIVERS: "amd" script: - .gitlab-ci/meson-build.sh meson-clang: extends: .meson-build variables: UNWIND: "true" DRI_LOADERS: > -D glvnd=true DRI_DRIVERS: "auto" GALLIUM_DRIVERS: "auto" VULKAN_DRIVERS: intel,amd,freedreno CC: "ccache clang-9" CXX: "ccache clang++-9" .meson-windows-vs2019: extends: - .build-windows - .use-windows_build_vs2019 stage: meson-misc script: - . .\.gitlab-ci\windows\mesa_build.ps1 scons-win64: extends: .scons-build variables: SCONS_TARGET: platform=windows machine=x86_64 debug=1 SCONS_CHECK_COMMAND: "true" allow_failure: true meson-clover: extends: .meson-build variables: UNWIND: "true" DRI_LOADERS: > -D glx=disabled -D egl=false -D gbm=false GALLIUM_ST: > -D dri3=false -D gallium-vdpau=false -D gallium-xvmc=false -D gallium-omx=disabled -D gallium-va=false -D gallium-xa=false -D gallium-nine=false -D gallium-opencl=icd script: - export GALLIUM_DRIVERS="r600,radeonsi" - .gitlab-ci/meson-build.sh - LLVM_VERSION=8 .gitlab-ci/meson-build.sh - export GALLIUM_DRIVERS="i915,r600" - LLVM_VERSION=6.0 .gitlab-ci/meson-build.sh - LLVM_VERSION=7 .gitlab-ci/meson-build.sh meson-clover-old-llvm: extends: - meson-clover - .use-x86_build_old variables: UNWIND: "false" DRI_LOADERS: > -D glx=disabled -D egl=false -D gbm=false -D platforms=drm,surfaceless GALLIUM_DRIVERS: "i915,r600" script: - LLVM_VERSION=3.9 .gitlab-ci/meson-build.sh - LLVM_VERSION=4.0 .gitlab-ci/meson-build.sh - LLVM_VERSION=5.0 .gitlab-ci/meson-build.sh meson-vulkan: extends: .meson-build variables: UNWIND: "false" DRI_LOADERS: > -D glx=disabled -D gbm=false -D egl=false -D platforms=x11,wayland,drm -D osmesa=none GALLIUM_ST: > -D dri3=true -D gallium-vdpau=false -D gallium-xvmc=false -D gallium-omx=disabled -D gallium-va=false -D gallium-xa=false -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 EXTRA_OPTION: > -D vulkan-overlay-layer=true -D werror=true meson-i386: extends: .meson-cross variables: CROSS: i386 VULKAN_DRIVERS: intel,amd GALLIUM_DRIVERS: "iris,r300,radeonsi,swrast,virgl" EXTRA_OPTION: > -D vulkan-overlay-layer=true -D werror=true script: - dpkg -i /var/cache/apt/archives/$CROSS/*.deb - .gitlab-ci/meson-build.sh meson-s390x: extends: - .meson-cross tags: - kvm variables: CROSS: s390x GALLIUM_DRIVERS: "swrast" script: # For unknown reasons "too many" installed i386 libraries cause qemu to # crash while executing llvm-config for s390x. - apt-get remove -y libglib2.0-0:i386 - dpkg -i /var/cache/apt/archives/$CROSS/*.deb - .gitlab-ci/meson-build.sh meson-ppc64el: extends: - meson-s390x variables: CROSS: ppc64el GALLIUM_DRIVERS: "nouveau,radeonsi,swrast,virgl" VULKAN_DRIVERS: "amd" meson-mingw32-x86_64: extends: .meson-build stage: meson-misc variables: UNWIND: "false" DRI_DRIVERS: "" GALLIUM_DRIVERS: "swrast" EXTRA_OPTION: > -Dllvm=false -Dosmesa=gallium --cross-file=.gitlab-ci/x86_64-w64-mingw32 .test: extends: - .ci-run-policy variables: GIT_STRATEGY: none # testing doesn't build anything from source before_script: # Note: Build dir (and thus install) may be dirty due to GIT_STRATEGY - rm -rf install - tar -xf artifacts/install.tar - LD_LIBRARY_PATH=install/lib find install/lib -name "*.so" -print -exec ldd {} \; artifacts: when: always name: "mesa_${CI_JOB_NAME}" paths: - results/ dependencies: - meson-testing .test-gl: extends: - .test variables: TAG: *x86_test-gl image: "$CI_REGISTRY_IMAGE/debian/x86_test-gl:$TAG" needs: - meson-testing - x86_test-gl .test-vk: extends: - .test variables: TAG: *x86_test-vk image: "$CI_REGISTRY_IMAGE/debian/x86_test-vk:$TAG" needs: - meson-testing - x86_test-vk .piglit-test: extends: - .test-gl - .llvmpipe-rules artifacts: when: on_failure name: "mesa_${CI_JOB_NAME}" paths: - summary/ variables: LIBGL_ALWAYS_SOFTWARE: 1 PIGLIT_NO_WINDOW: 1 script: - install/piglit/run.sh piglit-quick_gl: extends: .piglit-test variables: LP_NUM_THREADS: 0 NIR_VALIDATE: 0 PIGLIT_OPTIONS: > --process-isolation false -x arb_gpu_shader5 -x egl_ext_device_ -x egl_ext_platform_device -x ext_timer_query@time-elapsed -x glx-multithread-clearbuffer -x glx-multithread-shader-compile -x max-texture-size -x maxsize PIGLIT_PROFILES: quick_gl piglit-glslparser: extends: .piglit-test variables: LP_NUM_THREADS: 0 NIR_VALIDATE: 0 PIGLIT_PROFILES: glslparser piglit-quick_shader: extends: .piglit-test variables: LP_NUM_THREADS: 1 NIR_VALIDATE: 0 PIGLIT_PROFILES: quick_shader .deqp-test: variables: DEQP_SKIPS: deqp-default-skips.txt script: - ./install/deqp-runner.sh .deqp-test-gl: extends: - .test-gl - .deqp-test .deqp-test-vk: extends: - .test-vk - .deqp-test variables: DEQP_VER: vk .fossilize-test: extends: .test-vk script: - ./install/fossilize-runner.sh llvmpipe-gles2: variables: DEQP_VER: gles2 DEQP_PARALLEL: 4 NIR_VALIDATE: 0 # Don't use threads inside llvmpipe, we've already got all 4 cores # busy with DEQP_PARALLEL. LP_NUM_THREADS: 0 DEQP_EXPECTED_FAILS: deqp-llvmpipe-fails.txt LIBGL_ALWAYS_SOFTWARE: "true" extends: - .deqp-test-gl - .llvmpipe-rules softpipe-gles2: extends: - llvmpipe-gles2 - .softpipe-rules variables: DEQP_EXPECTED_FAILS: deqp-softpipe-fails.txt DEQP_SKIPS: deqp-softpipe-skips.txt GALLIUM_DRIVER: "softpipe" softpipe-gles3: parallel: 2 variables: DEQP_VER: gles3 extends: softpipe-gles2 softpipe-gles31: parallel: 4 variables: DEQP_VER: gles31 extends: softpipe-gles2 # 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/mesamaster) but should be present on pipelines in personal # branches (so you can opt in to running the flaky test when you want # to). .test-manual: rules: - if: '$CI_PROJECT_PATH != "mesa/mesa" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != $CI_COMMIT_REF_NAME' changes: *all_paths when: manual - when: never arm64_a630_gles2: extends: - .deqp-test-gl - .use-arm_test - .freedreno-rules variables: DEQP_VER: gles2 DEQP_EXPECTED_FAILS: deqp-freedreno-a630-fails.txt DEQP_SKIPS: deqp-freedreno-a630-skips.txt NIR_VALIDATE: 0 DEQP_PARALLEL: 4 FLAKES_CHANNEL: "#freedreno-ci" tags: - mesa-cheza dependencies: - meson-arm64 arm64_a630_gles31: extends: arm64_a630_gles2 variables: DEQP_VER: gles31 arm64_a630_gles3: extends: arm64_a630_gles2 variables: DEQP_VER: gles3 .baremetal-test: extends: - .ci-run-policy stage: test arm64_a306_gles2: extends: - .baremetal-test - .use-arm_build - .freedreno-rules variables: BM_KERNEL: /lava-files/Image.gz BM_DTB: /lava-files/apq8016-sbc.dtb BM_ROOTFS: /lava-files/rootfs-arm64 BM_CMDLINE: "ip=dhcp console=ttyMSM0,115200n8" DEQP_EXPECTED_FAILS: deqp-freedreno-a307-fails.txt DEQP_SKIPS: deqp-freedreno-a307-skips.txt DEQP_VER: gles2 DEQP_PARALLEL: 4 script: - .gitlab-ci/bare-metal/fastboot.sh needs: - meson-arm64 tags: - google-freedreno-db410c # Disabled due to flaky results arm64_a306_gles3: extends: - arm64_a306_gles2 - .test-manual parallel: 8 variables: DEQP_VER: gles3 arm64_a530_gles2: extends: - arm64_a306_gles2 stage: freedreno variables: BM_KERNEL: /lava-files/db820c-kernel BM_DTB: /lava-files/db820c.dtb BM_CMDLINE: "ip=dhcp console=ttyMSM0,115200n8" DEQP_EXPECTED_FAILS: deqp-freedreno-a530-fails.txt DEQP_SKIPS: deqp-freedreno-a530-skips.txt tags: - google-freedreno-db820c arm64_a530_gles3: extends: - arm64_a530_gles2 - .test-manual parallel: 6 variables: DEQP_VER: gles3 # RADV CI .test-radv: extends: .radv-rules stage: radv variables: VK_DRIVER: radeon RADV_DEBUG: checkir .test-radv-fossilize: extends: - .fossilize-test - .test-radv script: - ./install/fossilize-runner.sh - ACO_DEBUG=validateir,validatera RADV_PERFTEST=aco ./install/fossilize-runner.sh # Can only be triggered manually on personal branches because RADV is the only # driver that does Vulkan testing at the moment. radv_polaris10_vkcts: extends: - .deqp-test-vk - .test-radv - .test-manual variables: DEQP_SKIPS: deqp-radv-polaris10-skips.txt tags: - polaris10 radv-fossils: extends: - .fossilize-test - .test-radv script: # Polaris10 - export RADV_FORCE_FAMILY="polaris10" - ./install/fossilize-runner.sh - ACO_DEBUG=validateir,validatera RADV_PERFTEST=aco ./install/fossilize-runner.sh # Vega10 - export RADV_FORCE_FAMILY="gfx900" - ./install/fossilize-runner.sh - ACO_DEBUG=validateir,validatera RADV_PERFTEST=aco ./install/fossilize-runner.sh # Navi10 - export RADV_FORCE_FAMILY="gfx1010" - ./install/fossilize-runner.sh - ACO_DEBUG=validateir,validatera RADV_PERFTEST=aco ./install/fossilize-runner.sh # Traces CI .traces-test: cache: key: ${CI_JOB_NAME} paths: - traces-db/ .traces-test-gl: extends: - .test-gl - .traces-test script: - ./install/tracie-runner-gl.sh .traces-test-vk: extends: - .test-vk - .traces-test script: - ./install/tracie-runner-vk.sh llvmpipe-traces: extends: - .traces-test-gl - .llvmpipe-rules variables: LIBGL_ALWAYS_SOFTWARE: "true" GALLIUM_DRIVER: "llvmpipe" DEVICE_NAME: "gl-vmware-llvmpipe" radv-polaris10-traces: extends: - .traces-test-vk - .test-radv - .test-manual variables: DEVICE_NAME: "vk-amd-polaris10" tags: - polaris10