Re: [PATCH v1 1/2] drm/ci: uprev mesa
From: Helen Mae Koike Fornazier
Date: Tue Dec 03 2024 - 09:15:04 EST
---- On Thu, 28 Nov 2024 01:20:20 -0300 Vignesh Raman wrote ---
> Uprev mesa to adapt to the latest changes in mesa ci
> which includes new container jobs and stages. Also update
> lava-submit script to adapt to the recent changes in mesa
> to use LAVA rootfs overlays.
>
> Signed-off-by: Vignesh Raman vignesh.raman@xxxxxxxxxxxxx>
> ---
> drivers/gpu/drm/ci/build.sh | 2 +-
> drivers/gpu/drm/ci/build.yml | 103 +++++++++++++++++++++++++++++-
> drivers/gpu/drm/ci/container.yml | 22 +++----
> drivers/gpu/drm/ci/gitlab-ci.yml | 71 ++++++++++++++------
> drivers/gpu/drm/ci/image-tags.yml | 11 +++-
> drivers/gpu/drm/ci/lava-submit.sh | 99 ++++++++++++++++++++--------
> drivers/gpu/drm/ci/test.yml | 13 ++--
> 7 files changed, 255 insertions(+), 66 deletions(-)
>
> diff --git a/drivers/gpu/drm/ci/build.sh b/drivers/gpu/drm/ci/build.sh
> index 139b81db6312..19fe01257ab9 100644
> --- a/drivers/gpu/drm/ci/build.sh
> +++ b/drivers/gpu/drm/ci/build.sh
> @@ -132,7 +132,7 @@ fi
> # Pass needed files to the test stage
> mkdir -p install
> cp -rfv .gitlab-ci/* install/.
> -cp -rfv ci/* install/.
> +cp -rfv bin/ci/* install/.
> cp -rfv install/common install/ci-common
> cp -rfv drivers/gpu/drm/ci/* install/.
>
> diff --git a/drivers/gpu/drm/ci/build.yml b/drivers/gpu/drm/ci/build.yml
> index 9c198239033d..771ecfc5008d 100644
> --- a/drivers/gpu/drm/ci/build.yml
> +++ b/drivers/gpu/drm/ci/build.yml
> @@ -2,7 +2,7 @@
> extends:
> - .build-rules
> - .container+build-rules
> - stage: build
> + stage: build-only
> artifacts:
> paths:
> - artifacts
> @@ -110,3 +110,104 @@ build-nodebugfs:arm64:
>
> build:x86_64:
> extends: .build:x86_64
> +
> +# Disable build jobs that we won't use
> +alpine-build-testing:
> + rules:
> + - when: never
> +
> +debian-android:
> + rules:
> + - when: never
> +
> +debian-arm32:
> + rules:
> + - when: never
> +
> +debian-arm32-asan:
> + rules:
> + - when: never
> +
> +debian-arm64:
> + rules:
> + - when: never
> +
> +debian-arm64-asan:
> + rules:
> + - when: never
> +
> +debian-arm64-build-test:
> + rules:
> + - when: never
> +
> +debian-arm64-release:
> + rules:
> + - when: never
> +
> +debian-build-testing:
> + rules:
> + - when: never
> +
> +debian-clang:
> + rules:
> + - when: never
> +
> +debian-clang-release:
> + rules:
> + - when: never
> +
> +debian-no-libdrm:
> + rules:
> + - when: never
> +
> +debian-ppc64el:
> + rules:
> + - when: never
> +
> +debian-release:
> + rules:
> + - when: never
> +
> +debian-s390x:
> + rules:
> + - when: never
> +
> +debian-testing:
> + rules:
> + - when: never
> +
> +debian-testing-asan:
> + rules:
> + - when: never
> +
> +debian-testing-msan:
> + rules:
> + - when: never
> +
> +debian-vulkan:
> + rules:
> + - when: never
> +
> +debian-x86_32:
> + rules:
> + - when: never
> +
> +fedora-release:
> + rules:
> + - when: never
> +
> +rustfmt:
> + rules:
> + - when: never
> +
> +shader-db:
> + rules:
> + - when: never
> +
> +windows-msvc:
> + rules:
> + - when: never
> +
> +yaml-toml-shell-test:
> + rules:
> + - when: never
Well, I don't really like this list, but I guess we don't have a choice for now...
> diff --git a/drivers/gpu/drm/ci/container.yml b/drivers/gpu/drm/ci/container.yml
> index 2a94f54ce4cf..07dc13ff865d 100644
> --- a/drivers/gpu/drm/ci/container.yml
> +++ b/drivers/gpu/drm/ci/container.yml
> @@ -24,7 +24,7 @@ alpine/x86_64_build:
> rules:
> - when: never
>
> -debian/x86_64_test-vk:
> +debian/arm64_test-gl:
> rules:
> - when: never
>
> @@ -32,7 +32,15 @@ debian/arm64_test-vk:
> rules:
> - when: never
>
> -debian/arm64_test-gl:
> +debian/ppc64el_build:
> + rules:
> + - when: never
> +
> +debian/s390x_build:
> + rules:
> + - when: never
> +
> +debian/x86_64_test-vk:
> rules:
> - when: never
>
> @@ -56,14 +64,6 @@ windows_test_msvc:
> rules:
> - when: never
>
> -.debian/x86_64_build-mingw:
> - rules:
> - - when: never
> -
> -rustfmt:
> - rules:
> - - when: never
> -
> windows_msvc:
> rules:
> - - when: never
> \ No newline at end of file
> + - when: never
> diff --git a/drivers/gpu/drm/ci/gitlab-ci.yml b/drivers/gpu/drm/ci/gitlab-ci.yml
> index 90bde9f00cc3..86d8c5d8ce3b 100644
> --- a/drivers/gpu/drm/ci/gitlab-ci.yml
> +++ b/drivers/gpu/drm/ci/gitlab-ci.yml
> @@ -1,6 +1,6 @@
> variables:
> DRM_CI_PROJECT_PATH: &drm-ci-project-path mesa/mesa
> - DRM_CI_COMMIT_SHA: &drm-ci-commit-sha c6a9a9c3bce90923f7700219354e0b6e5a3c9ba6
> + DRM_CI_COMMIT_SHA: &drm-ci-commit-sha e1a8fd80d411a5ff8fa19ffcf09516ac5099a25c
>
> UPSTREAM_REPO: https://gitlab.freedesktop.org/drm/kernel.git
> TARGET_BRANCH: drm-next
> @@ -31,11 +31,7 @@ variables:
> PIPELINE_ARTIFACTS_BASE: ${S3_HOST}/${S3_ARTIFACTS_BUCKET}/${CI_PROJECT_PATH}/${CI_PIPELINE_ID}
> # per-job artifact storage on MinIO
> JOB_ARTIFACTS_BASE: ${PIPELINE_ARTIFACTS_BASE}/${CI_JOB_ID}
> - # default kernel for rootfs before injecting the current kernel tree
> - KERNEL_REPO: "gfx-ci/linux"
> - KERNEL_TAG: "v6.6.21-mesa-f8ea"
> KERNEL_IMAGE_BASE: https://${S3_HOST}/${S3_KERNEL_BUCKET}/${KERNEL_REPO}/${KERNEL_TAG}
> - PKG_REPO_REV: "3cc12a2a"
> LAVA_TAGS: subset-1-gfx
> LAVA_JOB_PRIORITY: 30
> ARTIFACTS_BASE_URL: https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-/${CI_PROJECT_NAME}/-/jobs/${CI_JOB_ID}/artifacts
> @@ -59,7 +55,7 @@ default:
> - cd $CI_PROJECT_DIR
> - curl --output - $DRM_CI_PROJECT_URL/-/archive/$DRM_CI_COMMIT_SHA/mesa-$DRM_CI_COMMIT_SHA.tar.gz | tar -xz
> - mv mesa-$DRM_CI_COMMIT_SHA/.gitlab-ci* .
> - - mv mesa-$DRM_CI_COMMIT_SHA/bin/ci .
> + - mv mesa-$DRM_CI_COMMIT_SHA/bin .
> - rm -rf mesa-$DRM_CI_COMMIT_SHA/
> - echo -e "\e[0Ksection_end:$(date +%s):drm_ci_download_section\r\e[0K"
>
> @@ -85,6 +81,7 @@ include:
> - project: *drm-ci-project-path
> ref: *drm-ci-commit-sha
> file:
> + - '/.gitlab-ci/build/gitlab-ci.yml'
> - '/.gitlab-ci/container/gitlab-ci.yml'
> - '/.gitlab-ci/farm-rules.yml'
> - '/.gitlab-ci/lava/lava-gitlab-ci.yml'
> @@ -115,9 +112,10 @@ include:
> stages:
> - sanity
> - container
> - - code-validation
> - git-archive
> - - build
> + - build-for-tests
> + - build-only
> + - code-validation
> - amdgpu
> - i915
> - mediatek
> @@ -264,30 +262,63 @@ 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=(
> + ALPINE_X86_64_LAVA_SSH_TAG
> + CONTAINER_TAG
> + DEBIAN_BASE_TAG
> + DEBIAN_BUILD_TAG
> + DEBIAN_PYUTILS_TAG
> + DEBIAN_TEST_GL_TAG
> + KERNEL_ROOTFS_TAG
> + KERNEL_TAG
> + PKG_REPO_REV
> + )
> + 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
> + tags:
> + - placeholder-job
>
> -# Rules for tests that should not block merging, but should be available to
> -# optionally run with the "play" button in the UI in pre-merge non-marge
> -# pipelines. This should appear in "extends:" after any includes of
> -# test-source-dep.yml rules, so that these rules replace those.
> -.test-manual-mr:
> +
> +mr-label-maker-test:
> + extends:
> + - .fdo.ci-fairy
> + stage: sanity
> rules:
> - - !reference [.no_scheduled_pipelines-rules, rules]
> - - if: *is-forked-branch-or-pre-merge-not-for-marge
> - when: manual
> + - !reference [.mr-label-maker-rules, rules]
> variables:
> - JOB_TIMEOUT: 80
> -
> + 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: []
> + needs:
> + - job: clang-format
> + optional: true
> + - job: rustfmt
> + optional: true
> + - job: toml-lint
> + optional: true
> diff --git a/drivers/gpu/drm/ci/image-tags.yml b/drivers/gpu/drm/ci/image-tags.yml
> index 8d8b9e71852e..528ef44285bb 100644
> --- a/drivers/gpu/drm/ci/image-tags.yml
> +++ b/drivers/gpu/drm/ci/image-tags.yml
> @@ -1,5 +1,5 @@
> variables:
> - CONTAINER_TAG: "2024-09-09-uprevs"
> + CONTAINER_TAG: "20241127-mesa-uprev"
> DEBIAN_X86_64_BUILD_BASE_IMAGE: "debian/x86_64_build-base"
> DEBIAN_BASE_TAG: "${CONTAINER_TAG}"
>
> @@ -7,9 +7,16 @@ variables:
> DEBIAN_BUILD_TAG: "${CONTAINER_TAG}"
>
> KERNEL_ROOTFS_TAG: "${CONTAINER_TAG}"
> + # default kernel for rootfs before injecting the current kernel tree
> + KERNEL_TAG: "v6.6.21-mesa-f8ea"
> + KERNEL_REPO: "gfx-ci/linux"
> + PKG_REPO_REV: "bca9635d"
>
> DEBIAN_X86_64_TEST_BASE_IMAGE: "debian/x86_64_test-base"
> DEBIAN_X86_64_TEST_IMAGE_GL_PATH: "debian/x86_64_test-gl"
> DEBIAN_TEST_GL_TAG: "${CONTAINER_TAG}"
>
> - ALPINE_X86_64_LAVA_SSH_TAG: "${CONTAINER_TAG}"
> \ No newline at end of file
> + DEBIAN_PYUTILS_IMAGE: "debian/x86_64_pyutils"
> + DEBIAN_PYUTILS_TAG: "${CONTAINER_TAG}"
> +
> + ALPINE_X86_64_LAVA_SSH_TAG: "${CONTAINER_TAG}"
> diff --git a/drivers/gpu/drm/ci/lava-submit.sh b/drivers/gpu/drm/ci/lava-submit.sh
> index 6add15083c78..a1404a2d8cee 100755
> --- a/drivers/gpu/drm/ci/lava-submit.sh
> +++ b/drivers/gpu/drm/ci/lava-submit.sh
> @@ -1,58 +1,105 @@
> -#!/bin/bash
> +#!/usr/bin/env bash
> # SPDX-License-Identifier: MIT
> +# shellcheck disable=SC2086 # we want word splitting
> +# shellcheck disable=SC1091 # paths only become valid at runtime
>
> -set -e
> -set -x
> +# If we run in the fork (not from mesa or Marge-bot), reuse mainline kernel and rootfs, if exist.
> +_check_artifact_path() {
> + _url="https://${1}/${2}"
> + if curl -s -o /dev/null -I -L -f --retry 4 --retry-delay 15 "${_url}"; then
> + echo -n "${_url}"
> + fi
> +}
>
> -# Try to use the kernel and rootfs built in mainline first, so we're more
> -# likely to hit cache
> -if curl -L --retry 4 -f --retry-all-errors --retry-delay 60 -s "https://${BASE_SYSTEM_MAINLINE_HOST_PATH}/done"; then
> - BASE_SYSTEM_HOST_PATH="${BASE_SYSTEM_MAINLINE_HOST_PATH}"
> -else
> - BASE_SYSTEM_HOST_PATH="${BASE_SYSTEM_FORK_HOST_PATH}"
> -fi
> +get_path_to_artifact() {
> + _mainline_artifact="$(_check_artifact_path ${BASE_SYSTEM_MAINLINE_HOST_PATH} ${1})"
> + if [ -n "${_mainline_artifact}" ]; then
> + echo -n "${_mainline_artifact}"
> + return
> + fi
> + _fork_artifact="$(_check_artifact_path ${BASE_SYSTEM_FORK_HOST_PATH} ${1})"
> + if [ -n "${_fork_artifact}" ]; then
> + echo -n "${_fork_artifact}"
> + return
> + fi
> + set +x
> + error "Sorry, I couldn't find a viable built path for ${1} in either mainline or a fork." >&2
> + echo "" >&2
> + echo "If you're working on CI, this probably means that you're missing a dependency:" >&2
> + echo "this job ran ahead of the job which was supposed to upload that artifact." >&2
> + echo "" >&2
> + echo "If you aren't working on CI, please ping @mesa/ci-helpers to see if we can help." >&2
> + echo "" >&2
> + echo "This job is going to fail, because I can't find the resources I need. Sorry." >&2
> + set -x
> + exit 1
> +}
> +
> +. "${SCRIPTS_DIR}/setup-test-env.sh"
> +
> +section_start prepare_rootfs "Preparing root filesystem"
> +
> +set -ex
> +
> +section_switch rootfs "Assembling root filesystem"
> +ROOTFS_URL="$(get_path_to_artifact lava-rootfs.tar.zst)"
> +[ $? != 1 ] || exit 1
>
> rm -rf results
> mkdir -p results/job-rootfs-overlay/
>
> +artifacts/ci-common/generate-env.sh > results/job-rootfs-overlay/set-job-env-vars.sh
> cp artifacts/ci-common/capture-devcoredump.sh results/job-rootfs-overlay/
> cp artifacts/ci-common/init-*.sh results/job-rootfs-overlay/
> cp artifacts/ci-common/intel-gpu-freq.sh results/job-rootfs-overlay/
> +cp artifacts/ci-common/kdl.sh results/job-rootfs-overlay/
> cp "$SCRIPTS_DIR"/setup-test-env.sh results/job-rootfs-overlay/
>
> -# Prepare env vars for upload.
> -section_start variables "Variables passed through:"
> -KERNEL_IMAGE_BASE="https://${BASE_SYSTEM_HOST_PATH}" \
> - artifacts/ci-common/generate-env.sh | tee results/job-rootfs-overlay/set-job-env-vars.sh
> -section_end variables
> -
> tar zcf job-rootfs-overlay.tar.gz -C results/job-rootfs-overlay/ .
> ci-fairy s3cp --token-file "${S3_JWT_FILE}" job-rootfs-overlay.tar.gz "https://${JOB_ROOTFS_OVERLAY_PATH}"
>
> +# Prepare env vars for upload.
> +section_switch variables "Environment variables passed through to device:"
> +cat results/job-rootfs-overlay/set-job-env-vars.sh
> +
> +section_switch lava_submit "Submitting job for scheduling"
> +
> touch results/lava.log
> tail -f results/lava.log &
> -
> PYTHONPATH=artifacts/ artifacts/lava/lava_job_submitter.py \
> - submit \
> + --farm "${FARM}" \
> + --device-type "${DEVICE_TYPE}" \
> + --boot-method "${BOOT_METHOD}" \
> + --job-timeout-min ${JOB_TIMEOUT:-30} \
> --dump-yaml \
> --pipeline-info "$CI_JOB_NAME: $CI_PIPELINE_URL on $CI_COMMIT_REF_NAME ${CI_NODE_INDEX}/${CI_NODE_TOTAL}" \
> - --rootfs-url-prefix "https://${BASE_SYSTEM_HOST_PATH}" \
> + --rootfs-url "${ROOTFS_URL}" \
> --kernel-url-prefix "https://${PIPELINE_ARTIFACTS_BASE}/${DEBIAN_ARCH}" \
> - --build-url "${FDO_HTTP_CACHE_URI:-}https://${PIPELINE_ARTIFACTS_BASE}/${DEBIAN_ARCH}/kernel-files.tar.zst" \
> - --job-rootfs-overlay-url "${FDO_HTTP_CACHE_URI:-}https://${JOB_ROOTFS_OVERLAY_PATH}" \
> - --job-timeout-min ${JOB_TIMEOUT:-80} \
> + --kernel-external "${EXTERNAL_KERNEL_TAG}" \
> --first-stage-init artifacts/ci-common/init-stage1.sh \
> - --ci-project-dir "${CI_PROJECT_DIR}" \
> - --device-type "${DEVICE_TYPE}" \
> - --farm "${FARM}" \
> --dtb-filename "${DTB}" \
> --jwt-file "${S3_JWT_FILE}" \
> --kernel-image-name "${KERNEL_IMAGE_NAME}" \
> --kernel-image-type "${KERNEL_IMAGE_TYPE}" \
> - --boot-method "${BOOT_METHOD}" \
> --visibility-group "${VISIBILITY_GROUP}" \
> --lava-tags "${LAVA_TAGS}" \
> --mesa-job-name "$CI_JOB_NAME" \
> --structured-log-file "results/lava_job_detail.json" \
> --ssh-client-image "${LAVA_SSH_CLIENT_IMAGE}" \
> + --project-name "${CI_PROJECT_NAME}" \
> + --starting-section "${CURRENT_SECTION}" \
> + --job-submitted-at "${CI_JOB_STARTED_AT}" \
> + - append-overlay \
> + --name=kernel-build \
> + --url="${FDO_HTTP_CACHE_URI:-}https://${PIPELINE_ARTIFACTS_BASE}/${DEBIAN_ARCH}/kernel-files.tar.zst" \
> + --compression=zstd \
> + --path="${CI_PROJECT_DIR}" \
> + --format=tar \
> + - append-overlay \
> + --name=job-overlay \
> + --url="https://${JOB_ROOTFS_OVERLAY_PATH}" \
> + --compression=gz \
> + --path="/" \
> + --format=tar \
> + - submit \
> >> results/lava.log
> diff --git a/drivers/gpu/drm/ci/test.yml b/drivers/gpu/drm/ci/test.yml
> index f0ef60c8f56d..42a8e7f93714 100644
> --- a/drivers/gpu/drm/ci/test.yml
> +++ b/drivers/gpu/drm/ci/test.yml
> @@ -1,21 +1,21 @@
> .test-rules:
> rules:
> - - if: '$FD_FARM == "offline" && $RUNNER_TAG =~ /^google-freedreno-/'
> - when: never
> - - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/'
> - when: never
> - !reference [.no_scheduled_pipelines-rules, rules]
> + - !reference [.collabora-farm-rules, rules]
> + - !reference [.google-freedreno-farm-rules, rules]
> - when: on_success
>
> .lava-test:
> extends:
> - .test-rules
> + - .build-rules
> + - .container+build-rules
> timeout: "1h30m"
> script:
> # Note: Build dir (and thus install) may be dirty due to GIT_STRATEGY
> - rm -rf install
> - tar -xf artifacts/install.tar
> - - mv install/* artifacts/.
> + - mv -n install/* artifacts/.
> # Override it with our lava-submit.sh script
> - ./artifacts/lava-submit.sh
>
> @@ -32,6 +32,7 @@
> - alpine/x86_64_lava_ssh_client
> - kernel+rootfs_arm32
> - debian/x86_64_build
> + - python-test
> - testing:arm32
> - igt:arm32
>
> @@ -48,6 +49,7 @@
> - alpine/x86_64_lava_ssh_client
> - kernel+rootfs_arm64
> - debian/x86_64_build
> + - python-test
> - testing:arm64
> - igt:arm64
>
> @@ -64,6 +66,7 @@
> - alpine/x86_64_lava_ssh_client
> - kernel+rootfs_x86_64
> - debian/x86_64_build
> + - python-test
> - testing:x86_64
> - igt:x86_64
>
> --
> 2.43.0
>
>
lgtm
Acked-by: Helen Koike <helen.koike@xxxxxxxxxxxxx>
Thanks
Helen