mirror of https://gitlab.freedesktop.org/mesa/mesa
425 lines
13 KiB
YAML
425 lines
13 KiB
YAML
.test:
|
|
# Cancel job if a newer commit is pushed to the same branch
|
|
interruptible: true
|
|
variables:
|
|
GIT_STRATEGY: none # testing doesn't build anything from source
|
|
before_script:
|
|
- !reference [default, before_script]
|
|
# Note: Build dir (and thus install) may be dirty due to GIT_STRATEGY
|
|
- rm -rf install
|
|
- tar -xf artifacts/install.tar
|
|
- section_start ldd_section "Checking ldd on driver build"
|
|
- LD_LIBRARY_PATH=install/lib find install/lib -name "*.so" -print -exec ldd {} \;
|
|
- section_end ldd_section
|
|
artifacts:
|
|
when: always
|
|
name: "mesa_${CI_JOB_NAME}"
|
|
paths:
|
|
- results/
|
|
rules:
|
|
- !reference [.never-post-merge-rules, rules]
|
|
|
|
.formatting-check:
|
|
# Cancel job if a newer commit is pushed to the same branch
|
|
interruptible: true
|
|
stage: code-validation
|
|
extends:
|
|
- .use-debian/x86_64_build
|
|
variables:
|
|
GIT_STRATEGY: fetch
|
|
timeout: 10m
|
|
script:
|
|
- git diff --color=always --exit-code # Fails if there are diffs
|
|
tags:
|
|
- placeholder-job
|
|
|
|
rustfmt:
|
|
extends:
|
|
- .formatting-check
|
|
- .lint-rustfmt-rules
|
|
before_script:
|
|
- shopt -s globstar
|
|
- rustfmt --version
|
|
- rustfmt --verbose src/**/lib.rs
|
|
- rustfmt --verbose src/**/main.rs
|
|
|
|
python-test:
|
|
# Cancel job if a newer commit is pushed to the same branch
|
|
interruptible: true
|
|
stage: code-validation
|
|
extends:
|
|
- .use-debian/x86_64_build
|
|
variables:
|
|
GIT_STRATEGY: fetch
|
|
timeout: 10m
|
|
script:
|
|
- cd bin/ci
|
|
- pip install --break-system-packages -r test/requirements.txt
|
|
- PYTHONPATH=. pytest -v
|
|
rules:
|
|
- !reference [.disable-farm-mr-rules, rules]
|
|
- !reference [.never-post-merge-rules, rules]
|
|
- if: $CI_PIPELINE_SOURCE == "schedule"
|
|
when: on_success
|
|
- if: $GITLAB_USER_LOGIN == "marge-bot"
|
|
changes: &bin_ci_files
|
|
- .gitlab-ci.yml
|
|
- .gitlab-ci/**/*
|
|
- bin/ci/**/*
|
|
when: on_success
|
|
- changes: *bin_ci_files
|
|
when: manual
|
|
|
|
.test-gl:
|
|
extends:
|
|
- .test
|
|
- .use-debian/x86_64_test-gl
|
|
needs:
|
|
- debian/x86_64_test-gl
|
|
- debian-testing
|
|
- !reference [.required-for-hardware-jobs, needs]
|
|
variables:
|
|
DEBIAN_ARCH: amd64
|
|
|
|
.test-vk:
|
|
extends:
|
|
- .test
|
|
- .use-debian/x86_64_test-vk
|
|
needs:
|
|
- debian-testing
|
|
- debian/x86_64_test-vk
|
|
- !reference [.required-for-hardware-jobs, needs]
|
|
variables:
|
|
DEBIAN_ARCH: amd64
|
|
|
|
.test-cl:
|
|
extends:
|
|
- .test
|
|
- .use-debian/x86_64_test-gl
|
|
needs:
|
|
- debian/x86_64_test-gl
|
|
- !reference [.required-for-hardware-jobs, needs]
|
|
|
|
.test-android:
|
|
extends:
|
|
- .test
|
|
- .use-debian/x86_64_test-android
|
|
variables:
|
|
S3_ARTIFACT_NAME: mesa-x86_64-android-debug
|
|
needs:
|
|
- job: debian-testing
|
|
artifacts: true # On the host we want the Linux build
|
|
- job: debian-android
|
|
artifacts: false # The Android build will be downloaded later
|
|
- job: debian/x86_64_test-android
|
|
artifacts: false
|
|
- !reference [.required-for-hardware-jobs, needs]
|
|
timeout: 20m
|
|
script:
|
|
- ./install/cuttlefish-runner.sh
|
|
artifacts:
|
|
paths:
|
|
- results/
|
|
|
|
.vkd3d-proton-test:
|
|
artifacts:
|
|
when: on_failure
|
|
name: "mesa_${CI_JOB_NAME}"
|
|
paths:
|
|
- results/vkd3d-proton.log
|
|
script:
|
|
- ./install/vkd3d-proton/run.sh
|
|
|
|
.piglit-test:
|
|
artifacts:
|
|
name: "mesa_${CI_JOB_NAME}"
|
|
paths:
|
|
- results
|
|
reports:
|
|
junit: results/junit.xml
|
|
variables:
|
|
PIGLIT_NO_WINDOW: 1
|
|
HWCI_TEST_SCRIPT: "/install/piglit/piglit-runner.sh"
|
|
script:
|
|
- install/piglit/piglit-runner.sh
|
|
|
|
.piglit-traces-test:
|
|
extends:
|
|
- .piglit-test
|
|
artifacts:
|
|
when: on_failure
|
|
name: "mesa_${CI_JOB_NAME}"
|
|
reports:
|
|
junit: results/junit.xml
|
|
paths:
|
|
- results/
|
|
exclude:
|
|
- results/*.shader_cache
|
|
variables:
|
|
PIGLIT_REPLAY_EXTRA_ARGS: --db-path ${CI_PROJECT_DIR}/replayer-db/ --minio_bucket=mesa-tracie-public --jwt-file=${CI_JOB_JWT_FILE}
|
|
# until we overcome Infrastructure issues, give traces extra 5 min before timeout
|
|
DEVICE_HANGING_TIMEOUT_SEC: 600
|
|
script:
|
|
- section_start variables "Variables passed through:"
|
|
- install/common/generate-env.sh
|
|
- section_end variables
|
|
- install/piglit/piglit-traces.sh
|
|
|
|
.deqp-test:
|
|
script:
|
|
- rm -rf results # Clear out old results if the docker container was cached
|
|
- ./install/deqp-runner.sh
|
|
artifacts:
|
|
exclude:
|
|
- results/*.shader_cache
|
|
reports:
|
|
junit: results/junit.xml
|
|
|
|
.fossilize-test:
|
|
script:
|
|
- ./install/fossilize-runner.sh
|
|
artifacts:
|
|
when: on_failure
|
|
name: "mesa_${CI_JOB_NAME}"
|
|
paths:
|
|
- results/
|
|
|
|
.download_s3:
|
|
before_script:
|
|
- !reference [default, before_script]
|
|
# Use this instead of gitlab's artifacts download because it hits packet.net
|
|
# instead of fd.o. Set FDO_HTTP_CACHE_URI to an http cache for your test lab to
|
|
# improve it even more (see https://docs.mesa3d.org/ci/bare-metal.html for
|
|
# setup).
|
|
- section_start artifacts_download "Downloading artifacts from s3"
|
|
# Note: Build dir (and thus install) may be dirty due to GIT_STRATEGY
|
|
- rm -rf install
|
|
- (set -x; curl -L --retry 4 -f --retry-all-errors --retry-delay 60 ${FDO_HTTP_CACHE_URI:-}https://${PIPELINE_ARTIFACTS_BASE}/${S3_ARTIFACT_NAME}.tar.zst | tar --zstd -x)
|
|
- section_end artifacts_download
|
|
|
|
.baremetal-test:
|
|
extends:
|
|
- .test
|
|
# Cancel job if a newer commit is pushed to the same branch
|
|
interruptible: true
|
|
before_script:
|
|
- !reference [.download_s3, before_script]
|
|
variables:
|
|
BM_ROOTFS: /rootfs-${DEBIAN_ARCH}
|
|
artifacts:
|
|
when: always
|
|
name: "mesa_${CI_JOB_NAME}"
|
|
paths:
|
|
- results/
|
|
- serial*.txt
|
|
exclude:
|
|
- results/*.shader_cache
|
|
reports:
|
|
junit: results/junit.xml
|
|
|
|
# ARM testing of bare-metal boards attached to an x86 gitlab-runner system
|
|
.baremetal-test-arm32:
|
|
extends:
|
|
- .baremetal-test
|
|
- .use-debian/arm32_test
|
|
variables:
|
|
DEBIAN_ARCH: armhf
|
|
S3_ARTIFACT_NAME: mesa-arm32-default-debugoptimized
|
|
needs:
|
|
- debian/arm32_test
|
|
- job: debian-arm32
|
|
artifacts: false
|
|
- !reference [.required-for-hardware-jobs, needs]
|
|
|
|
# ARM64 testing of bare-metal boards attached to an x86 gitlab-runner system
|
|
.baremetal-test-arm64:
|
|
extends:
|
|
- .baremetal-test
|
|
- .use-debian/arm64_test
|
|
variables:
|
|
DEBIAN_ARCH: arm64
|
|
S3_ARTIFACT_NAME: mesa-arm64-default-debugoptimized
|
|
needs:
|
|
- debian/arm64_test
|
|
- job: debian-arm64
|
|
artifacts: false
|
|
- !reference [.required-for-hardware-jobs, needs]
|
|
|
|
# ARM32/64 testing of bare-metal boards attached to an x86 gitlab-runner system, using an asan mesa build
|
|
.baremetal-arm32-asan-test:
|
|
extends:
|
|
- .baremetal-test
|
|
- .use-debian/arm32_test
|
|
variables:
|
|
DEQP_RUNNER_OPTIONS: "--env LD_PRELOAD=libasan.so.8:/install/lib/libdlclose-skip.so"
|
|
S3_ARTIFACT_NAME: mesa-arm32-asan-debugoptimized
|
|
needs:
|
|
- debian/arm32_test
|
|
- job: debian-arm32-asan
|
|
artifacts: false
|
|
- !reference [.required-for-hardware-jobs, needs]
|
|
|
|
.baremetal-arm64-asan-test:
|
|
extends:
|
|
- .baremetal-test
|
|
- .use-debian/arm64_test
|
|
variables:
|
|
DEQP_RUNNER_OPTIONS: "--env LD_PRELOAD=libasan.so.8:/install/lib/libdlclose-skip.so"
|
|
S3_ARTIFACT_NAME: mesa-arm64-asan-debugoptimized
|
|
needs:
|
|
- debian/arm64_test
|
|
- job: debian-arm64-asan
|
|
artifacts: false
|
|
- !reference [.required-for-hardware-jobs, needs]
|
|
|
|
.baremetal-deqp-test:
|
|
variables:
|
|
HWCI_TEST_SCRIPT: "/install/deqp-runner.sh"
|
|
FDO_CI_CONCURRENT: 0 # Default to number of CPUs
|
|
|
|
# For Valve's bare-metal testing farm jobs.
|
|
.b2c-test:
|
|
# It would be nice to use ci-templates within Mesa CI for this job's
|
|
# image:, but the integration is not possible for the current
|
|
# use-case. Within this job, two containers are managed. 1) the
|
|
# gitlab runner container from which the job is submitted to the
|
|
# DUT, and 2) the test container (e.g. debian/x86_64_test-vk) within
|
|
# which the test cases will run on the DUT. Since ci-templates and
|
|
# the associated image setting macros in this file rely on variables
|
|
# like FDO_DISTRIBUTION_TAG for *the* image, there is no way to
|
|
# depend on more than one image per job. So, the job container is
|
|
# built as part of the CI in the boot2container project.
|
|
image: registry.freedesktop.org/gfx-ci/ci-tron/mesa-trigger:2024-01-05.1
|
|
timeout: 1h 40m
|
|
rules:
|
|
- if: $FORCE_KERNEL_TAG != null
|
|
when: never
|
|
variables:
|
|
# No need by default to pull the whole repo
|
|
GIT_STRATEGY: none
|
|
# boot2container initrd configuration parameters.
|
|
B2C_KERNEL_URL: 'https://gitlab.freedesktop.org/gfx-ci/ci-tron/-/package_files/519/download' # Linux 6.1
|
|
B2C_INITRAMFS_URL: 'https://gitlab.freedesktop.org/mupuf/boot2container/-/releases/v0.9.10/downloads/initramfs.linux_amd64.cpio.xz'
|
|
B2C_JOB_SUCCESS_REGEX: '\[.*\]: Execution is over, pipeline status: 0\r$'
|
|
B2C_JOB_WARN_REGEX: '\*ERROR\* ring .* timeout'
|
|
B2C_LOG_LEVEL: 6
|
|
B2C_POWEROFF_DELAY: 15
|
|
B2C_SESSION_END_REGEX: '^.*It''s now safe to turn off your computer\r$'
|
|
B2C_SESSION_REBOOT_REGEX: ''
|
|
B2C_TIMEOUT_BOOT_MINUTES: 45
|
|
B2C_TIMEOUT_BOOT_RETRIES: 0
|
|
B2C_TIMEOUT_FIRST_MINUTES: 2
|
|
B2C_TIMEOUT_FIRST_RETRIES: 3
|
|
B2C_TIMEOUT_MINUTES: 5
|
|
B2C_TIMEOUT_OVERALL_MINUTES: 90
|
|
B2C_TIMEOUT_RETRIES: 0
|
|
B2C_JOB_VOLUME_EXCLUSIONS: "*.shader_cache,install/*,*/install/*,*/vkd3d-proton.cache*,vkd3d-proton.cache*,*.qpa"
|
|
|
|
# As noted in the top description, we make a distinction between the
|
|
# container used by gitlab-runner to queue the work, and the container
|
|
# used by the DUTs/test machines. To make this distinction quite clear,
|
|
# we rename the MESA_IMAGE variable into IMAGE_UNDER_TEST.
|
|
IMAGE_UNDER_TEST: "$MESA_IMAGE"
|
|
|
|
INSTALL_TARBALL_NAME: "install.tar"
|
|
INSTALL_TARBALL: "./artifacts/${INSTALL_TARBALL_NAME}"
|
|
CI_B2C_ARTIFACTS: "./artifacts/b2c"
|
|
CI_COMMON_SCRIPTS: "./artifacts/ci-common"
|
|
B2C_JOB_TEMPLATE: "${CI_B2C_ARTIFACTS}/b2c.yml.jinja2.jinja2"
|
|
JOB_FOLDER: "job_folder"
|
|
|
|
before_script:
|
|
# We don't want the tarball unpacking of .test, but will take the JWT bits.
|
|
- !reference [default, before_script]
|
|
|
|
- |
|
|
set -eux
|
|
|
|
# Useful as a hook point for runner admins. You may edit the
|
|
# config.toml for the Gitlab runner and use a bind-mount to
|
|
# populate the hook script with some executable commands. This
|
|
# allows quicker feedback than resubmitting pipelines and
|
|
# potentially having to wait for a debug build of Mesa to
|
|
# complete.
|
|
if [ -x /runner-before-script.sh ]; then
|
|
echo "Executing runner before-script hook..."
|
|
sh /runner-before-script.sh
|
|
if [ $? -ne 0 ]; then
|
|
echo "Runner hook failed, goodbye"
|
|
exit $?
|
|
fi
|
|
fi
|
|
|
|
[ -s "$INSTALL_TARBALL" ] || exit 1
|
|
[ -d "$CI_B2C_ARTIFACTS" ] || exit 1
|
|
[ -d "$CI_COMMON_SCRIPTS" ] || exit 1
|
|
|
|
export B2C_CONTAINER_CMD="bash -euc 'tar xf ${INSTALL_TARBALL_NAME}; ./install/common/init-stage2.sh'"
|
|
|
|
# The Valve CI gateway receives jobs in a YAML format. Create a
|
|
# job description from the CI environment.
|
|
python3 "$CI_B2C_ARTIFACTS"/generate_b2c.py
|
|
|
|
cat b2c.yml.jinja2
|
|
|
|
rm -rf ${JOB_FOLDER} || true
|
|
mkdir -v ${JOB_FOLDER}
|
|
|
|
# Create a script to regenerate the CI environment when this job
|
|
# begins running on the remote DUT.
|
|
set +x
|
|
"$CI_COMMON_SCRIPTS"/generate-env.sh > ${JOB_FOLDER}/set-job-env-vars.sh
|
|
echo "export SCRIPTS_DIR=./install" >> ${JOB_FOLDER}/set-job-env-vars.sh
|
|
echo "Variables passed through:"
|
|
cat ${JOB_FOLDER}/set-job-env-vars.sh
|
|
set -x
|
|
|
|
# Copy the mesa install tarball to the job folder, for later extraction
|
|
mv "${INSTALL_TARBALL}" "${JOB_FOLDER}"
|
|
|
|
script: |
|
|
slugify () {
|
|
echo "$1" | sed -r s/[~\^]+//g | sed -r s/[^a-zA-Z0-9]+/-/g | sed -r s/^-+\|-+$//g | tr A-Z a-z
|
|
}
|
|
|
|
# Submit the job to Valve's CI gateway service with the CI
|
|
# provisioned job_folder.
|
|
env PYTHONUNBUFFERED=1 executorctl \
|
|
run -w b2c.yml.jinja2 -j $(slugify "$CI_JOB_NAME") -s ${JOB_FOLDER} -i "$CI_RUNNER_DESCRIPTION"
|
|
|
|
# Anything our job places in results/ will be collected by the
|
|
# Gitlab coordinator for status presentation. results/junit.xml
|
|
# will be parsed by the UI for more detailed explanations of
|
|
# test execution.
|
|
after_script:
|
|
# Keep the results path the same as baremetal and LAVA
|
|
- mkdir -p "${JOB_FOLDER}"/results
|
|
- mv "${JOB_FOLDER}"/results results/
|
|
- !reference [default, after_script]
|
|
|
|
artifacts:
|
|
when: always
|
|
name: "mesa_${CI_JOB_NAME}"
|
|
paths:
|
|
- results
|
|
reports:
|
|
junit: results/**/junit.xml
|
|
|
|
.b2c-test-vk:
|
|
extends:
|
|
- .use-debian/x86_64_test-vk
|
|
- .b2c-test
|
|
needs:
|
|
- debian/x86_64_test-vk
|
|
- debian-testing
|
|
- !reference [.required-for-hardware-jobs, needs]
|
|
|
|
.b2c-test-gl:
|
|
extends:
|
|
- .use-debian/x86_64_test-gl
|
|
- .b2c-test
|
|
needs:
|
|
- debian/x86_64_test-gl
|
|
- debian-testing
|
|
- !reference [.required-for-hardware-jobs, needs]
|