mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2] drm/ci: Add CI pipeline for drm-misc branches
@ 2026-09-11 12:18 Maxime Ripard
  2026-10-19 10:00 ` Vignesh Raman
  0 siblings, 1 reply; 3+ 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	[flat|nested] 3+ 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-10-19 10:00 ` Vignesh Raman
  2026-10-19 14:26   ` Maxime Ripard
  0 siblings, 1 reply; 3+ messages in thread
From: Vignesh Raman @ 2026-10-19 10:00 UTC (permalink / raw)
  To: Maxime Ripard, Helen Koike, Maarten Lankhorst, Thomas Zimmermann,
	David Airlie, Simona Vetter, Nathan Chancellor, Nick Desaulniers,
	Bill Wendling, Justin Stitt
  Cc: linux-kernel, dri-devel, llvm

Hi,

On 11/09/26 17:48, Maxime Ripard wrote:
> 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

Acked-by: Vignesh Raman <vignesh.raman@collabora.com>

Regards,
Vignesh

> ---
>   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,


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] drm/ci: Add CI pipeline for drm-misc branches
  2026-10-19 10:00 ` Vignesh Raman
@ 2026-10-19 14:26   ` Maxime Ripard
  0 siblings, 0 replies; 3+ messages in thread
From: Maxime Ripard @ 2026-10-19 14:26 UTC (permalink / raw)
  To: Vignesh Raman
  Cc: Helen Koike, Maarten Lankhorst, Thomas Zimmermann, David Airlie,
	Simona Vetter, Nathan Chancellor, Nick Desaulniers,
	Bill Wendling, Justin Stitt, linux-kernel, dri-devel, llvm

[-- Attachment #1: Type: text/plain, Size: 3590 bytes --]

Hi Vignesh,

On Mon, Oct 19, 2026 at 03:30:54PM +0530, Vignesh Raman wrote:
> Hi,
> 
> On 11/09/26 17:48, Maxime Ripard wrote:
> > 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
> 
> Acked-by: Vignesh Raman <vignesh.raman@collabora.com>

Thanks for the review, see below

> > ---
> >   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"

I just realised there's still my personal repo being used as the
container registry. Are you ok if I change it to drm/misc/kernel when
applying?

Thanks again,
Maxime

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-10-19 14:26 UTC | newest]

Thread overview: 3+ 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-10-19 10:00 ` Vignesh Raman
2026-10-19 14:26   ` Maxime Ripard

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®