From patchwork Mon Jan 19 10:20:35 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= X-Patchwork-Id: 25840 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 7F0C1C3220 for ; Mon, 19 Jan 2026 10:20:49 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 3C23A61FC9; Mon, 19 Jan 2026 11:20:47 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="ZYXZXhcF"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id CE0AD61FB9 for ; Mon, 19 Jan 2026 11:20:43 +0100 (CET) Received: from pb-laptop.local (185.221.143.114.nat.pool.zt.hu [185.221.143.114]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 6E32ABE1 for ; Mon, 19 Jan 2026 11:20:13 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1768818013; bh=sh4Eb/0U/uJtp8efTij2QPLDmgUWpXqJmSOdIz7XM1I=; h=From:To:Subject:Date:In-Reply-To:References:From; b=ZYXZXhcFbpW05Qs1DTGKTr8s33LaaBN5CFiGqHUk/sIDjpfJlnT4ZlRbFyKcZU6qj BIDsir/hmNtduxcQEjwZKdmc+X2/MUJPG9dKbIcYgdBLG/bWaLoPeBzFTeC2zuQdOr qtGNvDJAqeFiQ89KJQanSOJt4MP5pGtNJQ6X/GrI= From: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= To: libcamera-devel@lists.libcamera.org Subject: [libcamera-ci] [RFC PATCH v1 1/5] Add job to generate container for cross compilation Date: Mon, 19 Jan 2026 11:20:35 +0100 Message-ID: <20260119102039.3521673-2-barnabas.pocze@ideasonboard.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119102039.3521673-1-barnabas.pocze@ideasonboard.com> References: <20260119102039.3521673-1-barnabas.pocze@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add a job that generates a debian based container with the necessary dependencies to cross compile for the given architecture. Signed-off-by: Barnabás Pőcze --- .gitlab-ci/setup-debian-cross-container.sh | 45 ++++++++++++++++++++++ gitlab-ci.yml | 40 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100755 .gitlab-ci/setup-debian-cross-container.sh -- 2.52.0 diff --git a/.gitlab-ci/setup-debian-cross-container.sh b/.gitlab-ci/setup-debian-cross-container.sh new file mode 100755 index 0000000..82aea02 --- /dev/null +++ b/.gitlab-ci/setup-debian-cross-container.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +set -ex + +packages=( + python3-autopep8 + python3-dev + python3-jinja2 + python3-pyparsing + python3-ply + python3-yaml +) + +multiarch_packages=( + libevent-dev + libpisp-dev + libssl-dev + libudev-dev + libyaml-dev + openssl +) + +arch="$1" + +export DEBIAN_FRONTEND=noninteractive + +dpkg --add-architecture "$arch" +apt update -y + +pkgs=() + +packages+=( "crossbuild-essential-$arch" ) +for pkg in "${packages[@]}"; do + pkgs+=( "$pkg" ) +done + +multiarch_packages+=( "cross-exe-wrapper" ) +multiarch_packages+=( "pkg-config" ) +for pkg in "${multiarch_packages[@]}"; do + pkgs+=( "$pkg:$arch" ) +done + +apt install -y "${pkgs[@]}" + +meson env2mfile --cross --debarch "$arch" -o "/opt/meson-$arch.cross" diff --git a/gitlab-ci.yml b/gitlab-ci.yml index bc44feb..afac21f 100644 --- a/gitlab-ci.yml +++ b/gitlab-ci.yml @@ -73,6 +73,18 @@ include: FDO_DISTRIBUTION_VERSION: 'trixie' FDO_DISTRIBUTION_TAG: '2025-11-02.0' +.debian-cross-build: + variables: + CROSS_BUILD_DISTRIBUTION_VERSION: 'trixie' + CROSS_BUILD_TAG: '2026-01-09.0' + CROSS_BUILD_IMAGE: 'on-device-testing/debian-rootfs' + +.debian-cross-build-architectures: + parallel: + matrix: + - ARCH: + - arm64 + .container-debian: extends: - .fdo.container-build@debian @@ -104,6 +116,34 @@ container-debian:13: - .container-debian - .libcamera-ci.debian:13 +container-build-debian-cross: + extends: + - .fdo.container-build@debian + - .debian-cross-build + - .debian-cross-build-architectures + stage: container + needs: [] + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: "$CROSS_BUILD_DISTRIBUTION_VERSION" + FDO_DISTRIBUTION_TAG: "build-debian-cross-$CROSS_BUILD_TAG-$ARCH" + FDO_DISTRIBUTION_PACKAGES: >- + ca-certificates + build-essential + dpkg-dev + findutils + git + meson + ruby + FDO_DISTRIBUTION_EXEC: >- + if echo $CI_CONFIG_PATH | grep -q '@' ; then + git clone --depth 1 --single-branch "${CI_SERVER_URL}/$${CI_CONFIG_PATH/*@/}" .ci-config ; + rm -rf .gitlab-ci ; + mv .ci-config/.gitlab-ci/ . ; + fi ; + .gitlab-ci/setup-debian-cross-container.sh "$ARCH" ; + gem install fpm ; + # ------------------------------------------------------------------------------ # Build stage - Build libcamera for various platforms and configurations # ------------------------------------------------------------------------------ From patchwork Mon Jan 19 10:20:36 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= X-Patchwork-Id: 25841 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id C7564C327D for ; Mon, 19 Jan 2026 10:20:50 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 94BE661FC3; Mon, 19 Jan 2026 11:20:48 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="O8ndm+G4"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0983F61FBB for ; Mon, 19 Jan 2026 11:20:44 +0100 (CET) Received: from pb-laptop.local (185.221.143.114.nat.pool.zt.hu [185.221.143.114]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id A06C3C79 for ; Mon, 19 Jan 2026 11:20:13 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1768818013; bh=BJaPX3oQYxV8W8Fz+/6uDN7SCZT9ARZ37Nmbm1Xv1tE=; h=From:To:Subject:Date:In-Reply-To:References:From; b=O8ndm+G4BaKPTqmA498NwE3GkTN5ikhS+fo31HA5S/KPBc/3YrpSkV00XEHyESxQ7 ETblt8cxtzml5Myx1/5Y5urnk5y60l11GAS9BQZ1rAu386oI41j3wZQhynRaC5Y1l8 GNAx9LtTnSUFyNQzFk1o0sKSzvrMdzfBXEYSv3qM= From: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= To: libcamera-devel@lists.libcamera.org Subject: [libcamera-ci] [RFC PATCH v1 2/5] Add job to build deb package for libcamera Date: Mon, 19 Jan 2026 11:20:36 +0100 Message-ID: <20260119102039.3521673-3-barnabas.pocze@ideasonboard.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119102039.3521673-1-barnabas.pocze@ideasonboard.com> References: <20260119102039.3521673-1-barnabas.pocze@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add a job that builds a very specific deb package for testing purposes for the given architectures. Signed-off-by: Barnabás Pőcze --- gitlab-ci.yml | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) -- 2.52.0 diff --git a/gitlab-ci.yml b/gitlab-ci.yml index afac21f..b7362d7 100644 --- a/gitlab-ci.yml +++ b/gitlab-ci.yml @@ -385,6 +385,53 @@ build-package:cros: - build/build.ninja - libcamera-upstream-9999.tbz2 +# +# Build and package libcamera for the purpose of running tests on a real device. +# + +build-debian-cross: + extends: + - .fdo.distribution-image@debian + - .debian-cross-build + - .debian-cross-build-architectures + stage: build + needs: + - job: container-build-debian-cross + artifacts: false + parallel: + matrix: + - ARCH: "$[[ matrix.ARCH ]]" + variables: + FDO_DISTRIBUTION_VERSION: "$CROSS_BUILD_DISTRIBUTION_VERSION" + FDO_DISTRIBUTION_TAG: "build-debian-cross-$CROSS_BUILD_TAG-$ARCH" + script: + - echo "0.0.0-ci-build-$CI_COMMIT_SHA-job-$CI_JOB_ID-pipeline-$CI_PIPELINE_ID-project-$CI_PROJECT_PATH" > .tarball-version + - meson setup build + --cross-file "/opt/meson-$ARCH.cross" + -D prefix=/usr + -D debug=true + -D optimization=2 + -D force_fallback_for="['gtest']" + -D auto_features=disabled + -D udev=enabled + -D cam=enabled + -D lc-compliance=enabled + - meson compile -C build + - meson install -C build --no-rebuild --destdir install + - fpm -s dir -t deb + -C build/install + --architecture "$ARCH" + --package libcamera.deb + --name libcamera + --description "$CI_COMMIT_SHA (job $CI_JOB_ID, pipeline $CI_PIPELINE_ID, project $CI_PROJECT_PATH)" + --version "0.0.0" + artifacts: + expire_in: 1w + paths: + - build/meson-logs/ + - build/build.ninja + - "*.deb" + # ------------------------------------------------------------------------------ # Lint stage - Run checkstyle.py and check merge suitability # ------------------------------------------------------------------------------ From patchwork Mon Jan 19 10:20:37 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= X-Patchwork-Id: 25842 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 8BFBFC3220 for ; Mon, 19 Jan 2026 10:20:51 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 64E9E61FBB; Mon, 19 Jan 2026 11:20:49 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Nw5TBvfU"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 1D41F61FBC for ; Mon, 19 Jan 2026 11:20:44 +0100 (CET) Received: from pb-laptop.local (185.221.143.114.nat.pool.zt.hu [185.221.143.114]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id D2A2F10D8 for ; Mon, 19 Jan 2026 11:20:13 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1768818013; bh=cuVq6zgdO8brfCPFxggoLSx1kOKtG2mFEVEmRhk/AZE=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Nw5TBvfUsF6Ga2Elfg89r4DQt87AvwUdInRK0CXF8NgS8JhJNLKslwOIRiFNx8o7G zKM+MfuU2ddZOA7QGu5AE5wsnVlgaFVz6IRvKVv/f5/f1+AFTjjwSQs8AegnNdiW8c LPWSsuBNqLU7ALBtBbVA9lSj5+PtFOzPdci2Zw7c= From: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= To: libcamera-devel@lists.libcamera.org Subject: [libcamera-ci] [RFC PATCH v1 3/5] Add job to build debian rootfs Date: Mon, 19 Jan 2026 11:20:37 +0100 Message-ID: <20260119102039.3521673-4-barnabas.pocze@ideasonboard.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119102039.3521673-1-barnabas.pocze@ideasonboard.com> References: <20260119102039.3521673-1-barnabas.pocze@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add a job that builds a debian rootfs and uploads it to the gitlab container registry, with the dependencies needed by libcamera created in the build-debian-cross job. Signed-off-by: Barnabás Pőcze --- .gitlab-ci/build-debian-rootfs.sh | 79 +++++++++++++++++++++++++++++++ gitlab-ci.yml | 47 ++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100755 .gitlab-ci/build-debian-rootfs.sh -- 2.52.0 diff --git a/.gitlab-ci/build-debian-rootfs.sh b/.gitlab-ci/build-debian-rootfs.sh new file mode 100755 index 0000000..800ba5f --- /dev/null +++ b/.gitlab-ci/build-debian-rootfs.sh @@ -0,0 +1,79 @@ +#!/bin/bash +# based on https://gitlab.freedesktop.org/freedesktop/ci-templates/-/blob/fb9d50ccb3cbbb4c6dc5f9ef53a0ad3cb0d8a177/bootstrap/cbuild + +set -ex + +packages=( + # misc. + ca-certificates + coreutils + chrony + curl + iproute2 + kmod + moreutils + openssh-server + v4l-utils + wget + + # runtime dependencies + libevent-2.1-7 + libevent-pthreads-2.1-7 + libpisp1 + libssl3t64 + libudev1 + libyaml-0-2 + udev +) + +podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY +skopeo login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + +deb_distribution="$1" +deb_arch="$2" +container_image_path="$3" +container_image_tag="$4" +overlay_dir="$5" + +container_image_name="$CI_REGISTRY_IMAGE/$container_image_path:$container_image_tag" + +if skopeo inspect --no-tags --retry-times 3 "docker://$container_image_name"; then + echo "container image exists" + exit 0 +fi + +# TODO: Check if image already exists in the registry of $FDO_UPSTREAM_REPO? + +newcontainer=$(buildah from scratch) +scratchmnt=$(buildah mount "$newcontainer") + +debootstrap --arch="$deb_arch" --variant=minbase "$deb_distribution" "$scratchmnt" + +buildah run --isolation=chroot "$newcontainer" apt update -y +buildah run --isolation=chroot "$newcontainer" apt install -y --no-install-recommends systemd systemd-sysv +buildah run --isolation=chroot "$newcontainer" apt install -y --no-install-recommends "${packages[@]}" +buildah run --isolation=chroot "$newcontainer" bash -c 'printf "root\nroot\n" | passwd root' +buildah run --isolation=chroot "$newcontainer" bash -c 'echo "PermitRootLogin yes" > /etc/ssh/sshd_config.d/10-allow-root-password.conf' +buildah run --isolation=chroot "$newcontainer" apt autoclean -y +buildah run --isolation=chroot "$newcontainer" apt autopurge -y + +buildah run --isolation=chroot "$newcontainer" rm -rf /var/cache/ +buildah run --isolation=chroot "$newcontainer" rm -rf /var/lib/apt/ + +if [[ -d "$overlay_dir" ]]; then + rsync -av --chown=root:root "$overlay_dir/" "$scratchmnt/" +fi + +buildah unmount "$newcontainer" + +buildah config -l fdo.pipeline_id="$CI_PIPELINE_ID" "$newcontainer" +buildah config -l fdo.job_id="$CI_JOB_ID" "$newcontainer" +buildah config -l fdo.project="$CI_PROJECT_PATH" "$newcontainer" +buildah config -l fdo.commit="$CI_COMMIT_SHA" "$newcontainer" +buildah config --entrypoint '["/sbin/init"]' "$newcontainer" + +buildah commit --format=docker "$newcontainer" "$container_image_name" + +podman image inspect "$container_image_name" + +podman push --compression-format=gzip "$container_image_name" diff --git a/gitlab-ci.yml b/gitlab-ci.yml index b7362d7..36032e3 100644 --- a/gitlab-ci.yml +++ b/gitlab-ci.yml @@ -144,6 +144,33 @@ container-build-debian-cross: .gitlab-ci/setup-debian-cross-container.sh "$ARCH" ; gem install fpm ; +.container-build-debian-rootfs: + variables: + FDO_DISTRIBUTION_VERSION: 'trixie' + FDO_DISTRIBUTION_TAG: 'build-debian-rootfs-2026-01-12.0' + +container-build-debian-rootfs: + extends: + - .fdo.container-build@debian + - .container-build-debian-rootfs + stage: container + needs: [] + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_PACKAGES: >- + buildah + ca-certificates + debootstrap + dpkg-dev + findutils + fuse-overlayfs + git + jq + meson + podman + rsync + skopeo + # ------------------------------------------------------------------------------ # Build stage - Build libcamera for various platforms and configurations # ------------------------------------------------------------------------------ @@ -432,6 +459,26 @@ build-debian-cross: - build/build.ninja - "*.deb" +build-debian-rootfs: + extends: + - .fdo.distribution-image@debian + - .container-build-debian-rootfs + - .debian-cross-build + - .debian-cross-build-architectures + - .libcamera-ci.scripts + stage: build + needs: + - job: container-build-debian-rootfs + artifacts: false + variables: + GIT_STRATEGY: none + script: + - $CI_PROJECT_DIR/.gitlab-ci/build-debian-rootfs.sh + "$CROSS_BUILD_DISTRIBUTION_VERSION" + "$ARCH" + "$CROSS_BUILD_IMAGE" + "$CROSS_BUILD_TAG-$ARCH" + # ------------------------------------------------------------------------------ # Lint stage - Run checkstyle.py and check merge suitability # ------------------------------------------------------------------------------ From patchwork Mon Jan 19 10:20:38 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= X-Patchwork-Id: 25843 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 24187C32E7 for ; Mon, 19 Jan 2026 10:20:52 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id E5C9761FC4; Mon, 19 Jan 2026 11:20:49 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Hjyd1aMj"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 48EBA61FBF for ; Mon, 19 Jan 2026 11:20:44 +0100 (CET) Received: from pb-laptop.local (185.221.143.114.nat.pool.zt.hu [185.221.143.114]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 105EB2D9 for ; Mon, 19 Jan 2026 11:20:14 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1768818014; bh=Nw+F3Q+/BSe/nbe4wHSXMSFKbRnDFnWgAsga1PZvnIo=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Hjyd1aMjSEnllAy/gUUFWHbLDhtN8iL4wLcn9te7NjaY4dPxzY2DizD47eO/BSrX/ Rw6+w8K+rya/744BNk8sbEoVIJlqJZaafpXfUlwtx+5MUDH7ZVwI3eY6JyuxokuyY9 yLuSuQxSsvAUvP3iF0xyC/myQNaKdli0s7fuFvRE= From: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= To: libcamera-devel@lists.libcamera.org Subject: [libcamera-ci] [RFC PATCH v1 4/5] Add job to run lc-compliance via lava Date: Mon, 19 Jan 2026 11:20:38 +0100 Message-ID: <20260119102039.3521673-5-barnabas.pocze@ideasonboard.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119102039.3521673-1-barnabas.pocze@ideasonboard.com> References: <20260119102039.3521673-1-barnabas.pocze@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add a job that runs lc-compliance via lava on real hardware. Signed-off-by: Barnabás Pőcze --- .../opt/test-libcamera.sh | 18 +++++++++ .gitlab-ci/on-device-testing/lava-debix-a.yml | 40 +++++++++++++++++++ gitlab-ci.yml | 39 +++++++++++++++++- 3 files changed, 96 insertions(+), 1 deletion(-) create mode 100755 .gitlab-ci/debian-rootfs-overlay/opt/test-libcamera.sh create mode 100644 .gitlab-ci/on-device-testing/lava-debix-a.yml -- 2.52.0 diff --git a/.gitlab-ci/debian-rootfs-overlay/opt/test-libcamera.sh b/.gitlab-ci/debian-rootfs-overlay/opt/test-libcamera.sh new file mode 100755 index 0000000..85574f1 --- /dev/null +++ b/.gitlab-ci/debian-rootfs-overlay/opt/test-libcamera.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -ex + +pkg_source="$1" +camera_id="$2" + +trap 'rm -rf /tmp/libcamera.deb' EXIT +curl --retry 3 -f -o /tmp/libcamera.deb -- "$pkg_source" +dpkg -i /tmp/libcamera.deb +rm -rf /tmp/libcamera.deb + +env \ + LIBCAMERA_LOG_COLOR=no \ + GTEST_COLOR=no \ + ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 \ + UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 \ + lc-compliance -c "$camera_id" diff --git a/.gitlab-ci/on-device-testing/lava-debix-a.yml b/.gitlab-ci/on-device-testing/lava-debix-a.yml new file mode 100644 index 0000000..4a9b9b6 --- /dev/null +++ b/.gitlab-ci/on-device-testing/lava-debix-a.yml @@ -0,0 +1,40 @@ +device_type: debix-a +job_name: debix-a lc-compliance test + +timeouts: + job: + minutes: 30 + action: + minutes: 5 + connection: + minutes: 6 +priority: medium +visibility: public + +actions: +- boot: + method: minimal + timeout: + minutes: 6 + auto_login: + login_prompt: 'boot2container login:' + username: "root" + password_prompt: "Password:" + password: "root" + prompts: [":~#"] +- test: + interactive: + - name: lc-compliance + prompts: [":~#"] + echo: discard + script: + - command: >- + /opt/test-libcamera.sh + "{{ job.LIBCAMERA_DEB_URL }}" + /base/soc@0/bus@30800000/i2c@30a30000/camera@10 + && echo "lc-compliance test passed" + || echo "lc-compliance test failed" + successes: + - message: "lc-compliance test passed" + failures: + - message: "lc-compliance test failed" diff --git a/gitlab-ci.yml b/gitlab-ci.yml index 36032e3..8f670f7 100644 --- a/gitlab-ci.yml +++ b/gitlab-ci.yml @@ -76,7 +76,7 @@ include: .debian-cross-build: variables: CROSS_BUILD_DISTRIBUTION_VERSION: 'trixie' - CROSS_BUILD_TAG: '2026-01-09.0' + CROSS_BUILD_TAG: '2026-01-12.0' CROSS_BUILD_IMAGE: 'on-device-testing/debian-rootfs' .debian-cross-build-architectures: @@ -452,12 +452,15 @@ build-debian-cross: --name libcamera --description "$CI_COMMIT_SHA (job $CI_JOB_ID, pipeline $CI_PIPELINE_ID, project $CI_PROJECT_PATH)" --version "0.0.0" + - echo "LIBCAMERA_DEB_URL=$CI_API_V4_URL/projects/$CI_PROJECT_ID/jobs/$CI_JOB_ID/artifacts/libcamera.deb" >> env artifacts: expire_in: 1w paths: - build/meson-logs/ - build/build.ninja - "*.deb" + reports: + dotenv: env build-debian-rootfs: extends: @@ -478,6 +481,25 @@ build-debian-rootfs: "$ARCH" "$CROSS_BUILD_IMAGE" "$CROSS_BUILD_TAG-$ARCH" + $CI_PROJECT_DIR/.gitlab-ci/debian-rootfs-overlay + +lava-jobs-as-artifacts: + extends: + - .fdo.distribution-image@debian + - .container-build-debian-rootfs + - .libcamera-ci.scripts + stage: build + needs: + - job: container-build-debian-rootfs + artifacts: false + variables: + GIT_STRATEGY: none + script: + - echo "saving lava job definitions as artifacts for lava-gitlab-runner" + artifacts: + expire_in: 1w + paths: + - $CI_PROJECT_DIR/.gitlab-ci/on-device-testing/lava-* # ------------------------------------------------------------------------------ # Lint stage - Run checkstyle.py and check merge suitability @@ -581,3 +603,18 @@ test-lc-compliance:virtual: artifacts: reports: junit: build/lc-compliance-report.xml + +test-lc-compliance:rkisp1:debix-a: + stage: test + needs: + - job: lava-jobs-as-artifacts + artifacts: true + - job: build-debian-cross + artifacts: true + parallel: + matrix: + - ARCH: ["arm64"] + tags: + - libcamera-lava + script: + - submit .gitlab-ci/on-device-testing/lava-debix-a.yml From patchwork Mon Jan 19 10:20:39 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= X-Patchwork-Id: 25844 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 83B97C32EA for ; Mon, 19 Jan 2026 10:20:52 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 82FDB61FC6; Mon, 19 Jan 2026 11:20:50 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="iXdLWHea"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 7EDFE61FC0 for ; Mon, 19 Jan 2026 11:20:44 +0100 (CET) Received: from pb-laptop.local (185.221.143.114.nat.pool.zt.hu [185.221.143.114]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 41088BE1 for ; Mon, 19 Jan 2026 11:20:14 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1768818014; bh=h66B9zXVpHEg/MPGuwkeF/6Cl4uDLm1FlbpKEyjHe80=; h=From:To:Subject:Date:In-Reply-To:References:From; b=iXdLWHeanKMui8R45ui2vO4Fh8Gih6LgBC3/rQ6K5CXDK4zT4yqR98ChOsi80can5 mI1Lc3UQ6mQq2Ze1I84wJwF5YC5ki9Few4xU/H1Dyz6GIRiT/pq7ok3gGm/CQlyEAe 6qd+XdThaUotysUUPkeUAVdGGlh0obPWTfPKq6ag= From: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= To: libcamera-devel@lists.libcamera.org Subject: [libcamera-ci] [RFC PATCH v1 5/5] Guard jobs required for hardware testing Date: Mon, 19 Jan 2026 11:20:39 +0100 Message-ID: <20260119102039.3521673-6-barnabas.pocze@ideasonboard.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119102039.3521673-1-barnabas.pocze@ideasonboard.com> References: <20260119102039.3521673-1-barnabas.pocze@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Use manually triggered jobs. Signed-off-by: Barnabás Pőcze --- gitlab-ci.yml | 9 +++++++++ 1 file changed, 9 insertions(+) -- 2.52.0 diff --git a/gitlab-ci.yml b/gitlab-ci.yml index 8f670f7..40a42f0 100644 --- a/gitlab-ci.yml +++ b/gitlab-ci.yml @@ -58,6 +58,10 @@ include: ref: *templates_sha file: '/templates/debian.yml' +.on-device-testing-guard: + rules: + - when: manual + .libcamera-ci.debian:11: variables: FDO_DISTRIBUTION_VERSION: 'bullseye' @@ -421,6 +425,7 @@ build-debian-cross: - .fdo.distribution-image@debian - .debian-cross-build - .debian-cross-build-architectures + - .on-device-testing-guard stage: build needs: - job: container-build-debian-cross @@ -469,6 +474,7 @@ build-debian-rootfs: - .debian-cross-build - .debian-cross-build-architectures - .libcamera-ci.scripts + - .on-device-testing-guard stage: build needs: - job: container-build-debian-rootfs @@ -488,6 +494,7 @@ lava-jobs-as-artifacts: - .fdo.distribution-image@debian - .container-build-debian-rootfs - .libcamera-ci.scripts + - .on-device-testing-guard stage: build needs: - job: container-build-debian-rootfs @@ -605,6 +612,8 @@ test-lc-compliance:virtual: junit: build/lc-compliance-report.xml test-lc-compliance:rkisp1:debix-a: + extends: + - .on-device-testing-guard stage: test needs: - job: lava-jobs-as-artifacts