[{"id":33296,"web_url":"https://patchwork.libcamera.org/comment/33296/","msgid":"<kysl2fbymdt6jmz25nw7zpptdm3o5jcwwhydsjcimed33zaf5q@kvycnmpoaufo>","date":"2025-02-05T10:48:00","subject":"Re: [libcamera-ci] [RFC PATCH v4] Add job to run lc-compliance on\n\tthe virtual pipeline handler","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Barnabás\n\nOn Thu, Dec 19, 2024 at 02:09:32PM +0100, Barnabás Pőcze wrote:\n> Add a new job named `test-lc-compliance:virtual` that uses the\n> build artifacts created by the `build-package:debug` job\n> on amd64 to run `lc-compliance` on the \"Virtual0\" camera\n> in a virtual machine.\n>\n> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> ---\n> This needs libcamera changes to work and to run in reasonable time:\n>   * https://patchwork.libcamera.org/project/libcamera/list/?series=4874\n>   * https://patchwork.libcamera.org/patch/22379/\n>   * https://patchwork.libcamera.org/patch/22406/\n\nSeems like all the pre-requisites have now been merged.\n\nI'm not that fluent in gitlab CI lingo, but this seems correct to me\n\nAcked-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nThanks\n  j\n>\n> Changes in v4:\n>   * add `set -x` to see the full commands run inside the virtual machine\n>   * activate installed example configuration of the virtual pipeline handler\n>\n> Changes in v2:\n>   * publish lc-compliance results to gitlab\n>   * add and use script to install libcamera binary package\n> ---\n>  .gitlab-ci/test-lc-compliance.sh  | 40 +++++++++++++++++++++++++++++++\n>  .gitlab-ci/unpackage-libcamera.sh | 17 +++++++++++++\n>  gitlab-ci.yml                     | 22 ++++++++++++++++-\n>  3 files changed, 78 insertions(+), 1 deletion(-)\n>  create mode 100755 .gitlab-ci/test-lc-compliance.sh\n>  create mode 100755 .gitlab-ci/unpackage-libcamera.sh\n>\n> diff --git a/.gitlab-ci/test-lc-compliance.sh b/.gitlab-ci/test-lc-compliance.sh\n> new file mode 100755\n> index 0000000..6208723\n> --- /dev/null\n> +++ b/.gitlab-ci/test-lc-compliance.sh\n> @@ -0,0 +1,40 @@\n> +#!/bin/bash\n> +\n> +# SPDX-License-Identifier: GPL-2.0-or-later\n> +# SPDX-FileCopyrightText: © 2024 Google Inc.\n> +\n> +set -e\n> +\n> +source \"$(dirname \"$0\")/lib.sh\"\n> +\n> +libcamera_compliance() {\n> +\techo \"Running libcamera compliance tests in a qemu VM\"\n> +\n> +\tvirtme-ng \\\n> +\t\t--verbose \\\n> +\t\t--skip-modules \\\n> +\t\t--force-9p \\\n> +\t\t--rwdir \"$PWD/build\" \\\n> +\t\t--run /opt/linux/bzImage \\\n> +\t\t--exec \" \\\n> +\t\t\tset -x; \\\n> +\t\t\tmv /usr/local/share/libcamera/pipeline/virtual/virtual.yaml.example \\\n> +\t\t\t   /usr/local/share/libcamera/pipeline/virtual/virtual.yaml; \\\n> +\t\t\tLIBCAMERA_LOG_LEVELS=*:DEBUG \\\n> +\t\t\tASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 \\\n> +\t\t\tUBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 \\\n> +\t\t\tGTEST_OUTPUT=xml:./build/lc-compliance-report.xml \\\n> +\t\t\tlc-compliance -c Virtual0; \\\n> +\t\t\techo \\\\\\$? > ./build/.test-status; \\\n> +\t\t\"\n> +\n> +\tlocal status=$(cat build/.test-status)\n> +\techo \"Test result exit state: $status\"\n> +\trm build/.test-status\n> +\n> +\tif [[ $status != 0 ]] ; then\n> +\t\texit $status\n> +\tfi\n> +}\n> +\n> +run libcamera_compliance\n> diff --git a/.gitlab-ci/unpackage-libcamera.sh b/.gitlab-ci/unpackage-libcamera.sh\n> new file mode 100755\n> index 0000000..9eb3192\n> --- /dev/null\n> +++ b/.gitlab-ci/unpackage-libcamera.sh\n> @@ -0,0 +1,17 @@\n> +#!/bin/bash\n> +\n> +# SPDX-License-Identifier: GPL-2.0-or-later\n> +# SPDX-FileCopyrightText: © 2024 Google Inc.\n> +\n> +set -e\n> +\n> +source \"$(dirname \"$0\")/lib.sh\"\n> +\n> +libcamera_unpackage() {\n> +\techo \"Unpackage libcamera binaries\"\n> +\n> +\ttar -xvf libcamera-${CI_COMMIT_SHA}.tar.xz -C /\n> +\tldconfig -v\n> +}\n> +\n> +run libcamera_unpackage\n> diff --git a/gitlab-ci.yml b/gitlab-ci.yml\n> index d268285..ec19f55 100644\n> --- a/gitlab-ci.yml\n> +++ b/gitlab-ci.yml\n> @@ -280,7 +280,7 @@ build-package:debug:\n>        -D b_sanitize=address,undefined\n>        -D cpp_debugstl=true\n>        -D force_fallback_for=['gtest']\n> -      -D pipelines=['auto']\n> +      -D pipelines=['auto','virtual']\n>        -D auto_features=disabled\n>        -D lc-compliance=enabled\n>        -D test=false\n> @@ -411,3 +411,23 @@ test-unit:\n>    artifacts:\n>      reports:\n>        junit: build/meson-logs/testlog.junit.xml\n> +\n> +test-lc-compliance:virtual:\n> +  extends:\n> +    - .fdo.distribution-image@debian\n> +    - .libcamera-ci.debian:12\n> +    - .libcamera-ci.scripts\n> +  stage: test\n> +  needs:\n> +    - job: build-package:debug\n> +      parallel:\n> +        matrix:\n> +          - ARCH: amd64\n> +  tags:\n> +    - kvm\n> +  script:\n> +    - $CI_PROJECT_DIR/.gitlab-ci/unpackage-libcamera.sh\n> +    - $CI_PROJECT_DIR/.gitlab-ci/test-lc-compliance.sh\n> +  artifacts:\n> +    reports:\n> +      junit: build/lc-compliance-report.xml\n> --\n> 2.47.1","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 89BBAC0F2A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  5 Feb 2025 10:48:07 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 45B35685C6;\n\tWed,  5 Feb 2025 11:48:06 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id DC9F668559\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  5 Feb 2025 11:48:03 +0100 (CET)","from ideasonboard.com (93-46-82-201.ip106.fastwebnet.it\n\t[93.46.82.201])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id F10037E0;\n\tWed,  5 Feb 2025 11:46:50 +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=\"TWzYtuHB\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1738752411;\n\tbh=2L6rIMJBn41pI5wWZmKQUgef3Wl2zA9GFCHm0bZ25Nw=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=TWzYtuHByCaDGACE7ZQdOzFqZdNqUWr7ZLjXMWAhjZV5zioL/4OPdN6E+bn+4BW1D\n\t1pY0WWc/C+Cf2Al93F5omPhFmgNkgUnO8jpUcWVyl7DQ8G4sS3Qwql7nPG/lhA8+Pe\n\tEzcH3KaTa1bcNpvf3Hh39mZkqcQRSWeIwpr2Rdi0=","Date":"Wed, 5 Feb 2025 11:48:00 +0100","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [libcamera-ci] [RFC PATCH v4] Add job to run lc-compliance on\n\tthe virtual pipeline handler","Message-ID":"<kysl2fbymdt6jmz25nw7zpptdm3o5jcwwhydsjcimed33zaf5q@kvycnmpoaufo>","References":"<20241219130932.520066-1-barnabas.pocze@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20241219130932.520066-1-barnabas.pocze@ideasonboard.com>","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>"}},{"id":33298,"web_url":"https://patchwork.libcamera.org/comment/33298/","msgid":"<20250205123434.GA31506@pendragon.ideasonboard.com>","date":"2025-02-05T12:34:34","subject":"Re: [libcamera-ci] [RFC PATCH v4] Add job to run lc-compliance on\n\tthe virtual pipeline handler","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Barnabás,\n\nThank you for the patch.\n\nOn Thu, Dec 19, 2024 at 02:09:32PM +0100, Barnabás Pőcze wrote:\n> Add a new job named `test-lc-compliance:virtual` that uses the\n> build artifacts created by the `build-package:debug` job\n> on amd64 to run `lc-compliance` on the \"Virtual0\" camera\n> in a virtual machine.\n> \n> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> ---\n> This needs libcamera changes to work and to run in reasonable time:\n>   * https://patchwork.libcamera.org/project/libcamera/list/?series=4874\n>   * https://patchwork.libcamera.org/patch/22379/\n>   * https://patchwork.libcamera.org/patch/22406/\n> \n> Changes in v4:\n>   * add `set -x` to see the full commands run inside the virtual machine\n>   * activate installed example configuration of the virtual pipeline handler\n> \n> Changes in v2:\n>   * publish lc-compliance results to gitlab\n>   * add and use script to install libcamera binary package\n> ---\n>  .gitlab-ci/test-lc-compliance.sh  | 40 +++++++++++++++++++++++++++++++\n>  .gitlab-ci/unpackage-libcamera.sh | 17 +++++++++++++\n>  gitlab-ci.yml                     | 22 ++++++++++++++++-\n>  3 files changed, 78 insertions(+), 1 deletion(-)\n>  create mode 100755 .gitlab-ci/test-lc-compliance.sh\n>  create mode 100755 .gitlab-ci/unpackage-libcamera.sh\n> \n> diff --git a/.gitlab-ci/test-lc-compliance.sh b/.gitlab-ci/test-lc-compliance.sh\n> new file mode 100755\n> index 0000000..6208723\n> --- /dev/null\n> +++ b/.gitlab-ci/test-lc-compliance.sh\n> @@ -0,0 +1,40 @@\n> +#!/bin/bash\n> +\n> +# SPDX-License-Identifier: GPL-2.0-or-later\n> +# SPDX-FileCopyrightText: © 2024 Google Inc.\n> +\n> +set -e\n> +\n> +source \"$(dirname \"$0\")/lib.sh\"\n> +\n> +libcamera_compliance() {\n> +\techo \"Running libcamera compliance tests in a qemu VM\"\n> +\n> +\tvirtme-ng \\\n> +\t\t--verbose \\\n> +\t\t--skip-modules \\\n> +\t\t--force-9p \\\n> +\t\t--rwdir \"$PWD/build\" \\\n> +\t\t--run /opt/linux/bzImage \\\n> +\t\t--exec \" \\\n> +\t\t\tset -x; \\\n> +\t\t\tmv /usr/local/share/libcamera/pipeline/virtual/virtual.yaml.example \\\n> +\t\t\t   /usr/local/share/libcamera/pipeline/virtual/virtual.yaml; \\\n> +\t\t\tLIBCAMERA_LOG_LEVELS=*:DEBUG \\\n> +\t\t\tASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 \\\n> +\t\t\tUBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 \\\n> +\t\t\tGTEST_OUTPUT=xml:./build/lc-compliance-report.xml \\\n> +\t\t\tlc-compliance -c Virtual0; \\\n> +\t\t\techo \\\\\\$? > ./build/.test-status; \\\n> +\t\t\"\n> +\n> +\tlocal status=$(cat build/.test-status)\n> +\techo \"Test result exit state: $status\"\n> +\trm build/.test-status\n> +\n> +\tif [[ $status != 0 ]] ; then\n> +\t\texit $status\n> +\tfi\n> +}\n> +\n> +run libcamera_compliance\n> diff --git a/.gitlab-ci/unpackage-libcamera.sh b/.gitlab-ci/unpackage-libcamera.sh\n> new file mode 100755\n> index 0000000..9eb3192\n> --- /dev/null\n> +++ b/.gitlab-ci/unpackage-libcamera.sh\n> @@ -0,0 +1,17 @@\n> +#!/bin/bash\n> +\n> +# SPDX-License-Identifier: GPL-2.0-or-later\n> +# SPDX-FileCopyrightText: © 2024 Google Inc.\n> +\n> +set -e\n> +\n> +source \"$(dirname \"$0\")/lib.sh\"\n> +\n> +libcamera_unpackage() {\n> +\techo \"Unpackage libcamera binaries\"\n> +\n> +\ttar -xvf libcamera-${CI_COMMIT_SHA}.tar.xz -C /\n> +\tldconfig -v\n> +}\n> +\n> +run libcamera_unpackage\n> diff --git a/gitlab-ci.yml b/gitlab-ci.yml\n> index d268285..ec19f55 100644\n> --- a/gitlab-ci.yml\n> +++ b/gitlab-ci.yml\n> @@ -280,7 +280,7 @@ build-package:debug:\n>        -D b_sanitize=address,undefined\n>        -D cpp_debugstl=true\n>        -D force_fallback_for=['gtest']\n> -      -D pipelines=['auto']\n> +      -D pipelines=['auto','virtual']\n>        -D auto_features=disabled\n>        -D lc-compliance=enabled\n>        -D test=false\n> @@ -411,3 +411,23 @@ test-unit:\n>    artifacts:\n>      reports:\n>        junit: build/meson-logs/testlog.junit.xml\n> +\n> +test-lc-compliance:virtual:\n> +  extends:\n> +    - .fdo.distribution-image@debian\n> +    - .libcamera-ci.debian:12\n> +    - .libcamera-ci.scripts\n> +  stage: test\n> +  needs:\n> +    - job: build-package:debug\n> +      parallel:\n> +        matrix:\n> +          - ARCH: amd64\n\nShould we add\n\n    - job: container-debian:12\n      artifacts: false\n\nhere ? I know build-package:debug depends on it, but I think it's a good\npractice to have an explicit dependency on the container needed to run\nthis job.\n\nThe rest looks good, so\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nIf you agree with the comment I can add the dependency when applying the\npatch, there's no need to resubmit.\n\n> +  tags:\n> +    - kvm\n> +  script:\n> +    - $CI_PROJECT_DIR/.gitlab-ci/unpackage-libcamera.sh\n> +    - $CI_PROJECT_DIR/.gitlab-ci/test-lc-compliance.sh\n> +  artifacts:\n> +    reports:\n> +      junit: build/lc-compliance-report.xml","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 37E66C0F2A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  5 Feb 2025 12:34:41 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 66E1F685C0;\n\tWed,  5 Feb 2025 13:34:40 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 75A846053F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  5 Feb 2025 13:34:39 +0100 (CET)","from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 5937E250;\n\tWed,  5 Feb 2025 13:33:26 +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=\"s95NN7eZ\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1738758806;\n\tbh=8gr1dHgKd1REqn66CCCVadz3SbLbt45pScjNuS5xyjU=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=s95NN7eZxqJkkG20uF13CZ2hYlRmlUV9UqbZ+dQaR2uR84dzQxIAlh+1NLdlASIqV\n\t57BXGStv0FLBZxIJ0OGi0g1b5Ue2UIi7N2dSyBl7+qf/wHBABKJnxLwdWna4hEEWyT\n\tmeuNzQOLwts3sE7tQsT7CaPcxauqjzF7sH+tkvk8=","Date":"Wed, 5 Feb 2025 14:34:34 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [libcamera-ci] [RFC PATCH v4] Add job to run lc-compliance on\n\tthe virtual pipeline handler","Message-ID":"<20250205123434.GA31506@pendragon.ideasonboard.com>","References":"<20241219130932.520066-1-barnabas.pocze@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20241219130932.520066-1-barnabas.pocze@ideasonboard.com>","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>"}},{"id":33299,"web_url":"https://patchwork.libcamera.org/comment/33299/","msgid":"<7f57dc61-8c0b-42a4-a1a1-47a9f91c9221@ideasonboard.com>","date":"2025-02-05T13:07:46","subject":"Re: [libcamera-ci] [RFC PATCH v4] Add job to run lc-compliance on\n\tthe virtual pipeline handler","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"2025. 02. 05. 13:34 keltezéssel, Laurent Pinchart írta:\n\n> Hi Barnabás,\n> \n> Thank you for the patch.\n> \n> On Thu, Dec 19, 2024 at 02:09:32PM +0100, Barnabás Pőcze wrote:\n>> Add a new job named `test-lc-compliance:virtual` that uses the\n>> build artifacts created by the `build-package:debug` job\n>> on amd64 to run `lc-compliance` on the \"Virtual0\" camera\n>> in a virtual machine.\n>>\n>> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n>> ---\n>> This needs libcamera changes to work and to run in reasonable time:\n>>    * https://patchwork.libcamera.org/project/libcamera/list/?series=4874\n>>    * https://patchwork.libcamera.org/patch/22379/\n>>    * https://patchwork.libcamera.org/patch/22406/\n>>\n>> Changes in v4:\n>>    * add `set -x` to see the full commands run inside the virtual machine\n>>    * activate installed example configuration of the virtual pipeline handler\n>>\n>> Changes in v2:\n>>    * publish lc-compliance results to gitlab\n>>    * add and use script to install libcamera binary package\n>> ---\n>>   .gitlab-ci/test-lc-compliance.sh  | 40 +++++++++++++++++++++++++++++++\n>>   .gitlab-ci/unpackage-libcamera.sh | 17 +++++++++++++\n>>   gitlab-ci.yml                     | 22 ++++++++++++++++-\n>>   3 files changed, 78 insertions(+), 1 deletion(-)\n>>   create mode 100755 .gitlab-ci/test-lc-compliance.sh\n>>   create mode 100755 .gitlab-ci/unpackage-libcamera.sh\n>>\n>> diff --git a/.gitlab-ci/test-lc-compliance.sh b/.gitlab-ci/test-lc-compliance.sh\n>> new file mode 100755\n>> index 0000000..6208723\n>> --- /dev/null\n>> +++ b/.gitlab-ci/test-lc-compliance.sh\n>> @@ -0,0 +1,40 @@\n>> +#!/bin/bash\n>> +\n>> +# SPDX-License-Identifier: GPL-2.0-or-later\n>> +# SPDX-FileCopyrightText: © 2024 Google Inc.\n>> +\n>> +set -e\n>> +\n>> +source \"$(dirname \"$0\")/lib.sh\"\n>> +\n>> +libcamera_compliance() {\n>> +\techo \"Running libcamera compliance tests in a qemu VM\"\n>> +\n>> +\tvirtme-ng \\\n>> +\t\t--verbose \\\n>> +\t\t--skip-modules \\\n>> +\t\t--force-9p \\\n>> +\t\t--rwdir \"$PWD/build\" \\\n>> +\t\t--run /opt/linux/bzImage \\\n>> +\t\t--exec \" \\\n>> +\t\t\tset -x; \\\n>> +\t\t\tmv /usr/local/share/libcamera/pipeline/virtual/virtual.yaml.example \\\n>> +\t\t\t   /usr/local/share/libcamera/pipeline/virtual/virtual.yaml; \\\n>> +\t\t\tLIBCAMERA_LOG_LEVELS=*:DEBUG \\\n>> +\t\t\tASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 \\\n>> +\t\t\tUBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 \\\n>> +\t\t\tGTEST_OUTPUT=xml:./build/lc-compliance-report.xml \\\n>> +\t\t\tlc-compliance -c Virtual0; \\\n>> +\t\t\techo \\\\\\$? > ./build/.test-status; \\\n>> +\t\t\"\n>> +\n>> +\tlocal status=$(cat build/.test-status)\n>> +\techo \"Test result exit state: $status\"\n>> +\trm build/.test-status\n>> +\n>> +\tif [[ $status != 0 ]] ; then\n>> +\t\texit $status\n>> +\tfi\n>> +}\n>> +\n>> +run libcamera_compliance\n>> diff --git a/.gitlab-ci/unpackage-libcamera.sh b/.gitlab-ci/unpackage-libcamera.sh\n>> new file mode 100755\n>> index 0000000..9eb3192\n>> --- /dev/null\n>> +++ b/.gitlab-ci/unpackage-libcamera.sh\n>> @@ -0,0 +1,17 @@\n>> +#!/bin/bash\n>> +\n>> +# SPDX-License-Identifier: GPL-2.0-or-later\n>> +# SPDX-FileCopyrightText: © 2024 Google Inc.\n>> +\n>> +set -e\n>> +\n>> +source \"$(dirname \"$0\")/lib.sh\"\n>> +\n>> +libcamera_unpackage() {\n>> +\techo \"Unpackage libcamera binaries\"\n>> +\n>> +\ttar -xvf libcamera-${CI_COMMIT_SHA}.tar.xz -C /\n>> +\tldconfig -v\n>> +}\n>> +\n>> +run libcamera_unpackage\n>> diff --git a/gitlab-ci.yml b/gitlab-ci.yml\n>> index d268285..ec19f55 100644\n>> --- a/gitlab-ci.yml\n>> +++ b/gitlab-ci.yml\n>> @@ -280,7 +280,7 @@ build-package:debug:\n>>         -D b_sanitize=address,undefined\n>>         -D cpp_debugstl=true\n>>         -D force_fallback_for=['gtest']\n>> -      -D pipelines=['auto']\n>> +      -D pipelines=['auto','virtual']\n>>         -D auto_features=disabled\n>>         -D lc-compliance=enabled\n>>         -D test=false\n>> @@ -411,3 +411,23 @@ test-unit:\n>>     artifacts:\n>>       reports:\n>>         junit: build/meson-logs/testlog.junit.xml\n>> +\n>> +test-lc-compliance:virtual:\n>> +  extends:\n>> +    - .fdo.distribution-image@debian\n>> +    - .libcamera-ci.debian:12\n>> +    - .libcamera-ci.scripts\n>> +  stage: test\n>> +  needs:\n>> +    - job: build-package:debug\n>> +      parallel:\n>> +        matrix:\n>> +          - ARCH: amd64\n> \n> Should we add\n> \n>      - job: container-debian:12\n>        artifacts: false\n> \n> here ? I know build-package:debug depends on it, but I think it's a good\n> practice to have an explicit dependency on the container needed to run\n> this job.\n> \n> The rest looks good, so\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n> If you agree with the comment I can add the dependency when applying the\n> patch, there's no need to resubmit.\n\nTo be honest I don't really have an opinion on this, so feel free to\nchange it as you see fit.\n\n\nRegards,\nBarnabás Pőcze\n\n\n> \n>> +  tags:\n>> +    - kvm\n>> +  script:\n>> +    - $CI_PROJECT_DIR/.gitlab-ci/unpackage-libcamera.sh\n>> +    - $CI_PROJECT_DIR/.gitlab-ci/test-lc-compliance.sh\n>> +  artifacts:\n>> +    reports:\n>> +      junit: build/lc-compliance-report.xml\n>","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 1364EC32F2\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  5 Feb 2025 13:07:53 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 105D0685C8;\n\tWed,  5 Feb 2025 14:07:52 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 002556053F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  5 Feb 2025 14:07:49 +0100 (CET)","from [192.168.33.18] (185.221.140.175.nat.pool.zt.hu\n\t[185.221.140.175])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E52767E0;\n\tWed,  5 Feb 2025 14:06:36 +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=\"DfPgbLPV\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1738760797;\n\tbh=GipJSH6Zvf7/CLvXv0hWxSVyM5kFyy0QoqQBRZU9A6k=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=DfPgbLPVAipqZj8KOc7H61AfLiNlkJyUrmBFVErSr9j5JwvrJnjbXenE0LJbhIGp6\n\t3Tz8+eWlK9hA40ptHzN3po1hGnnk/T3ilF9csv/E+nCKjCcOyznkxfmPatj4P8LpUU\n\tDZhrYIckP/RA+9FJHqNzU/okvzxg9HX9ZvJcYYPY=","Message-ID":"<7f57dc61-8c0b-42a4-a1a1-47a9f91c9221@ideasonboard.com>","Date":"Wed, 5 Feb 2025 14:07:46 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [libcamera-ci] [RFC PATCH v4] Add job to run lc-compliance on\n\tthe virtual pipeline handler","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","References":"<20241219130932.520066-1-barnabas.pocze@ideasonboard.com>\n\t<20250205123434.GA31506@pendragon.ideasonboard.com>","Content-Language":"en-US, hu-HU","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","In-Reply-To":"<20250205123434.GA31506@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","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>"}}]