* [PATCH v2] drm/ci: Add CI pipeline for drm-misc branches
@ 2026-09-11 12:18 Maxime Ripard
2026-09-11 12:29 ` sashiko-bot
0 siblings, 1 reply; 2+ messages in thread
From: Maxime Ripard @ 2026-09-11 12:18 UTC (permalink / raw)
To: Helen Koike, Vignesh Raman, Maarten Lankhorst, Thomas Zimmermann,
David Airlie, Simona Vetter, Nathan Chancellor, Nick Desaulniers,
Bill Wendling, Justin Stitt
Cc: linux-kernel, dri-devel, llvm, Maxime Ripard
The DRM CI infrastructure builds upon Mesa's CI to run IGT tests on
hardware. Its focus is on functional testing on a selected number of
targets.
The concern for drm-misc is different: it merges a large number of
patches across many platforms, and build or unit test breakages happen
on a regular basis. Adding build and unit testing for drm-misc has been
on the back of our minds, and a first attempt was made last year. The
feedback was to rely more on the existing infrastructure.
Introduce a CI entry point that runs on pushes to drm-misc-next,
drm-misc-fixes, and drm-misc-next-fixes. It reuses kunit.yml,
check-devicetrees.yml, and the freedesktop ci-templates, while defining
build templates inline to avoid pulling in the Mesa pipeline.
A single Debian container with LLVM handles cross-compilation to all
three architectures. The pipeline compiles the kernel using defconfigs
from the drm/tip rerere-cache branch, runs the DRM KUnit tests, and
checks device tree bindings.
Link: https://lore.kernel.org/all/20250319-greedy-sturgeon-from-avalon-ac758f@houat/
Acked-by: Vignesh Raman <vignesh.raman@collabora.com>
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Changes in v2:
- Run dt_bindings_check
- Run on push instead of MR after some discussions with Dave and Sima
- Test run here: https://gitlab.freedesktop.org/mripard/kernel/-/pipelines/1744733
- Link to v1: https://lore.kernel.org/r/20260902-drm-drm-misc-ci-v1-1-49d05e228eab@kernel.org
---
drivers/gpu/drm/ci/drm-misc-ci.yml | 147 +++++++++++++++++++++++++++++++++++++
1 file changed, 147 insertions(+)
diff --git a/drivers/gpu/drm/ci/drm-misc-ci.yml b/drivers/gpu/drm/ci/drm-misc-ci.yml
new file mode 100644
index 000000000000..4ab87547794e
--- /dev/null
+++ b/drivers/gpu/drm/ci/drm-misc-ci.yml
@@ -0,0 +1,147 @@
+# CI pipeline for drm-misc-next, drm-misc-fixes, and drm-misc-next-fixes.
+#
+# Runs on pushes to drm-misc-next, drm-misc-fixes, and
+# drm-misc-next-fixes. Compiles the kernel for arm, arm64, and
+# x86_64, runs the DRM KUnit tests, and checks device tree bindings.
+#
+# A single container image is built using freedesktop ci-templates with
+# the packages needed for kernel compilation and LLVM for
+# cross-compilation. QEMU is installed at runtime by the KUnit jobs.
+#
+# check-devicetrees.yml and kunit.yml are included directly. build.yml
+# and the Mesa container/build pipelines are not:
+# they pull in hundreds of Mesa-specific jobs and templates that would
+# each need to be individually stubbed or disabled. The build templates
+# (.build:arm32, .build:arm64, .build:x86_64) are defined inline.
+
+variables:
+ CI_TEMPLATES_COMMIT: &ci-templates-commit aec7a6ce7bb38902c70641526f6611e27141784a
+ # Project whose container registry stores the built images
+ FDO_UPSTREAM_REPO: mripard/kernel
+ KERNEL_BUILD_CONTAINER_TAG: "2026-09-11-01"
+ LLVM_VERSION: "19"
+
+default:
+ before_script: []
+
+include:
+ - project: 'freedesktop/ci-templates'
+ ref: *ci-templates-commit
+ file:
+ - '/templates/debian.yml'
+ - local: drivers/gpu/drm/ci/check-devicetrees.yml
+ - local: drivers/gpu/drm/ci/kunit.yml
+
+stages:
+ - container
+ - build
+ - static-checks
+ - kunit
+
+# --- Pipeline rules ---
+workflow:
+ rules:
+ - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH =~ /^drm-misc-(next|fixes|next-fixes)$/
+ when: always
+
+# kunit.yml's jobs inherit .build-rules through the .build:* chain.
+# Pass everything through since the pipeline is already gated by
+# workflow:rules.
+.build-rules:
+ rules:
+ - when: on_success
+
+# --- Container build job ---
+# Single container with all build tools. LLVM handles cross-compilation
+# to arm and arm64, so no architecture-specific containers are needed.
+debian/kernel-build:
+ extends: .fdo.container-build@debian
+ stage: container
+ variables:
+ FDO_DISTRIBUTION_VERSION: trixie
+ FDO_DISTRIBUTION_TAG: "${KERNEL_BUILD_CONTAINER_TAG}"
+ FDO_DISTRIBUTION_PACKAGES: >-
+ bc bison ca-certificates cpio curl
+ clang-${LLVM_VERSION} flex gcc gzip
+ lld-${LLVM_VERSION} llvm-${LLVM_VERSION}
+ libelf-dev libssl-dev
+ make perl pkg-config
+ python3 python3-dev python3-pip python3-venv
+ swig xz-utils yamllint
+
+# --- Build templates ---
+# Stubs for templates referenced by check-devicetrees.yml. The
+# originals live in build.yml and container.yml which we do not
+# include.
+.build:
+ extends: .build-rules
+
+.use-debian/x86_64_build:
+ extends: .build-base
+
+.build-base:
+ image: "${CI_REGISTRY}/${FDO_UPSTREAM_REPO}/debian/trixie:${KERNEL_BUILD_CONTAINER_TAG}"
+ needs: ["debian/kernel-build"]
+
+.build:arm32:
+ extends: .build-base
+ variables:
+ KERNEL_ARCH: "arm"
+ DEFCONFIG_ARCH: "arm"
+
+.build:arm64:
+ extends: .build-base
+ variables:
+ KERNEL_ARCH: "arm64"
+ DEFCONFIG_ARCH: "arm64"
+
+.build:x86_64:
+ extends: .build-base
+ variables:
+ KERNEL_ARCH: "x86_64"
+ DEFCONFIG_ARCH: "x86"
+
+# --- Kernel-wide build jobs (LLVM) ---
+.kernel-build:
+ stage: build
+ timeout: 45m
+ variables:
+ GIT_DEPTH: 1
+ DEFCONFIG_URL: https://gitlab.freedesktop.org/drm/tip/-/raw/rerere-cache/drm-misc-${DEFCONFIG_ARCH}_defconfig
+ artifacts: {}
+ before_script:
+ - drivers/gpu/drm/ci/setup-llvm-links.sh
+ - curl -L --retry 4 -f --retry-all-errors --retry-delay 60 -o .config "${DEFCONFIG_URL}"
+
+kernel-build:arm32:
+ extends: [.build:arm32, .kernel-build]
+ script:
+ - make ARCH=arm LLVM=1 olddefconfig
+ - make ARCH=arm LLVM=1 -j$(nproc)
+
+kernel-build:arm64:
+ extends: [.build:arm64, .kernel-build]
+ script:
+ - make ARCH=arm64 LLVM=1 olddefconfig
+ - make ARCH=arm64 LLVM=1 -j$(nproc)
+
+kernel-build:x86_64:
+ extends: [.build:x86_64, .kernel-build]
+ script:
+ - make ARCH=x86 LLVM=1 olddefconfig
+ - make ARCH=x86 LLVM=1 -j$(nproc)
+
+# --- Disable dtbs-check jobs ---
+# dtbs-check validates compiled DTBs which may produce warnings from
+# code we are not responsible for. Keep dt-binding-check only.
+dtbs-check:arm32:
+ rules:
+ - when: never
+
+dtbs-check:arm64:
+ rules:
+ - when: never
+
+# --- KUnit jobs ---
+# kunit:arm32, kunit:arm64, and kunit:x86_64 are defined in kunit.yml
+# and implicitly enabled here through the .build:* templates above.
---
base-commit: 99c95ce1b07081d7944d637ba7d72d835c0d520a
change-id: 20260902-drm-drm-misc-ci-ec6c69506609
Best regards,
--
Maxime Ripard <mripard@kernel.org>
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] drm/ci: Add CI pipeline for drm-misc branches
2026-09-11 12:18 [PATCH v2] drm/ci: Add CI pipeline for drm-misc branches Maxime Ripard
@ 2026-09-11 12:29 ` sashiko-bot
0 siblings, 0 replies; 2+ messages in thread
From: sashiko-bot @ 2026-09-11 12:29 UTC (permalink / raw)
To: Maxime Ripard; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
New issues:
- [High] The CI configuration hardcodes `FDO_UPSTREAM_REPO` to a personal repository (`mripard/kernel`), breaking fork-based workflows and pointing the subsystem's CI to a personal fork.
Pre-existing issues:
- [High] The `kunit:arm64` job attempts to install `qemu-system-aarch64`, which is not a valid Debian package, breaking the ARM64 KUnit pipeline.
--
commit 1c7dfd00b5030cd66091b90d1334fd1443f5c314
Author: Maxime Ripard <mripard@kernel.org>
drm/ci: Add CI pipeline for drm-misc branches
Introduce a CI entry point that runs on pushes to drm-misc branches.
The pipeline cross-compiles the kernel using LLVM on a Debian container,
runs DRM KUnit tests, and checks device tree bindings.
Link: https://lore.kernel.org/all/20250319-greedy-sturgeon-from-avalon-ac758f@houat/
> diff --git a/drivers/gpu/drm/ci/drm-misc-ci.yml b/drivers/gpu/drm/ci/drm-misc-ci.yml
> new file mode 100644
> index 0000000000000..4ab87547794e8
> --- /dev/null
> +++ b/drivers/gpu/drm/ci/drm-misc-ci.yml
[ ... ]
> +variables:
> + CI_TEMPLATES_COMMIT: &ci-templates-commit aec7a6ce7bb38902c70641526f6611e27141784a
> + # Project whose container registry stores the built images
> + FDO_UPSTREAM_REPO: mripard/kernel
[Severity: High]
Does this hardcoded personal repository break fork-based CI workflows?
If a developer modifies the container in their own fork and updates the
tag, the build step will push the container to their registry. However,
downstream jobs using the .build-base template will still attempt to pull
from the mripard/kernel path because of how FDO_UPSTREAM_REPO is used here:
.build-base:
image: "${CI_REGISTRY}/${FDO_UPSTREAM_REPO}/debian/trixie:${KERNEL_BUILD_CONTAINER_TAG}"
Should this variable be set to the generic upstream project path instead?
> + KERNEL_BUILD_CONTAINER_TAG: "2026-09-11-01"
> + LLVM_VERSION: "19"
> +
> +default:
> + before_script: []
> +
> +include:
> + - project: 'freedesktop/ci-templates'
> + ref: *ci-templates-commit
> + file:
> + - '/templates/debian.yml'
> + - local: drivers/gpu/drm/ci/check-devicetrees.yml
> + - local: drivers/gpu/drm/ci/kunit.yml
[Severity: High]
This is a pre-existing issue, but including kunit.yml here exposes a failure
in the kunit:arm64 job.
That job contains the following step in its before_script:
apt-get install -y --no-install-recommends qemu-system-aarch64
Is this package name correct? On Debian systems, the emulator for AArch64 is
typically provided by the qemu-system-arm package. Attempting to install
qemu-system-aarch64 directly will fail and break the ARM64 KUnit pipeline run
when executed inside this Debian environment.
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-drm-drm-misc-ci-v2-1-1847f89585cb@kernel.org?part=1
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-09-11 12:29 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-11 12:18 [PATCH v2] drm/ci: Add CI pipeline for drm-misc branches Maxime Ripard
2026-09-11 12:29 ` sashiko-bot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.