diff options
Diffstat (limited to '.gitlab-ci.yml')
-rw-r--r-- | .gitlab-ci.yml | 1497 |
1 files changed, 243 insertions, 1254 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5059316e8c7..16e401a19f9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,47 +1,131 @@ +# Types of CI pipelines: +# | pipeline name | context | description | +# |----------------------|-----------|-------------------------------------------------------------| +# | merge pipeline | mesa/mesa | pipeline running for an MR; if it passes the MR gets merged | +# | pre-merge pipeline | mesa/mesa | same as above, except its status doesn't affect the MR | +# | post-merge pipeline | mesa/mesa | pipeline immediately after merging | +# | fork pipeline | fork | pipeline running in a user fork | +# | scheduled pipeline | mesa/mesa | nightly pipelines, running every morning at 4am UTC | +# | direct-push pipeline | mesa/mesa | when commits are pushed directly to mesa/mesa, bypassing Marge and its gating pipeline | +# +# Note that the release branches maintained by the release manager fall under +# the "direct push" category. +# +# "context" indicates the permissions that the jobs get; notably, any +# container created in mesa/mesa gets pushed immediately for everyone to use +# as soon as the image tag change is merged. +# +# Merge pipelines contain all jobs that must pass before the MR can be merged. +# Pre-merge pipelines contain the exact same jobs as merge pipelines. +# Post-merge pipelines contain *only* the `pages` job that deploys the new +# version of the website. +# Fork pipelines contain everything. +# Scheduled pipelines only contain the container+build jobs, and some extra +# test jobs (typically "full" variants of pre-merge jobs that only run 1/X +# test cases), but not a repeat of the merge pipeline jobs. +# Direct-push pipelines contain the same jobs as merge pipelines. + +workflow: + rules: + # do not duplicate pipelines on merge pipelines + - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push" + when: never + # merge pipeline + - if: &is-merge-attempt $GITLAB_USER_LOGIN == "marge-bot" && $CI_PIPELINE_SOURCE == "merge_request_event" + variables: + KERNEL_IMAGE_BASE: https://${S3_HOST}/mesa-lava/${KERNEL_REPO}/${KERNEL_TAG} + MESA_CI_PERFORMANCE_ENABLED: 1 + VALVE_INFRA_VANGOGH_JOB_PRIORITY: "" # Empty tags are ignored by gitlab + # post-merge pipeline + - if: &is-post-merge $GITLAB_USER_LOGIN == "marge-bot" && $CI_PIPELINE_SOURCE == "push" + # nightly pipeline + - if: &is-scheduled-pipeline $CI_PIPELINE_SOURCE == "schedule" + variables: + KERNEL_IMAGE_BASE: https://${S3_HOST}/mesa-lava/${KERNEL_REPO}/${KERNEL_TAG} + JOB_PRIORITY: 50 + VALVE_INFRA_VANGOGH_JOB_PRIORITY: priority:low + # pipeline for direct pushes that bypassed the CI + - if: &is-direct-push $CI_PROJECT_NAMESPACE == "mesa" && $CI_PIPELINE_SOURCE == "push" && $GITLAB_USER_LOGIN != "marge-bot" + variables: + KERNEL_IMAGE_BASE: https://${S3_HOST}/mesa-lava/${KERNEL_REPO}/${KERNEL_TAG} + JOB_PRIORITY: 40 + VALVE_INFRA_VANGOGH_JOB_PRIORITY: priority:low + # pre-merge or fork pipeline + - if: $FORCE_KERNEL_TAG != null + variables: + KERNEL_IMAGE_BASE: https://${S3_HOST}/mesa-lava/${KERNEL_REPO}/${FORCE_KERNEL_TAG} + JOB_PRIORITY: 50 + VALVE_INFRA_VANGOGH_JOB_PRIORITY: priority:low + - if: $FORCE_KERNEL_TAG == null + variables: + KERNEL_IMAGE_BASE: https://${S3_HOST}/mesa-lava/${KERNEL_REPO}/${KERNEL_TAG} + JOB_PRIORITY: 50 + VALVE_INFRA_VANGOGH_JOB_PRIORITY: priority:low + + variables: FDO_UPSTREAM_REPO: mesa/mesa - MESA_TEMPLATES_COMMIT: &ci-templates-commit 290b79e0e78eab67a83766f4e9691be554fc4afd + MESA_TEMPLATES_COMMIT: &ci-templates-commit d5aa3941aa03c2f716595116354fb81eb8012acb 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 | bash - + wget -q -O download-git-cache.sh ${CI_PROJECT_URL}/-/raw/${CI_COMMIT_SHA}/.gitlab-ci/download-git-cache.sh + bash download-git-cache.sh + rm download-git-cache.sh set +o xtrace - MINIO_HOST: minio-packet.freedesktop.org + CI_JOB_JWT_FILE: /minio_jwt + S3_HOST: s3.freedesktop.org # per-pipeline artifact storage on MinIO - PIPELINE_ARTIFACTS_BASE: ${MINIO_HOST}/artifacts/${CI_PROJECT_PATH}/${CI_PIPELINE_ID} + PIPELINE_ARTIFACTS_BASE: ${S3_HOST}/artifacts/${CI_PROJECT_PATH}/${CI_PIPELINE_ID} # per-job artifact storage on MinIO JOB_ARTIFACTS_BASE: ${PIPELINE_ARTIFACTS_BASE}/${CI_JOB_ID} # reference images stored for traces - PIGLIT_REPLAY_REFERENCE_IMAGES_BASE: "${MINIO_HOST}/mesa-tracie-results/$FDO_UPSTREAM_REPO" - # Individual CI farm status, set to "offline" to disable jobs - # running on a particular CI farm (ie. for outages, etc): - FD_FARM: "online" + PIGLIT_REPLAY_REFERENCE_IMAGES_BASE: "${S3_HOST}/mesa-tracie-results/$FDO_UPSTREAM_REPO" + # For individual CI farm status see .ci-farms folder + # Disable farm with `git mv .ci-farms{,-disabled}/$farm_name` + # Re-enable farm with `git mv .ci-farms{-disabled,}/$farm_name` + # NEVER MIX FARM MAINTENANCE WITH ANY OTHER CHANGE IN THE SAME MERGE REQUEST! + ARTIFACTS_BASE_URL: https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-/${CI_PROJECT_NAME}/-/jobs/${CI_JOB_ID}/artifacts + # Python scripts for structured logger + PYTHONPATH: "$PYTHONPATH:$CI_PROJECT_DIR/install" + # Drop once deqp-runner is upgraded to > 0.18.0 + MESA_VK_ABORT_ON_DEVICE_LOSS: 1 + # Avoid the wall of "Unsupported SPIR-V capability" warnings in CI job log, hiding away useful output + MESA_SPIRV_LOG_LEVEL: error + +default: + before_script: + - > + export SCRIPTS_DIR=$(mktemp -d) && + curl -L -s --retry 4 -f --retry-all-errors --retry-delay 60 -O --output-dir "${SCRIPTS_DIR}" "${CI_PROJECT_URL}/-/raw/${CI_COMMIT_SHA}/.gitlab-ci/setup-test-env.sh" && + . ${SCRIPTS_DIR}/setup-test-env.sh && + echo -n "${CI_JOB_JWT}" > "${CI_JOB_JWT_FILE}" && + unset CI_JOB_JWT # Unsetting vulnerable env variables -include: - - project: 'freedesktop/ci-templates' - ref: 79c325922670137e8f0a4dc5f6f097e0eb57c1af - file: - - '/templates/ci-fairy.yml' - - project: 'freedesktop/ci-templates' - ref: *ci-templates-commit - file: - - '/templates/debian.yml' - - '/templates/fedora.yml' - - local: '.gitlab-ci/lava/lava-gitlab-ci.yml' - - local: '.gitlab-ci/test-source-dep.yml' - - local: 'src/amd/ci/gitlab-ci.yml' - - local: 'src/broadcom/ci/gitlab-ci.yml' - - local: 'src/etnaviv/ci/gitlab-ci.yml' - - local: 'src/freedreno/ci/gitlab-ci.yml' - - local: 'src/gallium/drivers/i915/ci/gitlab-ci.yml' - - local: 'src/gallium/drivers/iris/ci/gitlab-ci.yml' - - local: 'src/gallium/drivers/lima/ci/gitlab-ci.yml' - - local: 'src/gallium/drivers/llvmpipe/ci/gitlab-ci.yml' - - local: 'src/gallium/drivers/panfrost/ci/gitlab-ci.yml' - - local: 'src/gallium/drivers/radeonsi/ci/gitlab-ci.yml' - - local: 'src/gallium/drivers/softpipe/ci/gitlab-ci.yml' - - local: 'src/gallium/drivers/virgl/ci/gitlab-ci.yml' - - local: 'src/gallium/drivers/zink/ci/gitlab-ci.yml' - - local: 'src/gallium/frontends/lavapipe/ci/gitlab-ci.yml' + after_script: + # Work around https://gitlab.com/gitlab-org/gitlab/-/issues/20338 + - find -name '*.log' -exec mv {} {}.txt \; + + - > + set +x + + test -e "${CI_JOB_JWT_FILE}" && + export CI_JOB_JWT="$(<${CI_JOB_JWT_FILE})" && + rm "${CI_JOB_JWT_FILE}" + + # Retry when job fails. Failed jobs can be found in the Mesa CI Daily Reports: + # https://gitlab.freedesktop.org/mesa/mesa/-/issues/?sort=created_date&state=opened&label_name%5B%5D=CI%20daily + retry: + max: 1 + # Ignore runner_unsupported, stale_schedule, archived_failure, or + # unmet_prerequisites + when: + - api_failure + - runner_system_failure + - script_failure + - job_execution_timeout + - scheduler_failure + - data_integrity_failure + - unknown_failure stages: - sanity @@ -49,8 +133,10 @@ stages: - git-archive - build-x86_64 - build-misc + - code-validation - amd - intel + - nouveau - arm - broadcom - freedreno @@ -59,126 +145,91 @@ stages: - layered-backends - deploy -# 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 +include: + - project: 'freedesktop/ci-templates' + ref: 16bc29078de5e0a067ff84a1a199a3760d3b3811 + file: + - '/templates/ci-fairy.yml' + - project: 'freedesktop/ci-templates' + ref: *ci-templates-commit + file: + - '/templates/alpine.yml' + - '/templates/debian.yml' + - '/templates/fedora.yml' + - local: '.gitlab-ci/image-tags.yml' + - local: '.gitlab-ci/lava/lava-gitlab-ci.yml' + - local: '.gitlab-ci/container/gitlab-ci.yml' + - local: '.gitlab-ci/build/gitlab-ci.yml' + - local: '.gitlab-ci/test/gitlab-ci.yml' + - local: '.gitlab-ci/farm-rules.yml' + - local: '.gitlab-ci/test-source-dep.yml' + - local: 'docs/gitlab-ci.yml' + - local: 'src/**/ci/gitlab-ci.yml' + # 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 not for Marge bot - - if: &is-forked-branch-or-pre-merge-not-for-marge '$CI_PROJECT_NAMESPACE != "mesa" || ($GITLAB_USER_LOGIN != "marge-bot" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == $CI_COMMIT_REF_NAME)' - when: manual - # Pipeline runs for the main branch of the upstream Mesa project - - if: &is-mesa-main '$CI_PROJECT_NAMESPACE == "mesa" && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != $CI_DEFAULT_BRANCH' - 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 + # Pre-merge pipeline + - &is-pre-merge '$CI_PIPELINE_SOURCE == "merge_request_event"' -.docs-base: - extends: - - .fdo.ci-fairy - - .ci-run-policy - script: - - apk --no-cache add graphviz doxygen - - pip3 install "sphinx<4.0" breathe mako sphinx_rtd_theme - - docs/doxygen-wrapper.py --out-dir=docs/doxygen_xml - - sphinx-build -W -b html docs public - -pages: - extends: .docs-base - stage: deploy - artifacts: - paths: - - public - needs: [] +.never-post-merge-rules: rules: - - *ignore_scheduled_pipelines - - if: *is-mesa-main - changes: &docs-or-ci - - docs/**/* - - .gitlab-ci.yml - when: always - # Other cases default to never + - if: *is-post-merge + when: 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/ +.container+build-rules: rules: + # Run when re-enabling a disabled farm, but not when disabling it + - !reference [.disable-farm-mr-rules, rules] + # Never run immediately after merging, as we just ran everything + - !reference [.never-post-merge-rules, rules] + # Build everything in merge pipelines, if any files affecting the pipeline + # were changed + - if: *is-merge-attempt + changes: &all_paths + - VERSION + - bin/git_sha1_gen.py + - bin/install_megadrivers.py + - bin/symbols-check.py + # GitLab CI + - .gitlab-ci.yml + - .gitlab-ci/**/* + - .ci-farms/* + # Meson + - meson* + - build-support/**/* + - subprojects/**/* + # clang format + - .clang-format + - .clang-format-include + - .clang-format-ignore + # Source code + - include/**/* + - src/**/* + when: on_success + # Same as above, but for pre-merge pipelines + - if: *is-pre-merge + changes: + *all_paths + when: manual + # Skip everything for pre-merge and merge pipelines which don't change + # anything in the build + - if: *is-merge-attempt + when: never - if: *is-pre-merge - changes: *docs-or-ci + when: never + # Build everything after someone bypassed the CI + - if: *is-direct-push 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/**/* + # Build everything in scheduled pipelines + - if: *is-scheduled-pipeline when: on_success - # Otherwise, build/test jobs won't run - - when: never - retry: - max: 2 - when: - - runner_system_failure + # Allow building everything in fork pipelines, but build nothing unless + # manually triggered + - when: manual .ci-deqp-artifacts: @@ -193,389 +244,6 @@ test-docs-mr: - _build/meson-logs/*.txt - _build/meson-logs/strace - -# Docker image tag helper templates - -.incorporate-templates-commit: - variables: - FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${MESA_TEMPLATES_COMMIT}" - -.incorporate-base-tag+templates-commit: - variables: - FDO_BASE_IMAGE: "${CI_REGISTRY_IMAGE}/${MESA_BASE_IMAGE}:${MESA_BASE_TAG}--${MESA_TEMPLATES_COMMIT}" - FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${MESA_BASE_TAG}--${MESA_TEMPLATES_COMMIT}" - -.set-image: - extends: - - .incorporate-templates-commit - variables: - MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${FDO_DISTRIBUTION_TAG}" - image: "$MESA_IMAGE" - -.set-image-base-tag: - extends: - - .set-image - - .incorporate-base-tag+templates-commit - variables: - MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${FDO_DISTRIBUTION_TAG}" - - -# Build the CI docker images. -# -# MESA_IMAGE_TAG is the tag of the docker image used by later stage jobs. If the -# image doesn't exist yet, the container stage job generates it. -# -# In order to generate a new image, one should generally change the tag. -# While removing the image from the registry would also work, that's not -# recommended except for ephemeral images during development: Replacing -# an image after a significant amount of time might pull in newer -# versions of gcc/clang or other packages, which might break the build -# with older commits using the same tag. -# -# After merging a change resulting in generating a new image to the -# main repository, it's recommended to remove the image from the source -# repository's container registry, so that the image from the main -# repository's registry will be used there as well. - -.container: - stage: container - 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: bullseye-slim - FDO_REPO_SUFFIX: $CI_JOB_NAME - FDO_DISTRIBUTION_EXEC: 'env FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash .gitlab-ci/container/${CI_JOB_NAME}.sh' - # no need to pull the whole repo to build the container image - GIT_STRATEGY: none - -.use-base-image: - extends: - - .container - - .incorporate-base-tag+templates-commit - # Don't want the .container rules - - .ci-run-policy - -# Debian 11 based x86 build image base -debian/x86_build-base: - extends: - - .fdo.container-build@debian - - .container - variables: - MESA_IMAGE_TAG: &debian-x86_build-base "2021-07-26-python" - -.use-debian/x86_build-base: - extends: - - .fdo.container-build@debian - - .use-base-image - variables: - MESA_BASE_IMAGE: "debian/x86_build-base" - MESA_BASE_TAG: *debian-x86_build-base - MESA_ARTIFACTS_BASE_TAG: *debian-x86_build-base - needs: - - debian/x86_build-base - -# Debian 11 based x86 main build image -debian/x86_build: - extends: - - .use-debian/x86_build-base - variables: - MESA_IMAGE_TAG: &debian-x86_build "2021-07-02-bump-libdrm" - -.use-debian/x86_build: - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_build-base - MESA_IMAGE_PATH: "debian/x86_build" - MESA_IMAGE_TAG: *debian-x86_build - needs: - - debian/x86_build - -# Debian 11 based i386 cross-build image -debian/i386_build: - extends: - - .use-debian/x86_build-base - variables: - MESA_IMAGE_TAG: &debian-i386_build "2021-07-02-bump-libdrm" - -.use-debian/i386_build: - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_build-base - MESA_IMAGE_PATH: "debian/i386_build" - MESA_IMAGE_TAG: *debian-i386_build - needs: - - debian/i386_build - -# Debian 11 based ppc64el cross-build image -debian/ppc64el_build: - extends: - - .use-debian/x86_build-base - variables: - MESA_IMAGE_TAG: &debian-ppc64el_build "2021-07-02-bump-libdrm" - -.use-debian/ppc64el_build: - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_build-base - MESA_IMAGE_PATH: "debian/ppc64el_build" - MESA_IMAGE_TAG: *debian-ppc64el_build - needs: - - debian/ppc64el_build - -# Debian 11 based s390x cross-build image -debian/s390x_build: - extends: - - .use-debian/x86_build-base - variables: - MESA_IMAGE_TAG: &debian-s390x_build "2021-07-02-bump-libdrm" - -.use-debian/s390x_build: - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_build-base - MESA_IMAGE_PATH: "debian/s390x_build" - MESA_IMAGE_TAG: *debian-s390x_build - needs: - - debian/s390x_build - -# Android NDK cross-build image -debian/android_build: - extends: - - .use-debian/x86_build-base - variables: - MESA_IMAGE_TAG: &debian-android_build "2021-07-02-bump-libdrm" - -.use-debian/android_build: - extends: - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_build-base - MESA_IMAGE_PATH: "debian/android_build" - MESA_IMAGE_TAG: *debian-android_build - needs: - - debian/android_build - -# Debian 11 based x86 test image base -debian/x86_test-base: - extends: debian/x86_build-base - variables: - MESA_IMAGE_TAG: &debian-x86_test-base "2021-07-26-python" - -.use-debian/x86_test-base: - extends: - - .fdo.container-build@debian - - .use-base-image - variables: - MESA_BASE_IMAGE: "debian/x86_test-base" - MESA_BASE_TAG: *debian-x86_test-base - needs: - - debian/x86_test-base - -# Debian 11 based x86 test image for GL -debian/x86_test-gl: - extends: .use-debian/x86_test-base - variables: - FDO_DISTRIBUTION_EXEC: 'env KERNEL_URL=${KERNEL_URL} FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash .gitlab-ci/container/${CI_JOB_NAME}.sh' - KERNEL_URL: &kernel-rootfs-url "https://gitlab.freedesktop.org/gfx-ci/linux/-/archive/v5.13-rc5-for-mesa-ci-2bb5d9ffd79c/linux-v5.13-rc5-for-mesa-ci-2bb5d9ffd79c.tar.bz2" - MESA_IMAGE_TAG: &debian-x86_test-gl "2021-09-01-piglit" - -# Debian 11 based x86 test image for VK -debian/x86_test-vk: - extends: .use-debian/x86_test-base - variables: - MESA_IMAGE_TAG: &debian-x86_test-vk "2021-09-01-piglit" - -# Debian 11 based ARM build image -debian/arm_build: - extends: - - .fdo.container-build@debian - - .container - tags: - - aarch64 - variables: - MESA_IMAGE_TAG: &debian-arm_build "2021-07-26-python" - -.use-debian/arm_build: - extends: - - .set-image - variables: - MESA_IMAGE_PATH: "debian/arm_build" - MESA_IMAGE_TAG: *debian-arm_build - MESA_ARTIFACTS_TAG: *debian-arm_build - needs: - - debian/arm_build - - -# Fedora 34 based x86 build image -fedora/x86_build: - extends: - - .fdo.container-build@fedora - - .container - variables: - FDO_DISTRIBUTION_VERSION: 34 - MESA_IMAGE_TAG: &fedora-x86_build "2021-07-08-bump-libdrm" - -.use-fedora/x86_build: - extends: - - .set-image - variables: - MESA_IMAGE_PATH: "fedora/x86_build" - MESA_IMAGE_TAG: *fedora-x86_build - needs: - - fedora/x86_build - - -.kernel+rootfs: - extends: - - .ci-run-policy - stage: container - variables: - GIT_STRATEGY: fetch - KERNEL_URL: *kernel-rootfs-url - MESA_ROOTFS_TAG: &kernel-rootfs "2021-09-11-etnaviv" - DISTRIBUTION_TAG: &distribution-tag-arm "${MESA_ROOTFS_TAG}--${MESA_ARTIFACTS_TAG}--${MESA_TEMPLATES_COMMIT}" - script: - - .gitlab-ci/container/lava_build.sh - -kernel+rootfs_amd64: - extends: - - .use-debian/x86_build-base - - .kernel+rootfs - image: "$FDO_BASE_IMAGE" - variables: - DEBIAN_ARCH: "amd64" - DISTRIBUTION_TAG: &distribution-tag-amd64 "${MESA_ROOTFS_TAG}--${MESA_ARTIFACTS_BASE_TAG}--${MESA_TEMPLATES_COMMIT}" - -kernel+rootfs_arm64: - extends: - - .use-debian/arm_build - - .kernel+rootfs - tags: - - aarch64 - variables: - DEBIAN_ARCH: "arm64" - -kernel+rootfs_armhf: - extends: - - kernel+rootfs_arm64 - variables: - DEBIAN_ARCH: "armhf" - -# Cannot use anchors defined here from included files, so use extends: instead -.use-kernel+rootfs-arm: - variables: - DISTRIBUTION_TAG: *distribution-tag-arm - MESA_ROOTFS_TAG: *kernel-rootfs - -.use-kernel+rootfs-amd64: - variables: - DISTRIBUTION_TAG: *distribution-tag-amd64 - MESA_ROOTFS_TAG: *kernel-rootfs - -# x86 image with ARM64 & armhf kernel & rootfs for baremetal testing -debian/arm_test: - extends: - - .fdo.container-build@debian - - .container - # Don't want the .container rules - - .ci-run-policy - needs: - - kernel+rootfs_arm64 - - kernel+rootfs_armhf - variables: - FDO_DISTRIBUTION_EXEC: 'env ARTIFACTS_PREFIX=https://${MINIO_HOST}/mesa-lava ARTIFACTS_SUFFIX=${MESA_ROOTFS_TAG}--${MESA_ARM_BUILD_TAG}--${MESA_TEMPLATES_COMMIT} CI_PROJECT_PATH=${CI_PROJECT_PATH} FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} FDO_UPSTREAM_REPO=${FDO_UPSTREAM_REPO} bash .gitlab-ci/container/${CI_JOB_NAME}.sh' - FDO_DISTRIBUTION_TAG: "${MESA_IMAGE_TAG}--${MESA_ROOTFS_TAG}--${MESA_ARM_BUILD_TAG}--${MESA_TEMPLATES_COMMIT}" - MESA_ARM_BUILD_TAG: *debian-arm_build - MESA_IMAGE_TAG: &debian-arm_test "2021-09-11-etnaviv" - MESA_ROOTFS_TAG: *kernel-rootfs - -.use-debian/arm_test: - image: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${MESA_ROOTFS_TAG}--${MESA_ARM_BUILD_TAG}--${MESA_TEMPLATES_COMMIT}" - variables: - MESA_ARM_BUILD_TAG: *debian-arm_build - MESA_IMAGE_PATH: "debian/arm_test" - MESA_IMAGE_TAG: *debian-arm_test - MESA_ROOTFS_TAG: *kernel-rootfs - needs: - - debian/arm_test - -# Native Windows docker builds -# -# Unlike the above Linux-based builds - including MinGW builds which -# cross-compile for Windows - which use the freedesktop ci-templates, we -# cannot use the same scheme here. As Windows lacks support for -# Docker-in-Docker, and Podman does not run natively on Windows, we have -# to open-code much of the same ourselves. -# -# This is achieved by first running in a native Windows shell instance -# (host PowerShell) in the container stage to build and push the image, -# then in the build stage by executing inside Docker. - -.windows-docker-vs2019: - extends: - - .set-image - variables: - MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}" - MESA_IMAGE_PATH: "windows/x64_build" - MESA_IMAGE_TAG: "2021-06-24-zink-msvc" - MESA_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/$MESA_IMAGE_PATH:${MESA_IMAGE_TAG}" - -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 - - # Git archive make git archive: @@ -583,20 +251,19 @@ make git archive: - .fdo.ci-fairy stage: git-archive rules: - - if: *is-scheduled-pipeline - when: on_success + - !reference [.scheduled_pipeline-rules, rules] # ensure we are running on packet tags: - packet.net script: # Compactify the .git directory - git gc --aggressive + # Download & cache the perfetto subproject as well. + - rm -rf subprojects/perfetto ; mkdir -p subprojects/perfetto && curl https://android.googlesource.com/platform/external/perfetto/+archive/$(grep 'revision =' subprojects/perfetto.wrap | cut -d ' ' -f3).tar.gz | tar zxf - -C subprojects/perfetto # 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-fairy s3cp --token-file "${CI_JOB_JWT_FILE}" ../$CI_PROJECT_NAME.tar.gz https://$S3_HOST/git-cache/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_PROJECT_NAME.tar.gz # Sanity checks of MR settings and commit logs @@ -607,744 +274,66 @@ sanity: rules: - if: *is-pre-merge when: on_success - # Other cases default to never + - when: 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 + - | + set -eu + image_tags=( + DEBIAN_BASE_TAG + DEBIAN_BUILD_TAG + DEBIAN_X86_64_TEST_ANDROID_TAG + DEBIAN_X86_64_TEST_GL_TAG + DEBIAN_X86_64_TEST_VK_TAG + ALPINE_X86_64_BUILD_TAG + ALPINE_X86_64_LAVA_SSH_TAG + FEDORA_X86_64_BUILD_TAG + KERNEL_ROOTFS_TAG + KERNEL_TAG + PKG_REPO_REV + WINDOWS_X64_MSVC_TAG + WINDOWS_X64_BUILD_TAG + WINDOWS_X64_TEST_TAG + ) + for var in "${image_tags[@]}" + do + if [ "$(echo -n "${!var}" | wc -c)" -gt 20 ] + then + echo "$var is too long; please make sure it is at most 20 chars." + exit 1 + fi + done 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 - - _build/meson-logs/strace - - shader-db - -# Just Linux -.build-linux: - extends: .build-common - variables: - CCACHE_COMPILERCHECK: "content" - CCACHE_COMPRESS: "true" - CCACHE_DIR: /cache/mesa/ccache - # Use ccache transparently, and print stats before/after - before_script: - - 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-debian/x86_build - stage: build-x86_64 - variables: - LLVM_VERSION: 11 - script: - - .gitlab-ci/meson/build.sh - -debian-testing: - extends: - - .meson-build - - .ci-deqp-artifacts - variables: - UNWIND: "enabled" - DRI_LOADERS: > - -D glx=dri - -D gbm=enabled - -D egl=enabled - -D platforms=x11 - GALLIUM_ST: > - -D dri3=enabled - GALLIUM_DRIVERS: "swrast,virgl,radeonsi,zink,iris,i915" - VULKAN_DRIVERS: "swrast,amd" - BUILDTYPE: "debugoptimized" - EXTRA_OPTION: > - -D valgrind=false - MINIO_ARTIFACT_NAME: mesa-amd64 - script: - - .gitlab-ci/meson/build.sh - - .gitlab-ci/prepare-artifacts.sh - -debian-testing-asan: - extends: - - debian-testing - variables: - C_ARGS: > - -Wno-error=stringop-truncation - EXTRA_OPTION: > - -D b_sanitize=address - -D valgrind=false - MINIO_ARTIFACT_NAME: "" - ARTIFACTS_DEBUG_SYMBOLS: 1 - -debian-clover-testing: - extends: - - .meson-build - - .ci-deqp-artifacts - variables: - UNWIND: "enabled" - DRI_LOADERS: > - -D glx=disabled - -D egl=disabled - -D gbm=disabled - GALLIUM_ST: > - -D gallium-opencl=icd - -D opencl-spirv=true - GALLIUM_DRIVERS: "swrast" - BUILDTYPE: "debugoptimized" - EXTRA_OPTION: > - -D valgrind=false - script: - - .gitlab-ci/meson/build.sh - - .gitlab-ci/prepare-artifacts.sh - -debian-gallium: - extends: .meson-build - variables: - UNWIND: "enabled" - DRI_LOADERS: > - -D glx=dri - -D gbm=enabled - -D egl=enabled - -D platforms=x11,wayland - GALLIUM_ST: > - -D dri3=enabled - -D gallium-extra-hud=true - -D gallium-vdpau=enabled - -D gallium-xvmc=enabled - -D gallium-omx=bellagio - -D gallium-va=enabled - -D gallium-xa=enabled - -D gallium-nine=true - -D gallium-opencl=disabled - GALLIUM_DRIVERS: "iris,nouveau,kmsro,r300,r600,freedreno,swr,swrast,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12,asahi,crocus" - VULKAN_DRIVERS: swrast - EXTRA_OPTION: > - -D osmesa=true - -D tools=all - 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. -debian-release: - extends: .meson-build - variables: - UNWIND: "enabled" - DRI_LOADERS: > - -D glx=dri - -D gbm=enabled - -D egl=enabled - -D platforms=x11,wayland - GALLIUM_ST: > - -D dri3=enabled - -D gallium-extra-hud=true - -D gallium-vdpau=enabled - -D gallium-xvmc=disabled - -D gallium-omx=disabled - -D gallium-va=enabled - -D gallium-xa=enabled - -D gallium-nine=false - -D gallium-opencl=disabled - -D llvm=false - GALLIUM_DRIVERS: "i915,iris,nouveau,kmsro,freedreno,r300,svga,swrast,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12,crocus" - BUILDTYPE: "release" - EXTRA_OPTION: > - -D osmesa=true - -D tools=all - script: - - .gitlab-ci/meson/build.sh - -fedora-release: - extends: - - .meson-build - - .use-fedora/x86_build - variables: - BUILDTYPE: "release" - C_ARGS: > - -Wno-error=array-bounds - -Wno-error=maybe-uninitialized - -Wno-error=stringop-overread - -Wno-error=uninitialized - CPP_ARGS: > - -Wno-error=array-bounds - DRI_DRIVERS: "nouveau,i915,i965,r100,r200" - DRI_LOADERS: > - -D glx=dri - -D gbm=enabled - -D egl=enabled - -D glvnd=true - -D platforms=x11,wayland - EXTRA_OPTION: > - -D osmesa=true - -D selinux=true - -D tools=drm-shim,etnaviv,freedreno,glsl,intel,nir,nouveau,lima,panfrost - GALLIUM_DRIVERS: "crocus,etnaviv,freedreno,iris,kmsro,lima,nouveau,panfrost,r300,r600,radeonsi,svga,swrast,tegra,v3d,vc4,virgl,zink" - GALLIUM_ST: > - -D dri3=enabled - -D gallium-extra-hud=true - -D gallium-vdpau=enabled - -D gallium-xvmc=disabled - -D gallium-omx=disabled - -D gallium-va=enabled - -D gallium-xa=enabled - -D gallium-nine=false - -D gallium-opencl=icd - -D gles1=disabled - -D gles2=enabled - -D llvm=enabled - -D microsoft-clc=disabled - -D shared-llvm=enabled - -D vulkan-device-select-layer=true - LLVM_VERSION: "" - UNWIND: "disabled" - VULKAN_DRIVERS: "amd,broadcom,freedreno,intel" - script: - - .gitlab-ci/meson/build.sh - -debian-android: - extends: - - .meson-cross - - .use-debian/android_build - variables: - UNWIND: "disabled" - C_ARGS: > - -Wno-error=absolute-value - -Wno-error=asm-operand-widths - -Wno-error=constant-conversion - -Wno-error=enum-conversion - -Wno-error=extern-initializer - -Wno-error=initializer-overrides - -Wno-error=missing-braces - -Wno-error=sometimes-uninitialized - -Wno-error=tautological-constant-out-of-range-compare - -Wno-error=unused-function - -Wno-error=unused-label - CPP_ARGS: > - -Wno-error=deprecated-declarations - -Wno-error=non-virtual-dtor - DRI_LOADERS: > - -D glx=disabled - -D gbm=disabled - -D egl=enabled - -D platforms=android - EXTRA_OPTION: > - -D android-stub=true - -D llvm=disabled - -D platform-sdk-version=29 - -D valgrind=false - GALLIUM_ST: > - -D dri3=disabled - -D gallium-vdpau=disabled - -D gallium-xvmc=disabled - -D gallium-omx=disabled - -D gallium-va=disabled - -D gallium-xa=disabled - -D gallium-nine=false - -D gallium-opencl=disabled - LLVM_VERSION: "" - PKG_CONFIG_LIBDIR: "/disable/non/android/system/pc/files" - script: - - PKG_CONFIG_PATH=/usr/local/lib/aarch64-linux-android/pkgconfig/:/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/pkgconfig/ CROSS=aarch64-linux-android GALLIUM_DRIVERS=etnaviv,freedreno,lima,panfrost,vc4,v3d VULKAN_DRIVERS=freedreno,broadcom,virtio-experimental .gitlab-ci/meson/build.sh - # x86_64 build: - # Can't do Intel because gen_decoder.c currently requires libexpat, which - # is not a dependency that AOSP wants to accept. Can't do Radeon because - # it requires LLVM, which we don't have an Android build of. - - PKG_CONFIG_PATH=/usr/local/lib/x86_64-linux-android/pkgconfig/:/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/pkgconfig/ CROSS=x86_64-linux-android GALLIUM_DRIVERS=iris VULKAN_DRIVERS=intel .gitlab-ci/meson/build.sh - -.meson-cross: - extends: - - .meson-build - stage: build-misc - variables: - UNWIND: "disabled" - DRI_LOADERS: > - -D glx=dri - -D gbm=enabled - -D egl=enabled - -D platforms=x11 - -D osmesa=false - GALLIUM_ST: > - -D dri3=enabled - -D gallium-vdpau=disabled - -D gallium-xvmc=disabled - -D gallium-omx=disabled - -D gallium-va=disabled - -D gallium-xa=disabled - -D gallium-nine=false - -.meson-arm: - extends: - - .meson-cross - - .use-debian/arm_build - needs: - - debian/arm_build - variables: - VULKAN_DRIVERS: freedreno,broadcom - GALLIUM_DRIVERS: "etnaviv,freedreno,kmsro,lima,nouveau,panfrost,swrast,tegra,v3d,vc4" - BUILDTYPE: "debugoptimized" - tags: - - aarch64 - -debian-armhf: - extends: - - .meson-arm - - .ci-deqp-artifacts - variables: - CROSS: armhf - EXTRA_OPTION: > - -D llvm=disabled - -D valgrind=false - MINIO_ARTIFACT_NAME: mesa-armhf - script: - - .gitlab-ci/meson/build.sh - - .gitlab-ci/prepare-artifacts.sh - -debian-arm64: - extends: - - .meson-arm - - .ci-deqp-artifacts - variables: - VULKAN_DRIVERS: "freedreno,broadcom,panfrost" - EXTRA_OPTION: > - -D llvm=disabled - -D valgrind=false - MINIO_ARTIFACT_NAME: mesa-arm64 - script: - - .gitlab-ci/meson/build.sh - - .gitlab-ci/prepare-artifacts.sh - -debian-arm64-asan: - extends: - - debian-arm64 - variables: - C_ARGS: > - -Wno-error=stringop-truncation - EXTRA_OPTION: > - -D llvm=disabled - -D b_sanitize=address - -D valgrind=false - ARTIFACTS_DEBUG_SYMBOLS: 1 - MINIO_ARTIFACT_NAME: mesa-arm64-asan - MESON_TEST_ARGS: "--no-suite mesa:compiler" - -debian-arm64-build-test: - extends: - - .meson-arm - - .ci-deqp-artifacts - variables: - VULKAN_DRIVERS: "amd" - EXTRA_OPTION: > - -Dtools=panfrost - script: - - .gitlab-ci/meson/build.sh - -debian-clang: - extends: .meson-build - variables: - UNWIND: "enabled" - C_ARGS: > - -Wno-error=absolute-value - -Wno-error=constant-conversion - -Wno-error=constant-logical-operand - -Wno-error=enum-conversion - -Wno-error=gnu-variable-sized-type-not-at-end - -Wno-error=implicit-const-int-float-conversion - -Wno-error=initializer-overrides - -Wno-error=misleading-indentation - -Wno-error=mismatched-tags - -Wno-error=missing-braces - -Wno-error=overloaded-virtual - -Wno-error=self-assign - -Wno-error=sometimes-uninitialized - -Wno-error=tautological-constant-compare - -Wno-error=tautological-constant-out-of-range-compare - -Wno-error=tautological-overlap-compare - -Wno-error=typedef-redefinition - -Wno-error=unused-function - -Wno-error=unused-private-field - -Wno-error=xor-used-as-pow - CPP_ARGS: > - -Wno-error=c99-designator - -Wno-error=constant-logical-operand - -Wno-error=deprecated-declarations - -Wno-error=implicit-const-int-float-conversion - -Wno-error=mismatched-tags - -Wno-error=missing-braces - -Wno-error=overloaded-virtual - -Wno-error=self-assign - -Wno-error=sometimes-uninitialized - -Wno-error=tautological-constant-out-of-range-compare - -Wno-error=unused-const-variable - -Wno-error=unused-private-field - -Wno-error=unused-value - -Wno-error=unused-variable - 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,crocus" - VULKAN_DRIVERS: intel,amd,freedreno,broadcom,virtio-experimental - CC: clang - CXX: clang++ - -windows-vs2019: - extends: - - .build-windows - - .use-windows_build_vs2019 - - .windows-build-rules - stage: build-misc - script: - - . .\.gitlab-ci\windows\mesa_build.ps1 - artifacts: - paths: - - _build/meson-logs/*.txt - - _install/ - -test-d3d12-windows: - extends: - - .build-windows - - .use-windows_build_vs2019 - - .windows-test-rules - stage: layered-backends - dependencies: - - windows-vs2019 - needs: - - windows-vs2019 - variables: - GIT_STRATEGY: none # testing doesn't build anything from source - GALLIUM_DRIVER: d3d12 - PIGLIT_PROFILE: quick_gl - PIGLIT_TESTS: -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/ - -debian-clover: - extends: .meson-build - variables: - UNWIND: "enabled" - DRI_LOADERS: > - -D glx=disabled - -D egl=disabled - -D gbm=disabled - GALLIUM_DRIVERS: "r600,radeonsi" - GALLIUM_ST: > - -D dri3=disabled - -D gallium-vdpau=disabled - -D gallium-xvmc=disabled - -D gallium-omx=disabled - -D gallium-va=disabled - -D gallium-xa=disabled - -D gallium-nine=false - -D gallium-opencl=icd - EXTRA_OPTION: > - -D valgrind=false - script: - - LLVM_VERSION=9 GALLIUM_DRIVERS=r600,swrast .gitlab-ci/meson/build.sh - - .gitlab-ci/meson/build.sh - -debian-vulkan: - extends: .meson-build - variables: - UNWIND: "disabled" - DRI_LOADERS: > - -D glx=disabled - -D gbm=disabled - -D egl=disabled - -D platforms=x11,wayland - -D osmesa=false - GALLIUM_ST: > - -D dri3=enabled - -D gallium-vdpau=disabled - -D gallium-xvmc=disabled - -D gallium-omx=disabled - -D gallium-va=disabled - -D gallium-xa=disabled - -D gallium-nine=false - -D gallium-opencl=disabled - -D b_sanitize=undefined - -D c_args=-fno-sanitize-recover=all - -D cpp_args=-fno-sanitize-recover=all - UBSAN_OPTIONS: "print_stacktrace=1" - VULKAN_DRIVERS: intel,amd,freedreno,broadcom,virtio-experimental - EXTRA_OPTION: > - -D vulkan-layers=device-select,overlay - -D build-aco-tests=true - -debian-i386: - extends: - - .meson-cross - - .use-debian/i386_build - variables: - CROSS: i386 - VULKAN_DRIVERS: intel,amd,swrast,virtio-experimental - GALLIUM_DRIVERS: "iris,nouveau,r300,r600,radeonsi,swrast,virgl,zink,crocus" - DRI_DRIVERS: "i915,i965,r100,r200,nouveau" - EXTRA_OPTION: > - -D vulkan-layers=device-select,overlay - -debian-s390x: - extends: - - debian-ppc64el - - .use-debian/s390x_build - - .s390x-rules tags: - - kvm - variables: - CROSS: s390x - GALLIUM_DRIVERS: "swrast,zink" - # The lp_test_blend test times out with LLVM 11 - LLVM_VERSION: 9 - VULKAN_DRIVERS: "swrast" - -debian-ppc64el: - extends: - - .meson-cross - - .use-debian/ppc64el_build - - .ppc64el-rules - variables: - CROSS: ppc64el - GALLIUM_DRIVERS: "nouveau,radeonsi,swrast,virgl,zink" - VULKAN_DRIVERS: "amd,swrast" - -debian-mingw32-x86_64: - extends: .meson-build - stage: build-misc - variables: - UNWIND: "disabled" - C_ARGS: > - -Wno-error=format - -Wno-error=format-extra-args - CPP_ARGS: $C_ARGS - DRI_DRIVERS: "" - GALLIUM_DRIVERS: "swrast" - EXTRA_OPTION: > - -Dllvm=disabled - -Dzlib=disabled - -Dosmesa=true - --cross-file=.gitlab-ci/x86_64-w64-mingw32 - -.test: - extends: - - .ci-run-policy - # Cancel job if a newer commit is pushed to the same branch - interruptible: true - variables: - GIT_STRATEGY: none # testing doesn't build anything from source - before_script: - # 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-debian/x86_test-gl: - extends: - - .test - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_test-base - MESA_IMAGE_PATH: "debian/x86_test-gl" - MESA_IMAGE_TAG: *debian-x86_test-gl - needs: - - debian/x86_test-gl - -.test-gl: - extends: - - .use-debian/x86_test-gl - needs: - - debian/x86_test-gl - - debian-testing - -.test-vk: - extends: - - .test - - .set-image-base-tag - variables: - MESA_BASE_TAG: *debian-x86_test-base - MESA_IMAGE_PATH: "debian/x86_test-vk" - MESA_IMAGE_TAG: *debian-x86_test-vk - needs: - - debian-testing - - debian/x86_test-vk - -.test-cl: - extends: - - .use-debian/x86_test-gl - needs: - - debian/x86_test-gl - - debian-clover-testing - -.vkd3d-proton-test: - artifacts: - when: on_failure - name: "mesa_${CI_JOB_NAME}" - paths: - - results/vkd3d-proton.log - script: - - ./install/vkd3d-proton/run.sh - -.piglit-test: - artifacts: - when: on_failure - name: "mesa_${CI_JOB_NAME}" - paths: - - results/summary/ - - results/*.txt - variables: - PIGLIT_NO_WINDOW: 1 - script: - - install/piglit/run.sh + - placeholder-job -.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/ --minio_host=minio-packet.freedesktop.org --minio_bucket=mesa-tracie-public --role-session-name=${CI_PROJECT_PATH}:${CI_JOB_ID} --jwt=${CI_JOB_JWT} - PIGLIT_JUNIT_RESULTS: 1 -.deqp-test: - script: - - ./install/deqp-runner.sh - artifacts: - exclude: - - results/*.shader_cache - reports: - junit: results/junit.xml - -.deqp-test-vk: +mr-label-maker-test: extends: - - .deqp-test - variables: - DEQP_VER: vk - -.fossilize-test: - script: - - ./install/fossilize-runner.sh - artifacts: - when: on_failure - name: "mesa_${CI_JOB_NAME}" - paths: - - results/ - -# Rules for tests that should not be present in MRs or the main -# project's pipeline (don't block marge or report red on -# mesa/mesa main) but should be present on pipelines in personal -# 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 - -# The above .test-manual rules doesn't allow the jobs to be available for MRs -# but we should have an option to have manual jobs in MRs as well. -.test-manual-mr: + - .fdo.ci-fairy + stage: sanity rules: - - *ignore_scheduled_pipelines - - if: *is-forked-branch-or-pre-merge-not-for-marge - changes: - *all_paths - when: manual - - when: never + - !reference [.mr-label-maker-rules, rules] variables: - GIT_STRATEGY: none - -.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://${PIPELINE_ARTIFACTS_BASE}/${MINIO_ARTIFACT_NAME}.tar.gz -S --progress=dot:giga -O- | tar -xz - artifacts: - when: always - name: "mesa_${CI_JOB_NAME}" - paths: - - results/ - - serial*.txt - exclude: - - results/*.shader_cache - reports: - junit: results/junit.xml - -.baremetal-test-armhf: - extends: - - .baremetal-test - variables: - MINIO_ARTIFACT_NAME: mesa-armhf - -.baremetal-arm64-asan-test: - variables: - TEST_LD_PRELOAD: libasan.so.6 - MINIO_ARTIFACT_NAME: mesa-arm64-asan + GIT_STRATEGY: fetch + timeout: 10m + script: + - set -eu + - python3 -m venv .venv + - source .venv/bin/activate + - pip install git+https://gitlab.freedesktop.org/freedesktop/mr-label-maker + - mr-label-maker --dry-run --mr $CI_MERGE_REQUEST_IID + +# Jobs that need to pass before spending hardware resources on further testing +.required-for-hardware-jobs: needs: - - debian/arm_test - - job: debian-arm64-asan - artifacts: false - -.baremetal-deqp-test: - variables: - HWCI_TEST_SCRIPT: "/install/deqp-runner.sh" - DEQP_PARALLEL: 0 # Default to number of CPUs + - job: clang-format + optional: true + - job: rustfmt + optional: true |