[libcamera-ci] [RFC PATCH v1 2/3] Separate the building and running of unit tests

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sun Dec 15 20:04:08 CET 2024


Hi Barnabás,

Thank you for the patch.

On Thu, Dec 12, 2024 at 07:16:54PM +0100, Barnabás Pőcze wrote:
> The built artifacts will be reused in a later job, so split
> the "test-unit" into the "build-test" and "test-unit" jobs.
> 
> The `libevent` development package cannot be installed in the container

I've write `libevent-dev` here to avoid ambiguities.

> directly because it is not multiarch compatible. It is, however, installed
> in the architecture specific build jobs, right before building. To ensure
> that the it is available for already built executables in different jobs,

"that the it is" ?

> install just the libraries in the container.

And name here `libevent`.

> 
> Signed-off-by: Barnabás Pőcze <barnabas.pocze at ideasonboard.com>
> ---
>  .gitlab-ci/setup-container.sh |  3 +++
>  gitlab-ci.yml                 | 42 +++++++++++++++++++++++------------
>  2 files changed, 31 insertions(+), 14 deletions(-)
> 
> diff --git a/.gitlab-ci/setup-container.sh b/.gitlab-ci/setup-container.sh
> index d2909c7..0658368 100755
> --- a/.gitlab-ci/setup-container.sh
> +++ b/.gitlab-ci/setup-container.sh
> @@ -103,6 +103,9 @@ case $FDO_DISTRIBUTION_VERSION in
>  'bookworm')
>  	# libclang-rt-dev for the clang ASan runtime.
>  	PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libclang-rt-dev )
> +	# For cam and lc-compliance
> +	# libevent-dev cannot be used here, see build-libcamera-common.sh
> +	PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libevent-2.1-7 libevent-pthreads-2.1-7 )
>  	;;
>  'trixie')
>  	# gcc 13 to expand compilation testing coverage.
> diff --git a/gitlab-ci.yml b/gitlab-ci.yml
> index 8bc8bc2..c7448b8 100644
> --- a/gitlab-ci.yml
> +++ b/gitlab-ci.yml
> @@ -64,7 +64,7 @@ include:
>  .libcamera-ci.debian:12:
>    variables:
>      FDO_DISTRIBUTION_VERSION: 'bookworm'
> -    FDO_DISTRIBUTION_TAG: '2024-12-12.1'
> +    FDO_DISTRIBUTION_TAG: '2024-12-12.2'
> 
>  .libcamera-ci.debian:13:
>    variables:
> @@ -363,28 +363,18 @@ test-soraka:
>    script:
>      - submit .gitlab-ci/lava/soraka-camera-test.yml
> 
> -# Run the unit tests in a virtual machine. Enable only the options exercised by
> -# the unit tests.
> -test-unit:
> +# Enable only the options exercised by the unit tests.
> +build-test:debug:

I'd call this build-package:amd64, as we have build-package:arm64 and
build-package:cros. I think it would also make sense to use the same
build options for the amd64 and arm64 packages (beside possibly the
selected pipeline handlers, although the 'auto' option may work for
both).

>    extends:
>      - .fdo.distribution-image at debian
>      - .libcamera-ci.debian:12
>      - .libcamera-ci.scripts
> -  stage: test
> +  stage: build
>    needs:
>      - job: container-debian:12
>        artifacts: false
> -  tags:
> -    - kvm
>    script:
>      - $CI_PROJECT_DIR/.gitlab-ci/build-libcamera.sh
> -    - $CI_PROJECT_DIR/.gitlab-ci/test-libcamera-qemu.sh
> -  artifacts:
> -    name: libcamera-unit-tests-${CI_COMMIT_SHA}
> -    when: always
> -    expire_in: 1 week
> -    paths:
> -      - build/meson-logs/
>    variables:
>      BUILD_TYPE: debug
>      MESON_OPTIONS: >-
> @@ -399,6 +389,30 @@ test-unit:
>        -D qcam=disabled
>        -D test=true
>        -D v4l2=true
> +  artifacts:
> +    paths:
> +      - build/

The whole build directory can be very large. Can't we do the same as
build-package:arm64 and run package-libcamera.sh to only package what we
need ? We'll need probably need an unpackage script for the test-unit
job.

> +    expire_in: 1 day
> +
> +# Run the unit tests in a virtual machine.
> +test-unit:
> +  extends:
> +    - .fdo.distribution-image at debian
> +    - .libcamera-ci.debian:12
> +    - .libcamera-ci.scripts
> +  stage: test
> +  needs:
> +    - job: build-test:debug
> +  tags:
> +    - kvm
> +  script:
> +    - $CI_PROJECT_DIR/.gitlab-ci/test-libcamera-qemu.sh
> +  artifacts:
> +    name: libcamera-unit-tests-${CI_COMMIT_SHA}
> +    when: always
> +    expire_in: 1 week
> +    paths:
> +      - build/meson-logs/
> 
>    # meson prior to 1.2.0 doesn't correctly escape non-printable characters
>    # when generating the testlog XML. This results in an unparseable file.
-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list