Skip to content

Workflow file for this run

name: Build in Docker
on:
push:
tags:
- 'v*'
jobs:
prepare-env:
runs-on: ubuntu-24.04-arm
outputs:
raspios_version: ${{ steps.os_version.outputs.name }}
steps:
- name: Extract OS Version
id: os_version
run: |
FILE_URL=$(curl -sI https://downloads.raspberrypi.org/raspios_lite_arm64_latest | grep -i '^location:' | awk '{print $2}' | tr -d '\r')
FILENAME=$(basename $FILE_URL)
OS_NAME=$(echo $FILENAME | grep -oP 'raspios-[a-z]+-arm64')
echo "name=$OS_NAME" >> $GITHUB_OUTPUT
- name: Download and Prepare Raspberry Pi OS Image
run: |
wget -q https://downloads.raspberrypi.org/raspios_lite_arm64_latest -O rpi-os.img.xz
xz -d rpi-os.img.xz
sudo mkdir boot
sudo mount -o loop,offset=541065216 rpi-os.img boot
sudo tar -C boot -cf rpi-rootfs.tar .
docker import rpi-rootfs.tar rpi-docker-image
sudo umount boot
- name: Install dependencies
run: |
docker run --name rpi-container -v ${{ github.workspace }}:/app rpi-docker-image /usr/bin/bash -c "
apt update --fix-missing &&
apt install -y \
wget \
curl \
cmake \
clang \
build-essential \
mosquitto-dev \
libboost-program-options-dev \
libavformat-dev \
libavcodec-dev \
libavutil-dev \
libswscale-dev \
libpulse-dev \
libasound2-dev \
libjpeg-dev \
libcamera-dev \
libmosquitto-dev &&
cd /app &&
wget -q https://github.com/TzuHuanTai/Native-WebRTC-Build/releases/download/5790/libwebrtc-arm64.tar.gz &&
tar -xzf libwebrtc-arm64.tar.gz &&
mkdir -p /usr/local/include/webrtc &&
cp -r include/* /usr/local/include/webrtc &&
cp -r lib/* /usr/local/lib &&
mkdir -p /usr/local/include/nlohmann &&
curl -L https://raw.githubusercontent.com/nlohmann/json/develop/single_include/nlohmann/json.hpp -o /usr/local/include/nlohmann/json.hpp
"
- name: Commit Docker Image
run: |
docker commit rpi-container rpi-docker-env
docker rm rpi-container
- name: Save Docker image
run: docker save rpi-docker-env -o rpi-docker-env.tar
- name: Cache Docker Image
uses: actions/cache@v4
with:
path: rpi-docker-env.tar
key: rpi-docker-env-${{ runner.os }}-${{ hashFiles('**/Dockerfile', '.github/workflows/**') }}
restore-keys: |
rpi-docker-env-${{ runner.os }}-
build:
runs-on: ubuntu-24.04-arm
needs: prepare-env
strategy:
matrix:
signaling: [MQTT, HTTP]
build_type: [Debug, Release]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Restore Docker Image from Cache
uses: actions/cache@v4
with:
path: rpi-docker-env.tar
key: rpi-docker-env-${{ runner.os }}-${{ hashFiles('**/Dockerfile', '.github/workflows/**') }}
restore-keys: |
rpi-docker-env-${{ runner.os }}-
- name: Load Docker Image
run: docker load -i rpi-docker-env.tar
- name: Build inside Docker
run: |
docker run --rm -v ${{ github.workspace }}:/app rpi-docker-env /usr/bin/bash -c "
cd /app &&
mkdir -p build &&
cd build &&
cmake .. -DCMAKE_CXX_COMPILER=clang++ -DUSE_${{ matrix.signaling }}_SIGNALING=ON -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} &&
make -j$(nproc)
"
- name: Zip binary
id: zip-binary
run: |
cd build
if [ "${{ matrix.build_type }}" == "Release" ]; then
FILENAME="pi_webrtc-${{ github.ref_name }}_${{ matrix.signaling }}_${{ needs.prepare-env.outputs.raspios_version }}.tar.gz"
else
FILENAME="pi_webrtc-${{ github.ref_name }}_${{ matrix.signaling }}_${{ needs.prepare-env.outputs.raspios_version }}_debug.tar.gz"
fi
sudo tar -czvf $FILENAME pi_webrtc
echo "filename=$FILENAME" >> $GITHUB_OUTPUT
- name: Upload to GitHub
uses: softprops/action-gh-release@v2
with:
files: build/${{ steps.zip-binary.outputs.filename }}