ToT libcamera build/run test #297
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: ToT libcamera build/run test | |
on: | |
schedule: | |
- cron: '02 01 * * *' | |
workflow_dispatch: | |
env: | |
# Customize the meson build type here (Release, Debug, RelWithDebInfo, etc.) | |
BUILD_TYPE: release | |
GCC_COMPILER: "CC=/usr/bin/gcc CXX=/usr/bin/g++" | |
CLANG_COMPILER: "CC=/usr/bin/clang-13 CXX=/usr/bin/clang++-13" | |
LIBCAMERA_SRC_DIR: "${{github.workspace}}/../libcamera" | |
PICAMERA2_SRC_DIR: "${{github.workspace}}/../picamera2" | |
LIBCAMERA_INSTALL_DIR: "${{github.workspace}}/../libcamera/install" | |
LIBCAMERA_LKG_DIR: "/home/pi/libcamera_lkg" | |
LIBCAMERA_LD_LIBRARY_DIR: "${{github.workspace}}/../libcamera/install/lib/aarch64-linux-gnu" | |
jobs: | |
build-libcamera: | |
runs-on: [ self-hosted ] | |
steps: | |
- name: Clean libcamera | |
run: rm -rf ${{env.LIBCAMERA_SRC_DIR}} | |
- name: Pull libcamera | |
run: git clone --depth=1 https://github.com/raspberrypi/libcamera.git ${{env.LIBCAMERA_SRC_DIR}} | |
- name: libcamera version | |
run: cd ${{env.LIBCAMERA_SRC_DIR}} && git log -1 | |
- name: Setup meson | |
run: cd ${{env.LIBCAMERA_SRC_DIR}} && meson setup build -Dprefix=${{env.LIBCAMERA_INSTALL_DIR}} -Dpipelines=rpi/vc4,rpi/pisp -Dipas=rpi/vc4,rpi/pisp -Dpycamera=enabled -Dtest=false -Dbuildtype=${{env.BUILD_TYPE}} -Dlibpisp:default_library=static | |
- name: Build | |
run: cd ${{env.LIBCAMERA_SRC_DIR}}/build && ninja install | |
timeout-minutes: 15 | |
- name: Tar files | |
run: tar -cvf build-artifacts-libcamera.tar -C ${{env.LIBCAMERA_SRC_DIR}} . | |
- name: Upload build files | |
uses: actions/upload-artifact@v4 | |
with: | |
name: build-artifacts-libcamera | |
path: build-artifacts-libcamera.tar | |
retention-days: 7 | |
build-rpicam-apps: | |
runs-on: [ self-hosted ] | |
needs: build-libcamera | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
clean: true | |
- name: Clean libcamera | |
run: rm -rf ${{env.LIBCAMERA_SRC_DIR}} && mkdir -p ${{env.LIBCAMERA_SRC_DIR}} | |
- name: Download libcamera artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: build-artifacts-libcamera | |
path: ${{github.workspace}} | |
- name: Untar libcamera files | |
run: tar -xvf build-artifacts-libcamera.tar -C ${{env.LIBCAMERA_SRC_DIR}} | |
- name: Configure meson | |
run: ${{env.GCC_COMPILER}} meson setup ${{github.workspace}}/build --pkg-config-path=${{env.LIBCAMERA_INSTALL_DIR}}/lib/aarch64-linux-gnu/pkgconfig/ -Dbuildtype=${{env.BUILD_TYPE}} | |
timeout-minutes: 5 | |
- name: Build | |
run: ninja -C ${{github.workspace}}/build | |
timeout-minutes: 15 | |
- name: Tar files | |
run: tar -cvf build-artifacts-rpicam-apps.tar -C ${{github.workspace}}/build . | |
- name: Upload build files | |
uses: actions/upload-artifact@v4 | |
with: | |
name: build-artifacts-rpicam-apps | |
path: build-artifacts-rpicam-apps.tar | |
retention-days: 7 | |
run-test: | |
runs-on: ${{matrix.camera}} | |
needs: build-rpicam-apps | |
strategy: | |
matrix: | |
camera: [ imx219, imx477, imx708, pi5-imx708-imx477 ] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
clean: true | |
- name: Create test output dir | |
run: mkdir -p ${{github.workspace}}/test_output | |
- name: Download rpicam-apps build | |
uses: actions/download-artifact@v4 | |
with: | |
name: build-artifacts-rpicam-apps | |
path: ${{github.workspace}} | |
- name: Untar rpicam-apps files | |
run: tar -xvf build-artifacts-rpicam-apps.tar --one-top-level=build | |
- name: Clean libcamera | |
run: rm -rf ${{env.LIBCAMERA_SRC_DIR}} && mkdir -p ${{env.LIBCAMERA_SRC_DIR}} | |
- name: Download libcamera artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: build-artifacts-libcamera | |
path: ${{github.workspace}} | |
- name: Untar libcamera files | |
run: tar -xvf build-artifacts-libcamera.tar -C ${{env.LIBCAMERA_SRC_DIR}} --one-top-level=install | |
- name: Print version string | |
run: ${{github.workspace}}/build/apps/rpicam-hello --version | |
- name: Print linkage info | |
run: ldd ${{github.workspace}}/build/apps/rpicam-hello | grep libcamera | |
- name: Test rpicam-apps | |
run: ${{github.workspace}}/utils/test.py --exe-dir ${{github.workspace}}/build/apps/ --output-dir ${{github.workspace}}/test_output --json-dir ${{github.workspace}}/assets | |
timeout-minutes: 15 | |
- name: Upload test output | |
if: ${{failure()}} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-artifacts-${{matrix.camera}} | |
path: ${{github.workspace}}/test_output/ | |
retention-days: 7 | |
update-rpicam-base: | |
runs-on: ${{matrix.camera}} | |
needs: run-test | |
strategy: | |
matrix: | |
camera: [ imx219, imx477, imx708, pi5-imx708-imx477 ] | |
steps: | |
- name: Clean libcamera LKG | |
run: rm -rf ${{env.LIBCAMERA_LKG_DIR}} && mkdir -p ${{env.LIBCAMERA_LKG_DIR}} | |
- name: Clean libcamera | |
run: rm -rf ${{env.LIBCAMERA_SRC_DIR}} && mkdir -p ${{env.LIBCAMERA_SRC_DIR}} | |
- name: Download libcamera artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: build-artifacts-libcamera | |
path: ${{github.workspace}} | |
- name: Untar libcamera files | |
run: tar -xvf build-artifacts-libcamera.tar -C ${{env.LIBCAMERA_SRC_DIR}} | |
- name: Setup meson | |
run: cd ${{env.LIBCAMERA_SRC_DIR}} && meson setup build -Dprefix=${{env.LIBCAMERA_LKG_DIR}} -Dpipelines=rpi/vc4,rpi/pisp -Dipas=rpi/vc4,rpi/pisp -Dpycamera=enabled -Dtest=false -Dlibpisp:default_library=static --wipe | |
- name: Build | |
run: cd ${{env.LIBCAMERA_SRC_DIR}}/build && ninja install | |
timeout-minutes: 15 |