Skip to content

Commit

Permalink
Add raspberry pi checks to the CI
Browse files Browse the repository at this point in the history
  • Loading branch information
sirknightj committed Jan 7, 2025
1 parent 7acf272 commit 624ccfb
Showing 1 changed file with 96 additions and 0 deletions.
96 changes: 96 additions & 0 deletions .github/workflows/raspberry-pi.yaml
Original file line number Diff line number Diff line change
@@ -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
'

0 comments on commit 624ccfb

Please sign in to comment.