| .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: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_NAMESPACE == "mesa" && $GITLAB_USER_LOGIN != "marge-bot" |
| 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/ |
| |
| .b2c-vkd3d-proton-test: |
| variables: |
| HWCI_TEST_SCRIPT: ./install/vkd3d-proton/run.sh |
| |
| .piglit-traces-test: |
| artifacts: |
| when: on_failure |
| name: "mesa_${CI_JOB_NAME}" |
| reports: |
| junit: results/junit.xml |
| paths: |
| - results/ |
| exclude: |
| - results/*.shader_cache |
| variables: |
| # until we overcome Infrastructure issues, give traces extra 5 min before timeout |
| DEVICE_HANGING_TIMEOUT_SEC: 600 |
| PIGLIT_REPLAY_EXTRA_ARGS: --db-path ${CI_PROJECT_DIR}/replayer-db/ --minio_bucket=${S3_TRACIE_PUBLIC_BUCKET} --jwt-file=${S3_JWT_FILE} |
| PIGLIT_NO_WINDOW: 1 |
| HWCI_TEST_SCRIPT: "/install/piglit/piglit-runner.sh" |
| 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/baremetal_arm32_test |
| variables: |
| DEBIAN_ARCH: armhf |
| S3_ARTIFACT_NAME: mesa-arm32-default-debugoptimized |
| needs: |
| - debian/baremetal_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/baremetal_arm64_test |
| variables: |
| DEBIAN_ARCH: arm64 |
| S3_ARTIFACT_NAME: mesa-arm64-default-debugoptimized |
| needs: |
| - debian/baremetal_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/baremetal_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/baremetal_arm32_test |
| - job: debian-arm32-asan |
| artifacts: false |
| - !reference [.required-for-hardware-jobs, needs] |
| |
| .baremetal-arm64-asan-test: |
| extends: |
| - .baremetal-test |
| - .use-debian/baremetal_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/baremetal_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 |
| 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: 'hwci: mesa: pass\r$' |
| 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_CONSOLE_ACTIVITY_MINUTES: 2 |
| B2C_TIMEOUT_FIRST_CONSOLE_ACTIVITY_RETRIES: 3 |
| B2C_TIMEOUT_CONSOLE_ACTIVITY_MINUTES: 5 |
| B2C_TIMEOUT_OVERALL_MINUTES: 90 |
| B2C_TIMEOUT_CONSOLE_ACTIVITY_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-x86_64-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-x86_64-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] |
| |
| .b2c-arm64-test-vk: |
| extends: |
| - .use-debian/arm64_test-vk |
| - .b2c-test |
| needs: |
| - debian/arm64_test-vk |
| - debian-arm64 |
| - !reference [.required-for-hardware-jobs, needs] |
| |
| .b2c-arm64-test-gl: |
| extends: |
| - .use-debian/arm64_test-gl |
| - .b2c-test |
| needs: |
| - debian/arm64_test-gl |
| - debian-arm64 |
| - !reference [.required-for-hardware-jobs, needs] |