mesa/.gitlab-ci.yml

2134 lines
52 KiB
YAML
Raw Normal View History

variables:
FDO_UPSTREAM_REPO: mesa/mesa
MESA_TEMPLATES_COMMIT: &ci-templates-commit 52dd4a94044449c8481d18dcdc221a3c636366d2
CI: reduce bandwidth for git pull Over the last 7 days, git pulls represented a total of 1.7 TB. On those 1.7 TB, we can see: - ~300 GB for the CI farm on hetzner - ~730 GB for the CI farm on packet.net - ~680 GB for the rest of the world We can not really change the rest of the world*, but we can certainly reduce the egress costs towards our CI farms. Right now, the gitlab runners are not doing a good job at caching the git trees for the various jobs we make, and we end up with a lot of cache-misses. A typical pipeline ends up with a good 2.8GB of git pull data. (a compressed archive of the mesa folder accounts for 280MB) In this patch, we implemented what was suggested in https://gitlab.com/gitlab-org/gitlab/-/issues/215591#note_334642576 - we host a brand new MinIO server on packet - jobs can upload files on 2 locations: * git-cache/<namespace>/<project>/<branch-name>.tar.gz * artifacts/<namespace>/<project>/<pipeline-id>/ - the authorization is handled by gitlab with short tokens valid only for the time of the job is running - whenever a job runs, the runner are configured to execute (eval) $CI_PRE_CLONE_SCRIPT - this variable is set globally to download the current cache from the MinIO packet server, unpack it and replace the possibly out of date cache found on the runner - then git fetch is run by the runner, and only the delta between the upstream tree and the local tree gets pulled. We can rebuild the git cache in a schedule job (once a day seems sufficient), and then we can stop the cache miss entirely. First results showed that instead of pulling 280MB of data in my fork, I got a pull of only 250KB. That should help us. * arguably, there are other farms in the rest of the world, so hopefully we can change those too. Reviewed-by: Michel Dänzer <mdaenzer@redhat.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5428>
2020-06-11 16:16:28 +01:00
CI_PRE_CLONE_SCRIPT: |-
set -o xtrace
/usr/bin/wget -q -O- ${CI_PROJECT_URL}/-/raw/${CI_COMMIT_SHA}/.gitlab-ci/download-git-cache.sh | sh -
set +o xtrace
MINIO_HOST: minio-packet.freedesktop.org
include:
- project: 'freedesktop/ci-templates'
ref: 79c325922670137e8f0a4dc5f6f097e0eb57c1af
file:
- '/templates/ci-fairy.yml'
- project: 'freedesktop/ci-templates'
ref: *ci-templates-commit
file:
- '/templates/debian.yml'
- local: '.gitlab-ci/lava-gitlab-ci.yml'
- local: '.gitlab-ci/test-source-dep.yml'
stages:
- sanity
- container
- container-2
CI: reduce bandwidth for git pull Over the last 7 days, git pulls represented a total of 1.7 TB. On those 1.7 TB, we can see: - ~300 GB for the CI farm on hetzner - ~730 GB for the CI farm on packet.net - ~680 GB for the rest of the world We can not really change the rest of the world*, but we can certainly reduce the egress costs towards our CI farms. Right now, the gitlab runners are not doing a good job at caching the git trees for the various jobs we make, and we end up with a lot of cache-misses. A typical pipeline ends up with a good 2.8GB of git pull data. (a compressed archive of the mesa folder accounts for 280MB) In this patch, we implemented what was suggested in https://gitlab.com/gitlab-org/gitlab/-/issues/215591#note_334642576 - we host a brand new MinIO server on packet - jobs can upload files on 2 locations: * git-cache/<namespace>/<project>/<branch-name>.tar.gz * artifacts/<namespace>/<project>/<pipeline-id>/ - the authorization is handled by gitlab with short tokens valid only for the time of the job is running - whenever a job runs, the runner are configured to execute (eval) $CI_PRE_CLONE_SCRIPT - this variable is set globally to download the current cache from the MinIO packet server, unpack it and replace the possibly out of date cache found on the runner - then git fetch is run by the runner, and only the delta between the upstream tree and the local tree gets pulled. We can rebuild the git cache in a schedule job (once a day seems sufficient), and then we can stop the cache miss entirely. First results showed that instead of pulling 280MB of data in my fork, I got a pull of only 250KB. That should help us. * arguably, there are other farms in the rest of the world, so hopefully we can change those too. Reviewed-by: Michel Dänzer <mdaenzer@redhat.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5428>
2020-06-11 16:16:28 +01:00
- git-archive
- meson-x86_64
- build-misc
- amd
- intel
- arm
- broadcom
- freedreno
- software-renderer
- layered-backends
- deploy
- success
# Generic rule to not run the job during scheduled pipelines
# ----------------------------------------------------------
.scheduled_pipelines-rules:
rules: &ignore_scheduled_pipelines
if: &is-scheduled-pipeline '$CI_PIPELINE_SOURCE == "schedule"'
when: never
# YAML anchors for rule conditions
# --------------------------------
.rules-anchors:
rules:
# For Marge Bot
- if: &is-for-marge '$GITLAB_USER_LOGIN == "marge-bot"'
when: never
# Forked project branch
- if: &is-forked-branch '$CI_PROJECT_NAMESPACE != "mesa" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != $CI_COMMIT_REF_NAME'
when: manual
# Forked project branch / pre-merge pipeline
- if: &is-forked-branch-or-pre-merge '$CI_PROJECT_NAMESPACE != "mesa" || $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME'
when: manual
# Pipeline runs for the master branch of the main project
- if: &is-main-master '$CI_PROJECT_NAMESPACE == "mesa" && $CI_COMMIT_REF_NAME == "master" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != "master"'
when: always
# Post-merge pipeline
- if: &is-post-merge '$CI_PROJECT_NAMESPACE == "mesa" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != $CI_COMMIT_REF_NAME'
when: on_success
# Post-merge pipeline, not for Marge Bot
- if: &is-post-merge-not-for-marge '$CI_PROJECT_NAMESPACE == "mesa" && $GITLAB_USER_LOGIN != "marge-bot" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != $CI_COMMIT_REF_NAME'
when: on_success
# Pre-merge pipeline
- if: &is-pre-merge '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME'
when: on_success
# Pre-merge pipeline for Marge Bot
- if: &is-pre-merge-for-marge '$GITLAB_USER_LOGIN == "marge-bot" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME'
when: on_success
.docs-base:
extends:
- .fdo.ci-fairy
- .ci-run-policy
script:
- apk --no-cache add graphviz
- pip3 install sphinx sphinx_rtd_theme
- sphinx-build -b html docs public
pages:
extends: .docs-base
stage: deploy
artifacts:
paths:
- public
needs: []
rules:
- *ignore_scheduled_pipelines
- if: *is-main-master
changes: &docs-or-ci
- docs/**/*
- .gitlab-ci.yml
when: always
# Other cases default to never
test-docs:
extends: .docs-base
# Cancel job if a newer commit is pushed to the same branch
interruptible: true
stage: deploy
needs: []
rules:
- *ignore_scheduled_pipelines
- if: *is-forked-branch
changes: *docs-or-ci
when: manual
# Other cases default to never
test-docs-mr:
extends:
- test-docs
needs:
- sanity
artifacts:
expose_as: 'Documentation preview'
paths:
- public/
rules:
- if: *is-pre-merge
changes: *docs-or-ci
when: on_success
# Other cases default to never
# When to automatically run the CI
.ci-run-policy:
rules:
- *ignore_scheduled_pipelines
# If any files affecting the pipeline are changed, build/test jobs run
# automatically once all dependency jobs have passed
- changes: &all_paths
- VERSION
- bin/git_sha1_gen.py
- bin/install_megadrivers.py
- bin/meson_get_version.py
- bin/symbols-check.py
# GitLab CI
- .gitlab-ci.yml
- .gitlab-ci/**/*
# Meson
- meson*
- build-support/**/*
- subprojects/**/*
# Source code
- include/**/*
- src/**/*
when: on_success
# Otherwise, build/test jobs won't run
- when: never
retry:
max: 2
when:
- runner_system_failure
success:
stage: success
image: debian:stable-slim
rules:
- *ignore_scheduled_pipelines
- if: *is-post-merge
when: never
- if: *is-for-marge
changes: *docs-or-ci
when: never
- changes: *all_paths
when: never
- if: *is-pre-merge
when: on_success
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/meson-logs/*.txt
# 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:
variables:
MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${MESA_TEMPLATES_COMMIT}"
image: "$MESA_IMAGE"
.set-image-base-tag:
extends:
- .set-image
- .incorporate-base-tag+templates-commit
variables:
MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${MESA_BASE_TAG}--${MESA_TEMPLATES_COMMIT}"
# 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:
- .ci-run-policy
- .incorporate-templates-commit
rules:
- *ignore_scheduled_pipelines
# Run pipeline by default in the main project if any CI pipeline
# configuration files were changed, to ensure docker images are up to date
- if: *is-post-merge
changes:
- .gitlab-ci.yml
- .gitlab-ci/**/*
when: on_success
# Run pipeline by default if it was triggered by Marge Bot, is for a
# merge request, and any files affecting the pipeline were changed
- if: *is-pre-merge-for-marge
changes:
*all_paths
when: on_success
# Run pipeline by default in the main project if it was not triggered by
# Marge Bot, and any files affecting the pipeline were changed
- if: *is-post-merge-not-for-marge
changes:
*all_paths
when: on_success
# Allow triggering jobs manually in other cases 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: '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
stage: container-2
# Debian 10 based x86 build image base
x86_build-base:
extends:
- .fdo.container-build@debian
- .container
variables:
MESA_IMAGE_TAG: &x86_build-base "2021-02-08-container-reorg"
.use-x86_build-base:
extends:
- .fdo.container-build@debian
- .use-base-image
variables:
MESA_BASE_IMAGE: "debian/x86_build-base"
MESA_BASE_TAG: *x86_build-base
needs:
- x86_build-base
# Debian 10 based x86 main build image
x86_build:
extends:
- .use-x86_build-base
variables:
MESA_IMAGE_TAG: &x86_build "2021-02-08-container-reorg"
.use-x86_build:
extends:
- .set-image-base-tag
variables:
MESA_BASE_TAG: *x86_build-base
MESA_IMAGE_PATH: "debian/x86_build"
MESA_IMAGE_TAG: *x86_build
needs:
- x86_build
# Debian 10 based i386 cross-build image
i386_build:
extends:
- .use-x86_build-base
variables:
MESA_IMAGE_TAG: &i386_build "2021-02-08-container-reorg"
.use-i386_build:
extends:
- .set-image-base-tag
variables:
MESA_BASE_TAG: *x86_build-base
MESA_IMAGE_PATH: "debian/i386_build"
MESA_IMAGE_TAG: *i386_build
needs:
- i386_build
# Debian 10 based ppc64el cross-build image
ppc64el_build:
extends:
- .use-x86_build-base
variables:
MESA_IMAGE_TAG: &ppc64el_build "2021-02-08-container-reorg"
.use-ppc64el_build:
extends:
- .set-image-base-tag
variables:
MESA_BASE_TAG: *x86_build-base
MESA_IMAGE_PATH: "debian/ppc64el_build"
MESA_IMAGE_TAG: *ppc64el_build
needs:
- ppc64el_build
# Debian 10 based s390x cross-build image
s390x_build:
extends:
- .use-x86_build-base
variables:
MESA_IMAGE_TAG: &s390x_build "2021-02-08-container-reorg"
.use-s390x_build:
extends:
- .set-image-base-tag
variables:
MESA_BASE_TAG: *x86_build-base
MESA_IMAGE_PATH: "debian/s390x_build"
MESA_IMAGE_TAG: *s390x_build
needs:
- s390x_build
# Android NDK cross-build image
android_build:
extends:
- .use-x86_build-base
variables:
MESA_IMAGE_TAG: &android_build "2021-02-08-container-reorg"
.use-android_build:
extends:
- .set-image-base-tag
variables:
MESA_BASE_TAG: *x86_build-base
MESA_IMAGE_PATH: "debian/android_build"
MESA_IMAGE_TAG: *android_build
needs:
- android_build
# Debian 10 based x86 test image base
x86_test-base:
extends: x86_build-base
variables:
MESA_IMAGE_TAG: &x86_test-base "2021-02-17-gfxreconstruct-master"
.use-x86_test-base:
extends:
- .fdo.container-build@debian
- .use-base-image
variables:
MESA_BASE_IMAGE: "debian/x86_test-base"
MESA_BASE_TAG: *x86_test-base
needs:
- x86_test-base
# Debian 10 based x86 test image for GL
x86_test-gl:
extends: .use-x86_test-base
variables:
MESA_IMAGE_TAG: &x86_test-gl "2021-02-17-gfxreconstruct-master"
# Debian 10 based x86 test image for VK
x86_test-vk:
extends: .use-x86_test-base
variables:
MESA_IMAGE_TAG: &x86_test-vk "2021-02-17-gfxreconstruct-master"
# Debian 10 based ARM build image
arm_build:
extends:
- .fdo.container-build@debian@arm64v8
- .container
variables:
MESA_IMAGE_TAG: &arm_build "2021-02-15-asan"
.use-arm_build:
extends:
- .set-image
variables:
MESA_IMAGE_PATH: "debian/arm_build"
MESA_IMAGE_TAG: *arm_build
needs:
- arm_build
# Debian 10 based x86 baremetal image base
arm_test-base:
extends:
- .fdo.container-build@debian
- .container
variables:
MESA_IMAGE_TAG: &arm_test-base "2021-02-08-container-reorg"
.use-arm_test-base:
extends:
- .fdo.container-build@debian
- .use-base-image
variables:
MESA_BASE_IMAGE: "debian/arm_test-base"
MESA_BASE_TAG: *arm_test-base
needs:
- arm_test-base
# x86 image with ARM64 rootfs for baremetal testing.
arm64_test:
extends:
- .use-arm_test-base
variables:
MESA_IMAGE_TAG: &arm64_test "2021-02-17-asan"
.use-arm64_test:
extends:
- .set-image-base-tag
variables:
MESA_BASE_TAG: *arm_test-base
MESA_IMAGE_PATH: "debian/arm64_test"
MESA_IMAGE_TAG: *arm64_test
needs:
- arm64_test
ci: add testing for VC4 drivers (Raspberry Pi 3) This tests OpenGL ES 2.0 CTS suite with VC4 drivers, through baremetal Raspberry Pi 3 devices. The devices are connected to a switch that supports Power over Ethernet (PoE), so the devices can be started/stopped through the switch, and also to a host that runs the GitLab runner through serial-to-USB cables, to monitor the devices to know when the testing finishes. The Raspberries uses a network boot, using NFS and TFTP. For the root filesystem, they use the one created in the armhf container. For the kernel/modules case, this is handled externally. Currently it is using the same kernel/modules that come with the Raspberry Pi OS. In future we could build them in the same armhf container. At this moment we only test armhf architecture, as this is the default one suggested by the Raspberry Pi Foundation. In future we could also add testing for arm64 architecture. Finally, for the very rare ocassions where the Raspberry Pi 3 device is booted but no data is received, it retries the testing for a second time, powering off and on the device in the process. v2: - Remove commit that exists capture devcoredump (Eric) - Squash remaining commits in one (Andres) v3: - Add missing boot timeout check (Juan) v4: - Use locks when running the PoE on/off script (Eric) - Use a timeout for serial read (Eric) v5: - Rename stage to "raspberrypi" (Eric) - Bump up arm64_test tag (Eric) v6: - Make serial buffer timeout optional (Juan) Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7628>
2020-11-15 19:57:55 +00:00
# x86 image with armhf rootfs for baremetal testing
armhf_test:
extends:
- .use-arm_test-base
variables:
MESA_IMAGE_TAG: &armhf_test "2021-02-17-asan"
ci: add testing for VC4 drivers (Raspberry Pi 3) This tests OpenGL ES 2.0 CTS suite with VC4 drivers, through baremetal Raspberry Pi 3 devices. The devices are connected to a switch that supports Power over Ethernet (PoE), so the devices can be started/stopped through the switch, and also to a host that runs the GitLab runner through serial-to-USB cables, to monitor the devices to know when the testing finishes. The Raspberries uses a network boot, using NFS and TFTP. For the root filesystem, they use the one created in the armhf container. For the kernel/modules case, this is handled externally. Currently it is using the same kernel/modules that come with the Raspberry Pi OS. In future we could build them in the same armhf container. At this moment we only test armhf architecture, as this is the default one suggested by the Raspberry Pi Foundation. In future we could also add testing for arm64 architecture. Finally, for the very rare ocassions where the Raspberry Pi 3 device is booted but no data is received, it retries the testing for a second time, powering off and on the device in the process. v2: - Remove commit that exists capture devcoredump (Eric) - Squash remaining commits in one (Andres) v3: - Add missing boot timeout check (Juan) v4: - Use locks when running the PoE on/off script (Eric) - Use a timeout for serial read (Eric) v5: - Rename stage to "raspberrypi" (Eric) - Bump up arm64_test tag (Eric) v6: - Make serial buffer timeout optional (Juan) Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7628>
2020-11-15 19:57:55 +00:00
.use-armhf_test:
extends:
- .set-image-base-tag
ci: add testing for VC4 drivers (Raspberry Pi 3) This tests OpenGL ES 2.0 CTS suite with VC4 drivers, through baremetal Raspberry Pi 3 devices. The devices are connected to a switch that supports Power over Ethernet (PoE), so the devices can be started/stopped through the switch, and also to a host that runs the GitLab runner through serial-to-USB cables, to monitor the devices to know when the testing finishes. The Raspberries uses a network boot, using NFS and TFTP. For the root filesystem, they use the one created in the armhf container. For the kernel/modules case, this is handled externally. Currently it is using the same kernel/modules that come with the Raspberry Pi OS. In future we could build them in the same armhf container. At this moment we only test armhf architecture, as this is the default one suggested by the Raspberry Pi Foundation. In future we could also add testing for arm64 architecture. Finally, for the very rare ocassions where the Raspberry Pi 3 device is booted but no data is received, it retries the testing for a second time, powering off and on the device in the process. v2: - Remove commit that exists capture devcoredump (Eric) - Squash remaining commits in one (Andres) v3: - Add missing boot timeout check (Juan) v4: - Use locks when running the PoE on/off script (Eric) - Use a timeout for serial read (Eric) v5: - Rename stage to "raspberrypi" (Eric) - Bump up arm64_test tag (Eric) v6: - Make serial buffer timeout optional (Juan) Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7628>
2020-11-15 19:57:55 +00:00
variables:
MESA_BASE_TAG: *arm_test-base
MESA_IMAGE_PATH: "debian/armhf_test"
MESA_IMAGE_TAG: *armhf_test
ci: add testing for VC4 drivers (Raspberry Pi 3) This tests OpenGL ES 2.0 CTS suite with VC4 drivers, through baremetal Raspberry Pi 3 devices. The devices are connected to a switch that supports Power over Ethernet (PoE), so the devices can be started/stopped through the switch, and also to a host that runs the GitLab runner through serial-to-USB cables, to monitor the devices to know when the testing finishes. The Raspberries uses a network boot, using NFS and TFTP. For the root filesystem, they use the one created in the armhf container. For the kernel/modules case, this is handled externally. Currently it is using the same kernel/modules that come with the Raspberry Pi OS. In future we could build them in the same armhf container. At this moment we only test armhf architecture, as this is the default one suggested by the Raspberry Pi Foundation. In future we could also add testing for arm64 architecture. Finally, for the very rare ocassions where the Raspberry Pi 3 device is booted but no data is received, it retries the testing for a second time, powering off and on the device in the process. v2: - Remove commit that exists capture devcoredump (Eric) - Squash remaining commits in one (Andres) v3: - Add missing boot timeout check (Juan) v4: - Use locks when running the PoE on/off script (Eric) - Use a timeout for serial read (Eric) v5: - Rename stage to "raspberrypi" (Eric) - Bump up arm64_test tag (Eric) v6: - Make serial buffer timeout optional (Juan) Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7628>
2020-11-15 19:57:55 +00:00
needs:
- armhf_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:
extends:
- .set-image
variables:
MESA_IMAGE_PATH: "windows/x64_build"
MESA_IMAGE_TAG: "2021-01-29"
MESA_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/$MESA_IMAGE_PATH:${MESA_IMAGE_TAG}--${MESA_TEMPLATES_COMMIT}"
windows_build_vs2019:
extends:
- .container
- .windows-docker-vs2019
stage: container
variables:
GIT_STRATEGY: fetch # we do actually need the full repository though
timeout: 2h 30m # LLVM + piglit takes ages
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
.use-windows_build_vs2019:
extends: .windows-docker-vs2019
image: "$MESA_IMAGE"
needs:
- windows_build_vs2019
CI: reduce bandwidth for git pull Over the last 7 days, git pulls represented a total of 1.7 TB. On those 1.7 TB, we can see: - ~300 GB for the CI farm on hetzner - ~730 GB for the CI farm on packet.net - ~680 GB for the rest of the world We can not really change the rest of the world*, but we can certainly reduce the egress costs towards our CI farms. Right now, the gitlab runners are not doing a good job at caching the git trees for the various jobs we make, and we end up with a lot of cache-misses. A typical pipeline ends up with a good 2.8GB of git pull data. (a compressed archive of the mesa folder accounts for 280MB) In this patch, we implemented what was suggested in https://gitlab.com/gitlab-org/gitlab/-/issues/215591#note_334642576 - we host a brand new MinIO server on packet - jobs can upload files on 2 locations: * git-cache/<namespace>/<project>/<branch-name>.tar.gz * artifacts/<namespace>/<project>/<pipeline-id>/ - the authorization is handled by gitlab with short tokens valid only for the time of the job is running - whenever a job runs, the runner are configured to execute (eval) $CI_PRE_CLONE_SCRIPT - this variable is set globally to download the current cache from the MinIO packet server, unpack it and replace the possibly out of date cache found on the runner - then git fetch is run by the runner, and only the delta between the upstream tree and the local tree gets pulled. We can rebuild the git cache in a schedule job (once a day seems sufficient), and then we can stop the cache miss entirely. First results showed that instead of pulling 280MB of data in my fork, I got a pull of only 250KB. That should help us. * arguably, there are other farms in the rest of the world, so hopefully we can change those too. Reviewed-by: Michel Dänzer <mdaenzer@redhat.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5428>
2020-06-11 16:16:28 +01:00
# Git archive
make git archive:
extends:
- .fdo.ci-fairy
CI: reduce bandwidth for git pull Over the last 7 days, git pulls represented a total of 1.7 TB. On those 1.7 TB, we can see: - ~300 GB for the CI farm on hetzner - ~730 GB for the CI farm on packet.net - ~680 GB for the rest of the world We can not really change the rest of the world*, but we can certainly reduce the egress costs towards our CI farms. Right now, the gitlab runners are not doing a good job at caching the git trees for the various jobs we make, and we end up with a lot of cache-misses. A typical pipeline ends up with a good 2.8GB of git pull data. (a compressed archive of the mesa folder accounts for 280MB) In this patch, we implemented what was suggested in https://gitlab.com/gitlab-org/gitlab/-/issues/215591#note_334642576 - we host a brand new MinIO server on packet - jobs can upload files on 2 locations: * git-cache/<namespace>/<project>/<branch-name>.tar.gz * artifacts/<namespace>/<project>/<pipeline-id>/ - the authorization is handled by gitlab with short tokens valid only for the time of the job is running - whenever a job runs, the runner are configured to execute (eval) $CI_PRE_CLONE_SCRIPT - this variable is set globally to download the current cache from the MinIO packet server, unpack it and replace the possibly out of date cache found on the runner - then git fetch is run by the runner, and only the delta between the upstream tree and the local tree gets pulled. We can rebuild the git cache in a schedule job (once a day seems sufficient), and then we can stop the cache miss entirely. First results showed that instead of pulling 280MB of data in my fork, I got a pull of only 250KB. That should help us. * arguably, there are other farms in the rest of the world, so hopefully we can change those too. Reviewed-by: Michel Dänzer <mdaenzer@redhat.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5428>
2020-06-11 16:16:28 +01:00
stage: git-archive
rules:
- if: *is-scheduled-pipeline
when: on_success
CI: reduce bandwidth for git pull Over the last 7 days, git pulls represented a total of 1.7 TB. On those 1.7 TB, we can see: - ~300 GB for the CI farm on hetzner - ~730 GB for the CI farm on packet.net - ~680 GB for the rest of the world We can not really change the rest of the world*, but we can certainly reduce the egress costs towards our CI farms. Right now, the gitlab runners are not doing a good job at caching the git trees for the various jobs we make, and we end up with a lot of cache-misses. A typical pipeline ends up with a good 2.8GB of git pull data. (a compressed archive of the mesa folder accounts for 280MB) In this patch, we implemented what was suggested in https://gitlab.com/gitlab-org/gitlab/-/issues/215591#note_334642576 - we host a brand new MinIO server on packet - jobs can upload files on 2 locations: * git-cache/<namespace>/<project>/<branch-name>.tar.gz * artifacts/<namespace>/<project>/<pipeline-id>/ - the authorization is handled by gitlab with short tokens valid only for the time of the job is running - whenever a job runs, the runner are configured to execute (eval) $CI_PRE_CLONE_SCRIPT - this variable is set globally to download the current cache from the MinIO packet server, unpack it and replace the possibly out of date cache found on the runner - then git fetch is run by the runner, and only the delta between the upstream tree and the local tree gets pulled. We can rebuild the git cache in a schedule job (once a day seems sufficient), and then we can stop the cache miss entirely. First results showed that instead of pulling 280MB of data in my fork, I got a pull of only 250KB. That should help us. * arguably, there are other farms in the rest of the world, so hopefully we can change those too. Reviewed-by: Michel Dänzer <mdaenzer@redhat.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5428>
2020-06-11 16:16:28 +01:00
# ensure we are running on packet
tags:
- packet.net
script:
# Compactify the .git directory
- git gc --aggressive
CI: reduce bandwidth for git pull Over the last 7 days, git pulls represented a total of 1.7 TB. On those 1.7 TB, we can see: - ~300 GB for the CI farm on hetzner - ~730 GB for the CI farm on packet.net - ~680 GB for the rest of the world We can not really change the rest of the world*, but we can certainly reduce the egress costs towards our CI farms. Right now, the gitlab runners are not doing a good job at caching the git trees for the various jobs we make, and we end up with a lot of cache-misses. A typical pipeline ends up with a good 2.8GB of git pull data. (a compressed archive of the mesa folder accounts for 280MB) In this patch, we implemented what was suggested in https://gitlab.com/gitlab-org/gitlab/-/issues/215591#note_334642576 - we host a brand new MinIO server on packet - jobs can upload files on 2 locations: * git-cache/<namespace>/<project>/<branch-name>.tar.gz * artifacts/<namespace>/<project>/<pipeline-id>/ - the authorization is handled by gitlab with short tokens valid only for the time of the job is running - whenever a job runs, the runner are configured to execute (eval) $CI_PRE_CLONE_SCRIPT - this variable is set globally to download the current cache from the MinIO packet server, unpack it and replace the possibly out of date cache found on the runner - then git fetch is run by the runner, and only the delta between the upstream tree and the local tree gets pulled. We can rebuild the git cache in a schedule job (once a day seems sufficient), and then we can stop the cache miss entirely. First results showed that instead of pulling 280MB of data in my fork, I got a pull of only 250KB. That should help us. * arguably, there are other farms in the rest of the world, so hopefully we can change those too. Reviewed-by: Michel Dänzer <mdaenzer@redhat.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5428>
2020-06-11 16:16:28 +01:00
# compress the current folder
- tar -cvzf ../$CI_PROJECT_NAME.tar.gz .
# login with the JWT token
- ci-fairy minio login $CI_JOB_JWT
- ci-fairy minio cp ../$CI_PROJECT_NAME.tar.gz minio://$MINIO_HOST/git-cache/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_PROJECT_NAME.tar.gz
CI: reduce bandwidth for git pull Over the last 7 days, git pulls represented a total of 1.7 TB. On those 1.7 TB, we can see: - ~300 GB for the CI farm on hetzner - ~730 GB for the CI farm on packet.net - ~680 GB for the rest of the world We can not really change the rest of the world*, but we can certainly reduce the egress costs towards our CI farms. Right now, the gitlab runners are not doing a good job at caching the git trees for the various jobs we make, and we end up with a lot of cache-misses. A typical pipeline ends up with a good 2.8GB of git pull data. (a compressed archive of the mesa folder accounts for 280MB) In this patch, we implemented what was suggested in https://gitlab.com/gitlab-org/gitlab/-/issues/215591#note_334642576 - we host a brand new MinIO server on packet - jobs can upload files on 2 locations: * git-cache/<namespace>/<project>/<branch-name>.tar.gz * artifacts/<namespace>/<project>/<pipeline-id>/ - the authorization is handled by gitlab with short tokens valid only for the time of the job is running - whenever a job runs, the runner are configured to execute (eval) $CI_PRE_CLONE_SCRIPT - this variable is set globally to download the current cache from the MinIO packet server, unpack it and replace the possibly out of date cache found on the runner - then git fetch is run by the runner, and only the delta between the upstream tree and the local tree gets pulled. We can rebuild the git cache in a schedule job (once a day seems sufficient), and then we can stop the cache miss entirely. First results showed that instead of pulling 280MB of data in my fork, I got a pull of only 250KB. That should help us. * arguably, there are other farms in the rest of the world, so hopefully we can change those too. Reviewed-by: Michel Dänzer <mdaenzer@redhat.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5428>
2020-06-11 16:16:28 +01:00
# Sanity checks of MR settings and commit logs
sanity:
extends:
- .fdo.ci-fairy
stage: sanity
rules:
- if: *is-pre-merge
when: on_success
# Other cases default to never
variables:
GIT_STRATEGY: none
script:
# ci-fairy check-commits --junit-xml=check-commits.xml
- ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-merge-request.xml
artifacts:
when: on_failure
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
# 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: 10
script:
- .gitlab-ci/meson-build.sh
.scons-build:
extends:
- .build-linux
- .use-x86_build
stage: build-misc
script:
- env SCONSFLAGS="-j${FDO_CI_CONCURRENT:-4}" .gitlab-ci/scons-build.sh
meson-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
GALLIUM_DRIVERS: "swrast,virgl,radeonsi,zink,iris"
VULKAN_DRIVERS: "swrast,amd"
BUILDTYPE: "debugoptimized"
EXTRA_OPTION: >
-D werror=true
MINIO_ARTIFACT_NAME: mesa-amd64
script:
- .gitlab-ci/meson-build.sh
- .gitlab-ci/prepare-artifacts.sh
meson-testing-asan:
extends:
- meson-testing
variables:
EXTRA_OPTION: >
-D b_sanitize=address
MINIO_ARTIFACT_NAME: ""
ARTIFACTS_DEBUG_SYMBOLS: 1
meson-clover-testing:
extends:
- .meson-build
- .ci-deqp-artifacts
variables:
UNWIND: "enabled"
LLVM_VERSION: 10
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 werror=true
script:
- .gitlab-ci/meson-build.sh
- .gitlab-ci/prepare-artifacts.sh
meson-gallium:
extends: .meson-build
tags:
# i965_asm tests randomly time out on packet runners
- gstreamer
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,swr,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12"
VULKAN_DRIVERS: swrast
EXTRA_OPTION: >
-D osmesa=true
-D tools=all
-D werror=true
script:
- .gitlab-ci/meson-build.sh
- .gitlab-ci/run-shader-db.sh
- src/freedreno/.gitlab-ci/run-fdtools.sh
# Test a release build with -Werror so new warnings don't sneak in.
meson-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=false
GALLIUM_DRIVERS: "nouveau,kmsro,freedreno,r300,svga,swrast,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12"
BUILDTYPE: "release"
EXTRA_OPTION: >
-D osmesa=true
-D tools=all
-D werror=true
script:
- .gitlab-ci/meson-build.sh
meson-android:
extends:
- .meson-cross
- .use-android_build
variables:
UNWIND: "disabled"
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=26
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: ""
script:
# arm64 build: Can't build v3d/vc4 because they require expat for v3d_decode.
- 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 VULKAN_DRIVERS=freedreno .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 because
# it requires LLVM, which we don't have an Android build of.
# - PKG_CONFIG_PATH=/usr/local/lib/x86_64-linux-android/pkgconfig/ CROSS=x86_64-linux-android GALLIUM_DRIVERS=iris VULKAN_DRIVERS=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
LLVM_VERSION: "8"
.meson-arm:
extends:
- .meson-cross
- .use-arm_build
needs:
- arm_build
variables:
VULKAN_DRIVERS: freedreno,broadcom
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=disabled
MINIO_ARTIFACT_NAME: mesa-armhf
script:
- .gitlab-ci/meson-build.sh
- .gitlab-ci/prepare-artifacts.sh
meson-arm64:
extends:
- .meson-arm
- .ci-deqp-artifacts
variables:
VULKAN_DRIVERS: "freedreno,broadcom"
EXTRA_OPTION: >
-D llvm=disabled
MINIO_ARTIFACT_NAME: mesa-arm64
script:
- .gitlab-ci/meson-build.sh
- .gitlab-ci/prepare-artifacts.sh
meson-arm64-asan:
extends:
- meson-arm64
variables:
EXTRA_OPTION: >
-D llvm=disabled
-D b_sanitize=address
ARTIFACTS_DEBUG_SYMBOLS: 1
MINIO_ARTIFACT_NAME: mesa-arm64-asan
MESON_TEST_ARGS: "--no-suite mesa:compiler"
meson-arm64-build-test:
extends:
- .meson-arm
- .ci-deqp-artifacts
variables:
VULKAN_DRIVERS: "amd"
EXTRA_OPTION: >
-Dtools=panfrost
-D werror=true
script:
- .gitlab-ci/meson-build.sh
meson-clang:
extends: .meson-build
variables:
UNWIND: "enabled"
DRI_LOADERS: >
-D glvnd=true
DRI_DRIVERS: "auto"
GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swr,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,radeonsi,tegra,d3d12"
VULKAN_DRIVERS: intel,amd,freedreno,broadcom
CC: "ccache clang-10"
CXX: "ccache clang++-10"
meson-windows-vs2019:
extends:
- .build-windows
- .use-windows_build_vs2019
- .windows-build-rules
stage: build-misc
script:
- . .\.gitlab-ci\windows\mesa_build.ps1
artifacts:
paths:
- _install/
test-d3d12-windows:
extends:
- .build-windows
- .use-windows_build_vs2019
- .windows-test-rules
stage: layered-backends
dependencies:
- meson-windows-vs2019
needs:
- meson-windows-vs2019
variables:
GIT_STRATEGY: none # testing doesn't build anything from source
GALLIUM_DRIVER: d3d12
PIGLIT_PROFILE: quick_gl
PIGLIT_OPTIONS: -x nv_copy_depth_to_color -x repeat-wait -x arb_timer_query@timestamp-get
script:
- . _install/piglit_run.ps1
artifacts:
when: on_failure
name: "mesa_${CI_JOB_NAME}"
paths:
- summary/
.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: "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 werror=true
script:
- LLVM_VERSION=8 .gitlab-ci/meson-build.sh
- LLVM_VERSION=9 .gitlab-ci/meson-build.sh
- .gitlab-ci/meson-build.sh
meson-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
EXTRA_OPTION: >
-D vulkan-overlay-layer=true
-D vulkan-device-select-layer=true
-D build-aco-tests=true
-D werror=true
meson-i386:
extends:
- .meson-cross
- .use-i386_build
variables:
CROSS: i386
VULKAN_DRIVERS: intel,amd,swrast
GALLIUM_DRIVERS: "iris,nouveau,r300,r600,radeonsi,swrast,virgl,zink"
DRI_DRIVERS: "i915,i965,r100,r200,nouveau"
EXTRA_OPTION: >
-D vulkan-overlay-layer=true
-D vulkan-device-select-layer=true
-D werror=true
meson-s390x:
extends:
- .meson-cross
- .use-s390x_build
tags:
- kvm
variables:
CROSS: s390x
EXTRA_OPTION: >
-D werror=true
GALLIUM_DRIVERS: "swrast,zink"
VULKAN_DRIVERS: "swrast"
meson-ppc64el:
extends:
- meson-s390x
- .use-ppc64el_build
variables:
CROSS: ppc64el
EXTRA_OPTION: >
-D werror=true
GALLIUM_DRIVERS: "nouveau,radeonsi,swrast,virgl,zink"
VULKAN_DRIVERS: "amd,swrast"
meson-mingw32-x86_64:
extends: .meson-build
stage: build-misc
variables:
UNWIND: "disabled"
DRI_DRIVERS: ""
GALLIUM_DRIVERS: "swrast"
EXTRA_OPTION: >
-Dllvm=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:
# 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/
.use-x86_test-gl:
extends:
- .test
- .set-image-base-tag
variables:
MESA_BASE_TAG: *x86_test-base
MESA_IMAGE_PATH: "debian/x86_test-gl"
MESA_IMAGE_TAG: *x86_test-gl
needs:
- x86_test-gl
.test-gl:
extends:
- .use-x86_test-gl
needs:
- x86_test-gl
- meson-testing
.test-vk:
extends:
- .test
- .set-image-base-tag
variables:
MESA_BASE_TAG: *x86_test-base
MESA_IMAGE_PATH: "debian/x86_test-vk"
MESA_IMAGE_TAG: *x86_test-vk
needs:
- meson-testing
- x86_test-vk
.test-cl:
extends:
- .use-x86_test-gl
needs:
- x86_test-gl
- meson-clover-testing
.piglit-test:
artifacts:
when: on_failure
name: "mesa_${CI_JOB_NAME}"
paths:
- results/summary/
- results/*.txt
variables:
PIGLIT_NO_WINDOW: 1
script:
- install/piglit/run.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
variables:
PIGLIT_PROFILES: replay
PIGLIT_REPLAY_UPLOAD_TO_MINIO: 1
PIGLIT_REPLAY_EXTRA_ARGS: --keep-image --db-path ${CI_PROJECT_DIR}/replayer-db/
PIGLIT_REPLAY_REFERENCE_IMAGES_BASE_URL: "/mesa-tracie-results/$FDO_UPSTREAM_REPO"
PIGLIT_REPLAY_ARTIFACTS_BASE_URL: "/artifacts/$CI_PROJECT_PATH/$CI_PIPELINE_ID/$CI_JOB_ID"
PIGLIT_HTML_SUMMARY: 0
PIGLIT_JUNIT_RESULTS: 1
.llvmpipe-test:
extends:
- .llvmpipe-rules
variables:
LIBGL_ALWAYS_SOFTWARE: "true"
GALLIUM_DRIVER: "llvmpipe"
llvmpipe-piglit-cl:
extends:
- .test-cl
- .piglit-test
- .llvmpipe-test
- .llvmpipe-cl-rules
variables:
LP_CL: 1
LP_NUM_THREADS: 1
PIGLIT_PROFILES: cl
PIGLIT_RESULTS: "llvmpipe-cl"
PIGLIT_OPTIONS: >
-x bswap -x phatk -x clz-optimizations
script:
- install/piglit/run_cl.sh
llvmpipe-piglit-quick_gl:
extends:
- .test-gl
- .piglit-test
- .llvmpipe-test
variables:
GALLIVM_PERF: "no_filter_hacks"
LP_NUM_THREADS: 0
PIGLIT_OPTIONS: >
--process-isolation false
-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_RESULTS: "llvmpipe-quick_gl"
llvmpipe-piglit-glslparser:
extends:
- .test-gl
- .piglit-test
- .llvmpipe-test
variables:
LP_NUM_THREADS: 0
PIGLIT_PROFILES: glslparser
PIGLIT_RESULTS: "llvmpipe-glslparser"
llvmpipe-piglit-quick_shader:
extends:
- .test-gl
- .piglit-test
- .llvmpipe-test
variables:
GALLIVM_PERF: "no_filter_hacks"
LP_NUM_THREADS: 1
PIGLIT_PROFILES: quick_shader
PIGLIT_RESULTS: "llvmpipe-quick_shader"
llvmpipe-traces:
extends:
- .test-gl
- .piglit-traces-test
- .llvmpipe-test
variables:
EGL_PLATFORM: "surfaceless"
PIGLIT_REPLAY_DESCRIPTION_FILE: "${CI_PROJECT_DIR}/install/traces-llvmpipe.yml"
PIGLIT_REPLAY_DEVICE_NAME: "gl-vmware-llvmpipe"
PIGLIT_RESULTS: "llvmpipe-replay"
.zink-test:
extends:
- .zink-rules
variables:
MESA_LOADER_DRIVER_OVERRIDE: "zink"
ZINK_USE_LAVAPIPE: "true"
zink-piglit-quick_gl:
extends:
- .test-gl
- .piglit-test
- .zink-test
variables:
LP_NUM_THREADS: 0
PIGLIT_OPTIONS: >
-x arb_map_buffer_alignment@arb_map_buffer_alignment-map-invalidate-range
-x glx-make-current
PIGLIT_PROFILES: quick_gl
PIGLIT_RESULTS: "zink-quick_gl"
GALLIVM_PERF: "no_filter_hacks"
.virgl-test:
extends:
- .test-gl
- .virgl-rules
variables:
LIBGL_ALWAYS_SOFTWARE: "true"
GALLIUM_DRIVER: "virpipe"
virgl-traces:
extends:
- .virgl-test
- .piglit-traces-test
variables:
EGL_PLATFORM: "surfaceless"
PIGLIT_REPLAY_DESCRIPTION_FILE: "${CI_PROJECT_DIR}/install/traces-virgl.yml"
PIGLIT_REPLAY_DEVICE_NAME: "gl-virgl"
PIGLIT_RESULTS: "virgl-replay"
MESA_GLES_VERSION_OVERRIDE: "3.1"
MESA_GLSL_VERSION_OVERRIDE: "310"
a630-traces:
extends:
- .piglit-traces-test
- .a630-test
variables:
BARE_METAL_TEST_SCRIPT: "/install/piglit/run.sh"
BM_START_XORG: 1
PIGLIT_REPLAY_DESCRIPTION_FILE: "/install/traces-freedreno.yml"
PIGLIT_REPLAY_DEVICE_NAME: "freedreno-a630"
PIGLIT_RESULTS: "freedreno-a630-replay"
# This lets us run several more traces which don't use any features we're
# missing.
MESA_GLSL_VERSION_OVERRIDE: "460"
MESA_GL_VERSION_OVERRIDE: "4.6"
artifacts:
reports:
junit: results/junit.xml
radv-polaris10-traces:
extends:
- .test-radv
- .piglit-traces-test
- .test-manual
variables:
PIGLIT_REPLAY_DESCRIPTION_FILE: "${CI_PROJECT_DIR}/install/traces-radv.yml"
PIGLIT_REPLAY_DEVICE_NAME: "vk-amd-polaris10"
PIGLIT_RESULTS: "radv-polaris10-replay"
tags:
- polaris10
radv-raven-traces:
extends:
- .test-radv
- .piglit-traces-test
- .test-manual
variables:
PIGLIT_REPLAY_DESCRIPTION_FILE: "${CI_PROJECT_DIR}/install/traces-radv.yml"
PIGLIT_REPLAY_DEVICE_NAME: "vk-amd-raven"
PIGLIT_RESULTS: "radv-raven-replay"
tags:
- raven
.deqp-test:
script:
- ./install/deqp-runner.sh
artifacts:
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/
llvmpipe-gles2:
variables:
DEQP_VER: gles2
GALLIVM_PERF: "nopt,no_filter_hacks"
# Don't use threads inside llvmpipe, we've already got all cores
# busy at the deqp-runner level.
ci: Use cts_runner for our dEQP runs. This runner is a little project by Bas, written in C++, that spawns threads that then loop grabbing chunks of the (randomly shuffled but consistently so) test list and hand it to a dEQP instance. As the remaining list gets shorter, so do the chunks, so hopefully the threads all complete effectively at once. It also handles restarting after crashes automatically. I've extended the runner a bit to do what I was doing in the bash scripts before, like the skip list and expected failures handling. This project should also be a good baseline for extending to handle retesting of intermittent failures. By switching to it, we can have the swrast tests just take up one job slot on the shared runners and keep their allotment of CPUs busy, instead of taking up job slots with single-threaded dEQP jobs. It will also let us (eventually, once I reprovision) switch the freedreno runners over to threading within the job instead of running concurrent jobs, so that memory scribbles in one pipeline don't affect unrelated pipelines, and I can experiment with their parallelism (particularly on a306 where we are frequently backed up) without trashing other people's jobs. What we lose in this process is per-test output in the log (not a big loss, I think, since we summarize fails at the end and reducing log length keeps chrome from choking on our logs so badly). We also drop the renderer sanity checking, since it's not saving qpa files for us to go poke through. Given that all the drivers involved have fail lists, if we got the wrong renderer somehow, we'd get a job failure anyway. v2: Rebase on droppong of the autoscale cluster and the arm64 build/test split. Use a script to deduplicate the cts-runner build. v3: Rebase on the amd64 build/test container split. Acked-by: Daniel Stone <daniels@collabora.com> (v1) Reviewed-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> (v2)
2019-11-04 18:54:41 +00:00
LP_NUM_THREADS: 0
GPU_VERSION: llvmpipe
DEQP_EXPECTED_RENDERER: llvmpipe
extends:
- .test-gl
- .deqp-test
- .llvmpipe-test
softpipe-gles2:
extends:
- llvmpipe-gles2
- .softpipe-rules
variables:
GPU_VERSION: softpipe
GALLIUM_DRIVER: "softpipe"
DEQP_EXPECTED_RENDERER: softpipe
softpipe-gles3:
variables:
DEQP_VER: gles3
extends: softpipe-gles2
softpipe-gles31:
parallel: 2
variables:
DEQP_VER: gles31
extends: softpipe-gles2
softpipe-asan-gles31:
variables:
GPU_VERSION: softpipe-asan
DEQP_FRACTION: 10
DEQP_VER: gles31
TEST_LD_PRELOAD: libasan.so.5
extends: softpipe-gles2
needs:
- x86_test-gl
- meson-testing-asan
softpipe-piglit-quick:
extends:
- .test-gl
- .piglit-test
- .softpipe-rules
variables:
GALLIUM_DRIVER: softpipe
# rasterpos skipped until we uprev piglit (commit ff2a7650be7349)
# triangle-rasterization skipped due to flakes thanks to it using a time-based random seed.
# glx-multithread-texture is flaky, undiagnosed
PIGLIT_OPTIONS: >
-x rasterpos
-x triangle-rasterization
-x glx-multithread-texture
-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
-x fs-execution-ordering
-x local-id-explosion
-x arb_pipeline_statistics_query-comp
-x streaming-texture-leak
-x longprim
-x shader-mem-barrier
-x arb_gpu_shader_fp64
-x arb_gpu_shader_int64
-x arb_tessellation_shader
-x glsl-4.00
-x glsl-4.10
-x glsl-4.20
-x glsl-4.30
-x glsl-4.40
-x glsl-4.50
-x gpu_shader4
-x gpu_shader5
PIGLIT_PROFILES: quick_gl quick_shader
PIGLIT_RESULTS: softpipe-quick
# Note that KHR-GL3* test sets include all tests from the previous
# version, so we only need to run one test list (unlike dEQP-GLES,
# where the test sets are separate).
softpipe-gl:
variables:
DEQP_VER: gl33
extends:
- softpipe-gles2
virgl-gles2-on-gl:
variables:
DEQP_VER: gles2
DEQP_NO_SAVE_RESULTS: 1
GPU_VERSION: virgl-gl
# Don't use threads inside llvmpipe, we've already got all cores
# busy at the deqp-runner level.
LP_NUM_THREADS: 0
DEQP_OPTIONS: "--deqp-log-images=disable"
DEQP_EXPECTED_RENDERER: virgl
extends:
- .deqp-test
- .virgl-test
virgl-gles3-on-gl:
variables:
DEQP_VER: gles3
DEQP_RUNNER_OPTIONS: "--timeout 180"
extends: virgl-gles2-on-gl
virgl-gles31-on-gl:
parallel: 2
variables:
DEQP_VER: gles31
MESA_EXTENSION_OVERRIDE: "-GL_OES_tessellation_shader"
extends: virgl-gles3-on-gl
virgl-gl30-on-gl:
variables:
DEQP_VER: gl30
extends: virgl-gles2-on-gl
virgl-gl31-on-gl:
variables:
DEQP_VER: gl31
extends: virgl-gles2-on-gl
virgl-gl32-on-gl:
variables:
DEQP_VER: gl32
extends: virgl-gles2-on-gl
# 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:
- *ignore_scheduled_pipelines
- if: *is-forked-branch
changes:
*all_paths
when: manual
- when: never
variables:
GIT_STRATEGY: none
virgl-gles2-on-gles:
variables:
VIRGL_HOST_API: GLES
GPU_VERSION: virgl-gles
extends:
- virgl-gles2-on-gl
- .test-manual
virgl-gles3-on-gles:
variables:
VIRGL_HOST_API: GLES
GPU_VERSION: virgl-gles
extends:
- virgl-gles3-on-gl
- .test-manual
virgl-gles31-on-gles:
variables:
VIRGL_HOST_API: GLES
GPU_VERSION: virgl-gles
extends:
- virgl-gles31-on-gl
- .test-manual
.a630-test:
extends:
- .freedreno-test
variables:
BM_KERNEL: /lava-files/cheza-kernel
BM_CMDLINE: "ip=dhcp console=ttyMSM0,115200n8 root=/dev/nfs rw nfsrootdebug nfsroot=,tcp,nfsvers=4.2 init=/init"
GPU_VERSION: freedreno-a630
BM_DTB: /lava-files/db820c.dtb
DEQP_EXPECTED_RENDERER: FD630
tags:
- google-freedreno-cheza
script:
- ./install/bare-metal/cros-servo.sh
a630_gles2:
extends:
- .baremetal-deqp-test
- .a630-test
variables:
DEQP_VER: gles2
a630_gles31:
extends:
- .baremetal-deqp-test
- .a630-test
variables:
DEQP_VER: gles31
a630_gles3:
extends:
- .baremetal-deqp-test
- .a630-test
variables:
DEQP_VER: gles3
a630_gl:
extends:
- .baremetal-deqp-test
- .a630-test
variables:
DEQP_VER: gl33
a630_gles_others:
extends:
- .baremetal-deqp-test
- .a630-test
variables:
BARE_METAL_TEST_SCRIPT: "/install/bare-metal/arm64_a630_gles_others.sh"
a630_gles_asan:
extends:
- .baremetal-deqp-test
- .a630-test
- .baremetal-arm64-asan-test
variables:
DEQP_VER: gles31
DEQP_FRACTION: 10
GPU_VERSION: freedreno-a630-asan
a630_vk:
extends:
- .baremetal-deqp-test-freedreno-vk
- .a630-test
parallel: 2
variables:
DEQP_FRACTION: 4
# Force binning in the main run, which makes sure we render at
# least 2 bins. This is the path that impacts the most different
# features. However, we end up with flaky results in
# dEQP-VK.binding_model.*.geometry and dEQP-VK.glsl.*_vertex.
TU_DEBUG: forcebin
# Disabled by default until we can sort out what looks like timeouts before
# getting to the first test (or is it at cleanup after tests completed?).
# Clicking play can show you some useful areas for fixing turnip, though.
a630_vk_asan:
extends:
- .baremetal-deqp-test-freedreno-vk
- .a630-test
- .baremetal-arm64-asan-test
- .test-manual
variables:
DEQP_FRACTION: 100
DEQP_PARALLEL: 4 # We get OOMkills if we go too wide with asan enabled
TU_DEBUG: forcebin
# Disable the leak checks, since the library gets dlclose()d and thus get
# totally useless leak reports. We can still catch buffer overflows.
ASAN_OPTIONS: "detect_leaks=0"
# Do a separate sysmem pass over the testcases that really affect sysmem
# rendering. This is currently very flaky, leave it as an option for devs
# to click play on in their branches.
a630_vk_sysmem:
extends:
- .baremetal-deqp-test-freedreno-vk
- .a630-test
variables:
DEQP_FRACTION: 15
DEQP_CASELIST_FILTER: "dEQP-VK.renderpass.*"
GPU_VERSION: freedreno-a630-bypass
TU_DEBUG: sysmem
.a630_piglit:
extends:
- .piglit-test
- .a630-test
- .test-manual
variables:
BARE_METAL_TEST_SCRIPT: "/install/piglit/run.sh"
BM_START_XORG: 1
# Excluding various features we don't support to keep runtime down in
# deciding that they aren't supported.
#
# Also excluding some particularly slow tests (gl-1.3-texture-env takes 100s)
#
# Known flakes in the list are between "arb_blend_func_extended" and
# "varray-disabled"
#
# vs-output-array-vec2-index-wr-before-gs is skipped because it causes
# a flood of GPU hangs and makes the rest of the job flakey
#
# vs-clip-distance/vertex-enables skipped because they seem to be flaky in
# parallel with other tests (reliably fails on its own)
PIGLIT_OPTIONS: >-
-x vs-output-array-vec2-index-wr-before-gs
-x fixed-clip-enables
-x vs-clip-distance-enables
-x vs-clip-vertex-enables
-x arb_blend_func_extended-fbo-extended-blend-pattern_gles2
-x clear-accum
-x copypixels-sync
-x copyteximage-border
-x copytexsubimage
-x draw-sync
-x getteximage-simple
-x gl30basic
-x tcs-input
-x tes-input
-x unaligned-blit
-x user-clip
-x varray-disabled
-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
-x arb_gpu_shader_fp64
-x arb_gpu_shader_gpu5
-x arb_gpu_shader_int64
-x glsl-4.00
-x glsl-4.10
-x glsl-4.20
-x glsl-4.30
-x glsl-4.40
-x glsl-4.50
-x glsl-4.60
-x gl-1.3-texture-env
# Takes ~20 minutes, so manual-only until we can sort out runtime.
a630_piglit_gl:
extends:
- .a630_piglit
- .test-manual
variables:
PIGLIT_PROFILES: quick_gl
PIGLIT_RESULTS: freedreno-a630-gl
a630_piglit_shader:
extends:
- .a630_piglit
variables:
PIGLIT_PROFILES: quick_shader
PIGLIT_RESULTS: freedreno-a630-shader
.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:
# 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://minio-packet.freedesktop.org/artifacts/${CI_PROJECT_PATH}/${CI_PIPELINE_ID}/${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:
MINIO_ARTIFACT_NAME: mesa-armhf
.baremetal-arm64-asan-test:
variables:
TEST_LD_PRELOAD: libasan.so.5
MINIO_ARTIFACT_NAME: mesa-arm64-asan
needs:
- arm64_test
- job: meson-arm64-asan
artifacts: false
.freedreno-test:
extends:
- .baremetal-test
- .use-arm64_test
- .freedreno-rules
variables:
MINIO_ARTIFACT_NAME: mesa-arm64
BM_ROOTFS: /lava-files/rootfs-arm64
FLAKES_CHANNEL: "#freedreno-ci"
PIGLIT_PLATFORM: mixed_glx_egl
script:
- ./install/bare-metal/fastboot.sh
needs:
- arm64_test
- job: meson-arm64
artifacts: false
tags:
- google-freedreno-db410c
.baremetal-deqp-test:
variables:
BARE_METAL_TEST_SCRIPT: "/install/deqp-runner.sh"
DEQP_SKIPS: deqp-default-skips.txt
DEQP_PARALLEL: 0 # Default to number of CPUs
.baremetal-deqp-test-freedreno-vk:
extends:
- .baremetal-deqp-test
variables:
DEQP_VER: vk
VK_DRIVER: freedreno
.arm64-a306-test:
extends:
- .freedreno-test
variables:
BM_KERNEL: /lava-files/Image.gz
BM_DTB: /lava-files/apq8016-sbc.dtb
BM_CMDLINE: "ip=dhcp console=ttyMSM0,115200n8"
GPU_VERSION: freedreno-a307
DEQP_EXPECTED_RENDERER: FD307
a306_gles2:
extends:
- .baremetal-deqp-test
- .arm64-a306-test
variables:
DEQP_VER: gles2
a306_gles3:
extends:
- .baremetal-deqp-test
- .arm64-a306-test
parallel: 3
variables:
DEQP_VER: gles3
DEQP_FRACTION: 2
# Fractional runs with debug options. Note that since we're not
# hitting the iommu faults, we can run in parallel (derive from gles2, not gles3).
a306_gles3_options:
extends:
- .baremetal-deqp-test
- .arm64-a306-test
variables:
DEQP_VER: gles3
script:
# Check that the non-constbuf UBO case works.
- DEQP_RUN_SUFFIX=-nouboopt IR3_SHADER_DEBUG=nouboopt DEQP_CASELIST_FILTER="functional.*ubo" ./install/bare-metal/fastboot.sh
.arm64-a530-test:
extends:
- .freedreno-test
variables:
BM_KERNEL: /lava-files/db820c-kernel
BM_DTB: /lava-files/db820c.dtb
# Disable SMP because only CPU 0 is at a freq higher than 19mhz on
# current upstream kernel.
BM_CMDLINE: "ip=dhcp console=ttyMSM0,115200n8 nosmp"
FDO_CI_CONCURRENT: 1
GPU_VERSION: freedreno-a530
DEQP_EXPECTED_RENDERER: FD530
tags:
- google-freedreno-db820c
a530_gles2:
extends:
- .baremetal-deqp-test
- .arm64-a530-test
variables:
DEQP_VER: gles2
parallel: 2
a530_gles3:
extends:
- .baremetal-deqp-test
- .arm64-a530-test
variables:
DEQP_VER: gles3
DEQP_FRACTION: 40
a530_gles31:
extends:
- a530_gles3
variables:
DEQP_VER: gles31
DEQP_FRACTION: 10
.a530_piglit:
extends:
- .piglit-test
- .arm64-a530-test
- .test-manual
variables:
BARE_METAL_TEST_SCRIPT: "/install/piglit/run.sh"
BM_START_XORG: 1
# SMP is disabled in the current kernels for db820c.
FDO_CI_CONCURRENT: 1
# Excluding for flakes in multisample (MSAA fails covered well by deqp, we
# can enable it once we stabilize that.) and other flakes from
# atomic_counters through userclip in the list.
#
# Also excluding some particularly slow tests (gl-1.3-texture-env)
#
# Check fastboot.sh for more piglit tests being excluded!
PIGLIT_OPTIONS: >-
-x atomic_counters
-x gl-1.0-blend-func
-x glsl-1.30@execution@clipping
-x user-clip
-x arb_texture_multisample
-x ext_framebuffer_multisample
-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
-x arb_gpu_shader5
-x arb_gpu_shader_fp64
-x arb_gpu_shader_int64
-x arb_tessellation_shader
-x glsl-1.50
-x glsl-4.00
-x glsl-4.10
-x glsl-4.20
-x glsl-4.30
-x glsl-4.40
-x glsl-4.50
-x glsl-4.60
-x gl-1.3-texture-env
# Takes ~25 minutes, so manual-only until we can sort out runtime.
a530_piglit_gl:
extends:
- .a530_piglit
variables:
PIGLIT_PROFILES: quick_gl
PIGLIT_RESULTS: freedreno-a530-gl
a530_piglit_shader:
extends:
- .a530_piglit
variables:
PIGLIT_PROFILES: quick_shader
PIGLIT_RESULTS: freedreno-a530-shader
.vc4-rpi3-test:armhf:
ci: add testing for VC4 drivers (Raspberry Pi 3) This tests OpenGL ES 2.0 CTS suite with VC4 drivers, through baremetal Raspberry Pi 3 devices. The devices are connected to a switch that supports Power over Ethernet (PoE), so the devices can be started/stopped through the switch, and also to a host that runs the GitLab runner through serial-to-USB cables, to monitor the devices to know when the testing finishes. The Raspberries uses a network boot, using NFS and TFTP. For the root filesystem, they use the one created in the armhf container. For the kernel/modules case, this is handled externally. Currently it is using the same kernel/modules that come with the Raspberry Pi OS. In future we could build them in the same armhf container. At this moment we only test armhf architecture, as this is the default one suggested by the Raspberry Pi Foundation. In future we could also add testing for arm64 architecture. Finally, for the very rare ocassions where the Raspberry Pi 3 device is booted but no data is received, it retries the testing for a second time, powering off and on the device in the process. v2: - Remove commit that exists capture devcoredump (Eric) - Squash remaining commits in one (Andres) v3: - Add missing boot timeout check (Juan) v4: - Use locks when running the PoE on/off script (Eric) - Use a timeout for serial read (Eric) v5: - Rename stage to "raspberrypi" (Eric) - Bump up arm64_test tag (Eric) v6: - Make serial buffer timeout optional (Juan) Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7628>
2020-11-15 19:57:55 +00:00
extends:
- .baremetal-test-armhf
ci: add testing for VC4 drivers (Raspberry Pi 3) This tests OpenGL ES 2.0 CTS suite with VC4 drivers, through baremetal Raspberry Pi 3 devices. The devices are connected to a switch that supports Power over Ethernet (PoE), so the devices can be started/stopped through the switch, and also to a host that runs the GitLab runner through serial-to-USB cables, to monitor the devices to know when the testing finishes. The Raspberries uses a network boot, using NFS and TFTP. For the root filesystem, they use the one created in the armhf container. For the kernel/modules case, this is handled externally. Currently it is using the same kernel/modules that come with the Raspberry Pi OS. In future we could build them in the same armhf container. At this moment we only test armhf architecture, as this is the default one suggested by the Raspberry Pi Foundation. In future we could also add testing for arm64 architecture. Finally, for the very rare ocassions where the Raspberry Pi 3 device is booted but no data is received, it retries the testing for a second time, powering off and on the device in the process. v2: - Remove commit that exists capture devcoredump (Eric) - Squash remaining commits in one (Andres) v3: - Add missing boot timeout check (Juan) v4: - Use locks when running the PoE on/off script (Eric) - Use a timeout for serial read (Eric) v5: - Rename stage to "raspberrypi" (Eric) - Bump up arm64_test tag (Eric) v6: - Make serial buffer timeout optional (Juan) Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7628>
2020-11-15 19:57:55 +00:00
- .vc4-rules
- .use-armhf_test
ci: add testing for VC4 drivers (Raspberry Pi 3) This tests OpenGL ES 2.0 CTS suite with VC4 drivers, through baremetal Raspberry Pi 3 devices. The devices are connected to a switch that supports Power over Ethernet (PoE), so the devices can be started/stopped through the switch, and also to a host that runs the GitLab runner through serial-to-USB cables, to monitor the devices to know when the testing finishes. The Raspberries uses a network boot, using NFS and TFTP. For the root filesystem, they use the one created in the armhf container. For the kernel/modules case, this is handled externally. Currently it is using the same kernel/modules that come with the Raspberry Pi OS. In future we could build them in the same armhf container. At this moment we only test armhf architecture, as this is the default one suggested by the Raspberry Pi Foundation. In future we could also add testing for arm64 architecture. Finally, for the very rare ocassions where the Raspberry Pi 3 device is booted but no data is received, it retries the testing for a second time, powering off and on the device in the process. v2: - Remove commit that exists capture devcoredump (Eric) - Squash remaining commits in one (Andres) v3: - Add missing boot timeout check (Juan) v4: - Use locks when running the PoE on/off script (Eric) - Use a timeout for serial read (Eric) v5: - Rename stage to "raspberrypi" (Eric) - Bump up arm64_test tag (Eric) v6: - Make serial buffer timeout optional (Juan) Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7628>
2020-11-15 19:57:55 +00:00
variables:
BM_BOOTFS: /boot/armhf
BM_KERNEL_MODULES: vc4
BM_ROOTFS: /lava-files/rootfs-armhf
BM_ROOTFS_EXTRA: /modules/armhf
GPU_VERSION: vc4-rpi3
ci: add testing for VC4 drivers (Raspberry Pi 3) This tests OpenGL ES 2.0 CTS suite with VC4 drivers, through baremetal Raspberry Pi 3 devices. The devices are connected to a switch that supports Power over Ethernet (PoE), so the devices can be started/stopped through the switch, and also to a host that runs the GitLab runner through serial-to-USB cables, to monitor the devices to know when the testing finishes. The Raspberries uses a network boot, using NFS and TFTP. For the root filesystem, they use the one created in the armhf container. For the kernel/modules case, this is handled externally. Currently it is using the same kernel/modules that come with the Raspberry Pi OS. In future we could build them in the same armhf container. At this moment we only test armhf architecture, as this is the default one suggested by the Raspberry Pi Foundation. In future we could also add testing for arm64 architecture. Finally, for the very rare ocassions where the Raspberry Pi 3 device is booted but no data is received, it retries the testing for a second time, powering off and on the device in the process. v2: - Remove commit that exists capture devcoredump (Eric) - Squash remaining commits in one (Andres) v3: - Add missing boot timeout check (Juan) v4: - Use locks when running the PoE on/off script (Eric) - Use a timeout for serial read (Eric) v5: - Rename stage to "raspberrypi" (Eric) - Bump up arm64_test tag (Eric) v6: - Make serial buffer timeout optional (Juan) Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7628>
2020-11-15 19:57:55 +00:00
DEQP_EXPECTED_RENDERER: VC4
script:
- ./install/bare-metal/poe-powered.sh
needs:
- job: armhf_test
artifacts: false
ci: add testing for VC4 drivers (Raspberry Pi 3) This tests OpenGL ES 2.0 CTS suite with VC4 drivers, through baremetal Raspberry Pi 3 devices. The devices are connected to a switch that supports Power over Ethernet (PoE), so the devices can be started/stopped through the switch, and also to a host that runs the GitLab runner through serial-to-USB cables, to monitor the devices to know when the testing finishes. The Raspberries uses a network boot, using NFS and TFTP. For the root filesystem, they use the one created in the armhf container. For the kernel/modules case, this is handled externally. Currently it is using the same kernel/modules that come with the Raspberry Pi OS. In future we could build them in the same armhf container. At this moment we only test armhf architecture, as this is the default one suggested by the Raspberry Pi Foundation. In future we could also add testing for arm64 architecture. Finally, for the very rare ocassions where the Raspberry Pi 3 device is booted but no data is received, it retries the testing for a second time, powering off and on the device in the process. v2: - Remove commit that exists capture devcoredump (Eric) - Squash remaining commits in one (Andres) v3: - Add missing boot timeout check (Juan) v4: - Use locks when running the PoE on/off script (Eric) - Use a timeout for serial read (Eric) v5: - Rename stage to "raspberrypi" (Eric) - Bump up arm64_test tag (Eric) v6: - Make serial buffer timeout optional (Juan) Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7628>
2020-11-15 19:57:55 +00:00
- meson-armhf
tags:
- igalia-rpi3
vc4-rpi3-gles2:armhf:
extends:
- .vc4-rpi3-test:armhf
parallel: 4
variables:
BARE_METAL_TEST_SCRIPT: "/install/deqp-runner.sh"
DEQP_VER: gles2
# The vc4s are so slow that it takes about a minute to get through the
# default 500 tests in a group, triggering the serial watchdog.
DEQP_RUNNER_OPTIONS: "--tests-per-group 250"
.vc4-rpi3-piglit:armhf:
extends:
- .piglit-test
- .vc4-rpi3-test:armhf
- .test-manual
variables:
BARE_METAL_TEST_SCRIPT: "/install/piglit/run.sh"
BM_POE_TIMEOUT: 180
PIGLIT_OPTIONS: >-
--timeout 60
-x .tesc
-x .tese
-x arb_gpu_shader_fp64
-x arb_gpu_shader_gpu5
-x arb_gpu_shader_int64
-x arb_tessellation_shader
-x arb_texture_cube_map
-x clipflat
-x copypixels-sync
-x copyteximage
-x depthstencil-default_fb
-x draw-sync
-x egl_ext_device_
-x egl_ext_platform_device
-x ext_framebuffer_multisample
-x ext_timer_query@time-elapsed
-x gl-1.0-blend-func
-x gl-1.3-texture-env
-x glsl-1.30
-x glsl-3.30
-x glsl-4.00
-x glsl-4.10
-x glsl-4.20
-x glsl-4.30
-x glsl-4.40
-x glsl-4.50
-x glsl-4.60
-x glsl-es-3.00
-x glsl-es-3.20
-x glsl-fs-convolution-2
-x glsl-vs-loop
-x glsl-vs-loop-nested
-x glsl-vs-mov-after-deref
-x glx-multithread-clearbuffer
-x glx-multithread-shader-compile
-x image_load_store
-x longprim
-x masked-clear
-x max-texture-size
-x maxsize
-x ppgtt_memory_alignment
-x streaming-texture-leak
-x texturesize
PIGLIT_PLATFORM: gbm
vc4-rpi3-piglit-quick_gl:armhf:
extends:
- .vc4-rpi3-piglit:armhf
variables:
FDO_CI_CONCURRENT: 1
PIGLIT_PROFILES: quick_gl
PIGLIT_RESULTS: "vc4-rpi3-quick_gl"
vc4-rpi3-piglit-quick_shader:armhf:
extends:
- .vc4-rpi3-piglit:armhf
variables:
FDO_CI_CONCURRENT: 2
PIGLIT_PROFILES: quick_shader
PIGLIT_RESULTS: "vc4-rpi3-quick_shader"
.v3d-rpi4-test:armhf:
extends:
- .baremetal-test-armhf
- .v3d-rules
- .use-armhf_test
variables:
BARE_METAL_TEST_SCRIPT: "/install/deqp-runner.sh"
BM_BOOTFS: /boot/armhf
BM_KERNEL_MODULES: v3d,vc4
BM_POE_TIMEOUT: 300
BM_ROOTFS: /lava-files/rootfs-armhf
BM_ROOTFS_EXTRA: /modules/armhf
DEQP_EXPECTED_RENDERER: V3D
GPU_VERSION: v3d-rpi4
script:
- ./install/bare-metal/poe-powered.sh
needs:
- armhf_test
- meson-armhf
tags:
- igalia-rpi4
v3d-rpi4-gles31:armhf:
extends:
- .v3d-rpi4-test:armhf
parallel: 2
variables:
DEQP_FRACTION: 2
DEQP_VER: gles31
v3d-rpi4-gles3:armhf:
extends:
- .v3d-rpi4-test:armhf
parallel: 4
variables:
DEQP_FRACTION: 2
DEQP_VER: gles3
v3d-rpi4-gles2:armhf:
extends:
- .v3d-rpi4-test:armhf
variables:
DEQP_VER: gles2
.v3d-rpi4-piglit:armhf:
extends:
- .piglit-test
- .v3d-rpi4-test:armhf
- .test-manual
variables:
BARE_METAL_TEST_SCRIPT: "/install/piglit/run.sh"
PIGLIT_OPTIONS: >-
--timeout 60
-x .tesc
-x .tese
-x arb_gpu_shader_fp64
-x arb_gpu_shader_gpu5
-x arb_gpu_shader_int64
-x arb_tessellation_shader
-x depthstencil-default_fb
-x egl_ext_platform_device
-x ext_timer_query@time-elapsed
-x gl-1.3-texture-env
-x glsl-1.30
-x glsl-3.30
-x glsl-4.00
-x glsl-4.10
-x glsl-4.20
-x glsl-4.30
-x glsl-4.40
-x glsl-4.50
-x glsl-4.60
-x glsl-es-3.00
-x glsl-es-3.20
-x glx-multithread-clearbuffer
-x glx-multithread-shader-compile
-x image_load_store
-x max-texture-size
-x maxsize
-x streaming-texture-leak
-x tex-miplevel-selection
PIGLIT_PLATFORM: gbm
v3d-rpi4-piglit-quick_gl:armhf:
extends:
- .v3d-rpi4-piglit:armhf
variables:
PIGLIT_PROFILES: quick_gl
PIGLIT_RESULTS: "v3d-rpi4-quick_gl"
v3d-rpi4-piglit-quick_shader:armhf:
extends:
- .v3d-rpi4-piglit:armhf
variables:
PIGLIT_PROFILES: quick_shader
PIGLIT_RESULTS: "v3d-rpi4-shader_gl"
v3dv-rpi4-vk:armhf:
extends:
- .baremetal-test-armhf
- .use-armhf_test
- .v3dv-rules
parallel: 6
variables:
BARE_METAL_TEST_SCRIPT: "/install/deqp-runner.sh"
BM_BOOTFS: /boot/armhf
BM_KERNEL_MODULES: v3d,vc4
BM_POE_TIMEOUT: 300
BM_ROOTFS: /lava-files/rootfs-armhf
BM_ROOTFS_EXTRA: /modules/armhf
CPU: arm7hlf
DEQP_EXPECTED_RENDERER: "V3D 4.2"
DEQP_FRACTION: 7
DEQP_VER: vk
GPU_VERSION: v3dv-rpi4
VK_CPU: arm7hlf
VK_DRIVER: broadcom
script:
- ./install/bare-metal/poe-powered.sh
needs:
- armhf_test
- meson-armhf
tags:
- igalia-rpi4
lavapipe-vk:
stage: software-renderer
extends:
- .test-vk
- .llvmpipe-rules
- .deqp-test-vk
variables:
GPU_VERSION: lvp
VK_DRIVER: lvp
DEQP_FRACTION: 10
# RADV CI
.test-radv:
extends:
- .test-vk
- .radv-rules
stage: amd
variables:
VK_DRIVER: radeon
ACO_DEBUG: validateir,validatera
# 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:
GPU_VERSION: radv-polaris10
tags:
- polaris10
radv-fossils:
extends:
- .fossilize-test
- .test-radv
script:
# Pitcairn (GFX6)
- export RADV_FORCE_FAMILY="pitcairn"
- ./install/fossilize-runner.sh
# Bonaire (GFX7)
- export RADV_FORCE_FAMILY="bonaire"
- ./install/fossilize-runner.sh
# Polaris10 (GFX8)
- export RADV_FORCE_FAMILY="polaris10"
- ./install/fossilize-runner.sh
# Vega10 (GFX9)
- export RADV_FORCE_FAMILY="gfx900"
- ./install/fossilize-runner.sh
# Navi10 (GFX10)
- export RADV_FORCE_FAMILY="gfx1010"
- ./install/fossilize-runner.sh
# Sienna Cichlid (GFX10)
- export RADV_FORCE_FAMILY="gfx1030"
- ./install/fossilize-runner.sh