.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]