From bad6d78c2db61ba87231c3803f28458a6c795211 Mon Sep 17 00:00:00 2001 From: sirknightj Date: Tue, 7 Jan 2025 00:38:02 -0800 Subject: [PATCH] Add raspberry pi checks to the CI --- .github/workflows/raspberry-pi.yaml | 96 +++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 .github/workflows/raspberry-pi.yaml diff --git a/.github/workflows/raspberry-pi.yaml b/.github/workflows/raspberry-pi.yaml new file mode 100644 index 00000000..f6028b71 --- /dev/null +++ b/.github/workflows/raspberry-pi.yaml @@ -0,0 +1,96 @@ +name: Build and test on Virtualized Raspberry Pi OS + +on: + push: + branches: [ master, develop ] + pull_request: + branches: [ master, develop ] + +jobs: + build: + runs-on: ubuntu-latest + timeout-minutes: 30 + permissions: + id-token: write + contents: read + strategy: + matrix: + include: + - os: bullseye + image: ghcr.io/dtcooper/raspberrypi-os:python3.12-bullseye + - os: bookworm + image: ghcr.io/dtcooper/raspberrypi-os:python3.12-bookworm + fail-fast: false + + name: Build on ${{ matrix.os }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + aws-region: ${{ secrets.AWS_REGION }} + role-duration-seconds: 10800 + + - name: Build and Test + env: + AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }} + AWS_SESSION_TOKEN: ${{ env.AWS_SESSION_TOKEN }} + AWS_REGION: ${{ env.AWS_REGION }} + AWS_KVS_LOG_LEVEL: 2 + run: | + docker run --rm -v ${{ github.workspace }}:/workspace -w /workspace \ + -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY \ + -e AWS_SESSION_TOKEN -e AWS_REGION -e AWS_KVS_LOG_LEVEL \ + --platform linux/arm64 \ + ${{ matrix.image }} \ + /bin/bash -c ' + set -ex + apt-get update + apt-get install -y automake build-essential cmake git \ + gstreamer1.0-plugins-base-apps gstreamer1.0-plugins-bad \ + gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly \ + gstreamer1.0-tools gstreamer1.0-omx-generic \ + libcurl4-openssl-dev libgstreamer1.0-dev \ + libgstreamer-plugins-base1.0-dev liblog4cplus-dev \ + libssl-dev pkg-config + + mkdir -p build + cd build + + cmake .. -DBUILD_GSTREAMER_PLUGIN=ON -DBUILD_DEPENDENCIES=OFF -DALIGNED_MEMORY_MODEL=ON + make -j$(nproc) + + export GST_PLUGIN_PATH=$(pwd) + + set +e # Disable exit on error for the timeout command + timeout --preserve-status --signal=SIGINT --kill-after=15s 30s \ + gst-launch-1.0 -v videotestsrc is-live=true \ + ! video/x-raw,framerate=10/1,width=640,height=480 \ + ! clockoverlay time-format="%a %B %d, %Y %I:%M:%S %p" \ + ! x264enc bframes=0 key-int-max=10 \ + ! h264parse \ + ! kvssink stream-name="cpp-producer-rpi-${{ matrix.os }}") + EXIT_CODE=$? + set -e # Re-enable exit on error + + # 0: Process exited by itself before the timeout with code 0 + # 1: Process exited by itself before the timeout with code 1 + # 130: Process terminated successfully by SIGINT (expected when timeout occurs) + # 137: Process killed by SIGKILL (if the --kill-after timeout is reached) + echo "Command exited with code: $EXIT_CODE" + if [ $EXIT_CODE -ne 130 ]; then + echo "Command did not exit gracefully after interrupt." + exit 1 + fi + '