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

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

Commit Message

Barnabás Pőcze Jan. 30, 2026, 4:02 p.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>
---
 .gitlab-ci/on-device-testing/lava-debix-a.yml | 40 +++++++++++++++++++
 gitlab-ci.yml                                 | 36 +++++++++++++++++
 2 files changed, 76 insertions(+)
 create mode 100644 .gitlab-ci/on-device-testing/lava-debix-a.yml

--
2.52.0

Comments

Jacopo Mondi Feb. 4, 2026, 9:36 a.m. UTC | #1
Hi Barnabás

On Fri, Jan 30, 2026 at 05:02:52PM +0100, Barnabás Pőcze wrote:
> Add a job that runs lc-compliance via lava on real hardware.
>
> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> ---
>  .gitlab-ci/on-device-testing/lava-debix-a.yml | 40 +++++++++++++++++++
>  gitlab-ci.yml                                 | 36 +++++++++++++++++
>  2 files changed, 76 insertions(+)
>  create mode 100644 .gitlab-ci/on-device-testing/lava-debix-a.yml
>
> 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 66f4b5b..37ffc58 100644
> --- a/gitlab-ci.yml
> +++ b/gitlab-ci.yml
> @@ -355,6 +355,7 @@ build-deb-for-lc-compliance-testing:
>          --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:
>      when: always
>      expire_in: 1 week
> @@ -362,11 +363,30 @@ build-deb-for-lc-compliance-testing:
>        - build/meson-logs/
>        - build/build.ninja
>        - "*.deb"
> +    reports:
> +      dotenv: env
>    parallel:
>      matrix:
>        - ARCH:
>          - arm64
>
> +lava-jobs-as-artifacts:
> +  extends:
> +    - .fdo.distribution-image@debian
> +    - .libcamera-ci.debian:13
> +    - .libcamera-ci.scripts
> +  stage: build
> +  needs:
> +    - job: container-debian:13
> +      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-*

Looking at how we did it with Soraka
https://gitlab.freedesktop.org/camera/libcamera-ci/-/commit/c3a6d616470f577abd01fb2fc2ecd6caf877e0e9

I wonder the lava job can't be added as an artifact to the job that
builds the .deb ? The only reason is to avoid spawning a container
just to save an artifact. Is it a valid concern ?

>
>  # ------------------------------------------------------------------------------
>  # Lint stage - Run checkstyle.py and check merge suitability
> @@ -470,3 +490,19 @@ 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-deb-for-lc-compliance-testing
> +      artifacts: true
> +      parallel:
> +        matrix:
> +          - ARCH:
> +            - arm64
> +  tags:
> +    - libcamera-lava
> +  script:
> +    - submit .gitlab-ci/on-device-testing/lava-debix-a.yml
> --
> 2.52.0
Barnabás Pőcze Feb. 9, 2026, 10:13 a.m. UTC | #2
2026. 02. 04. 10:36 keltezéssel, Jacopo Mondi írta:
> Hi Barnabás
> 
> On Fri, Jan 30, 2026 at 05:02:52PM +0100, Barnabás Pőcze wrote:
>> Add a job that runs lc-compliance via lava on real hardware.
>>
>> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
>> ---
>>   .gitlab-ci/on-device-testing/lava-debix-a.yml | 40 +++++++++++++++++++
>>   gitlab-ci.yml                                 | 36 +++++++++++++++++
>>   2 files changed, 76 insertions(+)
>>   create mode 100644 .gitlab-ci/on-device-testing/lava-debix-a.yml
>>
>> 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 66f4b5b..37ffc58 100644
>> --- a/gitlab-ci.yml
>> +++ b/gitlab-ci.yml
>> @@ -355,6 +355,7 @@ build-deb-for-lc-compliance-testing:
>>           --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:
>>       when: always
>>       expire_in: 1 week
>> @@ -362,11 +363,30 @@ build-deb-for-lc-compliance-testing:
>>         - build/meson-logs/
>>         - build/build.ninja
>>         - "*.deb"
>> +    reports:
>> +      dotenv: env
>>     parallel:
>>       matrix:
>>         - ARCH:
>>           - arm64
>>
>> +lava-jobs-as-artifacts:
>> +  extends:
>> +    - .fdo.distribution-image@debian
>> +    - .libcamera-ci.debian:13
>> +    - .libcamera-ci.scripts
>> +  stage: build
>> +  needs:
>> +    - job: container-debian:13
>> +      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-*
> 
> Looking at how we did it with Soraka
> https://gitlab.freedesktop.org/camera/libcamera-ci/-/commit/c3a6d616470f577abd01fb2fc2ecd6caf877e0e9
> 
> I wonder the lava job can't be added as an artifact to the job that
> builds the .deb ? The only reason is to avoid spawning a container
> just to save an artifact. Is it a valid concern ?

I think I did it like this to avoid having to download the deb archive to
lava-gitlab-runner. But it turns out that is unavoidable. I will change it
so that the build job has the lava files as artifacts.



> 
>>
>>   # ------------------------------------------------------------------------------
>>   # Lint stage - Run checkstyle.py and check merge suitability
>> @@ -470,3 +490,19 @@ 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-deb-for-lc-compliance-testing
>> +      artifacts: true
>> +      parallel:
>> +        matrix:
>> +          - ARCH:
>> +            - arm64
>> +  tags:
>> +    - libcamera-lava
>> +  script:
>> +    - submit .gitlab-ci/on-device-testing/lava-debix-a.yml
>> --
>> 2.52.0

Patch
diff mbox series

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 66f4b5b..37ffc58 100644
--- a/gitlab-ci.yml
+++ b/gitlab-ci.yml
@@ -355,6 +355,7 @@  build-deb-for-lc-compliance-testing:
         --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:
     when: always
     expire_in: 1 week
@@ -362,11 +363,30 @@  build-deb-for-lc-compliance-testing:
       - build/meson-logs/
       - build/build.ninja
       - "*.deb"
+    reports:
+      dotenv: env
   parallel:
     matrix:
       - ARCH:
         - arm64

+lava-jobs-as-artifacts:
+  extends:
+    - .fdo.distribution-image@debian
+    - .libcamera-ci.debian:13
+    - .libcamera-ci.scripts
+  stage: build
+  needs:
+    - job: container-debian:13
+      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
@@ -470,3 +490,19 @@  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-deb-for-lc-compliance-testing
+      artifacts: true
+      parallel:
+        matrix:
+          - ARCH:
+            - arm64
+  tags:
+    - libcamera-lava
+  script:
+    - submit .gitlab-ci/on-device-testing/lava-debix-a.yml