[libcamera-ci,RFC,v1,4/5] Add job to run lc-compliance via lava
diff mbox series

Message ID 20260119102039.3521673-5-barnabas.pocze@ideasonboard.com
State New
Headers show
Series
  • on-device-testing proof of concept
Related show

Commit Message

Barnabás Pőcze Jan. 19, 2026, 10:20 a.m. UTC
Add a job that runs lc-compliance via lava on real hardware.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
 .../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

Patch
diff mbox series

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