{"id":25839,"url":"https://patchwork.libcamera.org/api/1.1/covers/25839/?format=json","web_url":"https://patchwork.libcamera.org/cover/25839/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20260119102039.3521673-1-barnabas.pocze@ideasonboard.com>","date":"2026-01-19T10:20:34","name":"[libcamera-ci,RFC,v1,0/5] on-device-testing proof of concept","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/1.1/people/216/?format=json","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"mbox":"https://patchwork.libcamera.org/cover/25839/mbox/","series":[{"id":5715,"url":"https://patchwork.libcamera.org/api/1.1/series/5715/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5715","date":"2026-01-19T10:20:34","name":"on-device-testing proof of concept","version":1,"mbox":"https://patchwork.libcamera.org/series/5715/mbox/"}],"comments":"https://patchwork.libcamera.org/api/covers/25839/comments/","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id C93A0C3220\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 19 Jan 2026 10:20:46 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EF86461FCC;\n\tMon, 19 Jan 2026 11:20:45 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B5D0961F9F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 19 Jan 2026 11:20:43 +0100 (CET)","from pb-laptop.local (185.221.143.114.nat.pool.zt.hu\n\t[185.221.143.114])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 3BC732D9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 19 Jan 2026 11:20:13 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"DDoXreJy\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1768818013;\n\tbh=PNpm9cXM/u4M+Dk42fVqH++iGCBmtBHHQnQxEJ3tPMM=;\n\th=From:To:Subject:Date:From;\n\tb=DDoXreJyl0klfeLyqMBtDKxb1Lrv6e0bq0rnCyJseFwU6eAK0khaKF+rDii/w+lMp\n\t3bR+jow7d8I74d+pnY//Fv5Upztjywi5PctFdlnOS0BOag0XHNy2F4lga41CFTc20G\n\tKhUAlRugPEV4D1m4sRELWeHwN1k4UuSJo8Lq6Pms=","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Subject":"[libcamera-ci] [RFC PATCH v1 0/5] on-device-testing proof of concept","Date":"Mon, 19 Jan 2026 11:20:34 +0100","Message-ID":"<20260119102039.3521673-1-barnabas.pocze@ideasonboard.com>","X-Mailer":"git-send-email 2.52.0","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"This adds the necessary gitlab parts for running lc-compliance via\nlava on a \"real\" device, specifically a debix-a board with an imx219\nsensor.\n\nThere are three parts to the process:\n\n1. libcamera is cross-compiled to the target architecture.\n   This uses a separate container, and does not use setup-container.sh.\n\n2. A debian root file system is built, appropriate for running\n   libcamera as compiled in (1).\n\n3. LAVA job is submitted to the lava worker to run `test-libcamera.sh`\n   on the device.\n\nCouple points:\n\n1. While building debian root filesystem is integrated in the pipeline,\n   manual intervention is needed. It must be uploaded to the lava worker's\n   local container registry. Either one has to build the image locally\n   or pull it from the gitlab container registry; and then upload it to the\n   local registry. Specifying which container image the device should use is\n   not implemented at the moment, it is hard-coded on the device itself.\n   The jobs are triggered manually, so this is conveniently doable before\n   the actual testing starts.\n\n   Nonetheless I think be very nice if this could be fully automatic.\n\n2. The cross compilation and rootfs generation both use their own separate containers,\n   and separate setup processes not integrated with setup-container.sh. To be honest\n   I find that whole mechanism is a unfortunate, I feel like it already multiplexes\n   too many things.\n\n3. lava-gitlab-runner can only use files from artifacts and not from\n   the repository (https://github.com/collabora/lava-gitlab-runner/issues/16),\n   so there is a job `lava-jobs-as-artifacts` for that. Although even if it\n   could, the libcamera ci definitions are in a separate repository, so that\n   would most likely still not work.\n\n4. The cross compilation jobs saves the url of the debian package artifact\n   in a `dotenv` artifact report, for lava-gitlab-runner to access it, and for\n   it to be accessible on the device to download and install the package.\n\n   This is needed because there does not appear to be a way to download job\n   artifacts based on the (pipeline id, job name) tuple, same applies to getting\n   the job id from another job. At least without more complex use of the gitlab api.\n\n   But this means that the lava job must get the artifacts from the cross compilation\n   job, which unfortunately means downloading the deb package unnecessarily.\n\n5. The camera id is hard-coded in the lava job definition. Maybe it could be better\n   to extend lc-compliance to support camera indices.\n\nBarnabás Pőcze (5):\n  Add job to generate container for cross compilation\n  Add job to build deb package for libcamera\n  Add job to build debian rootfs\n  Add job to run lc-compliance via lava\n  Guard jobs required for hardware testing\n\n .gitlab-ci/build-debian-rootfs.sh             |  79 ++++++++\n .../opt/test-libcamera.sh                     |  18 ++\n .gitlab-ci/on-device-testing/lava-debix-a.yml |  40 ++++\n .gitlab-ci/setup-debian-cross-container.sh    |  45 +++++\n gitlab-ci.yml                                 | 180 ++++++++++++++++++\n 5 files changed, 362 insertions(+)\n create mode 100755 .gitlab-ci/build-debian-rootfs.sh\n create mode 100755 .gitlab-ci/debian-rootfs-overlay/opt/test-libcamera.sh\n create mode 100644 .gitlab-ci/on-device-testing/lava-debix-a.yml\n create mode 100755 .gitlab-ci/setup-debian-cross-container.sh\n\n--\n2.52.0"}