name: Build and Test
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
CARGO_TERM_COLOR: always
RUSTFLAGS: --cfg reqwest_unstable
jobs:
linux:
name: Linux ${{ matrix.target }}
runs-on: ubuntu-latest
strategy:
matrix:
target: [x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu]
steps:
- uses: actions/checkout@v4
- name: Install tools
run: |
sudo apt-get update
sudo apt-get install -y cmake ninja-build nasm \
gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross \
pkg-config
- name: Install GStreamer (host)
run: |
sudo apt-get update
sudo apt-get install -y \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libgstrtspserver-1.0-dev \
libges-1.0-dev \
libgstreamer-plugins-bad1.0-dev
- name: Run FoundationDB setup
run: bash ./bash/fdb.sh
- name: Add Rust target
run: rustup target add ${{ matrix.target }}
- name: Configure AArch64 cross toolchain env
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
echo "CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
echo "CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++" >> $GITHUB_ENV
echo "AR_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ar" >> $GITHUB_ENV
echo "RANLIB_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ranlib" >> $GITHUB_ENV
# Pick the cross compiler:
echo "CMAKE_C_COMPILER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
echo "CMAKE_CXX_COMPILER=aarch64-linux-gnu-g++" >> $GITHUB_ENV
# Be explicit for Cargo's linker
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
- name: Configure Cargo linker (aarch64)
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
mkdir -p .cargo
cat > .cargo/config.toml <<'EOF'
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
ar = "aarch64-linux-gnu-ar"
EOF
- name: Clean
run: cargo clean
- name: Run Clippy
if: matrix.target == 'x86_64-unknown-linux-gnu'
run: |
rustup component add clippy
cargo clippy --all-targets --no-default-features --features "rt-tokio net-h1-server net-h2-server" -- -D warnings
- name: Build
run: cargo build --release --target=${{ matrix.target }} --no-default-features --features "rt-tokio net-h1-server net-h2-server"
- name: Test
run: cargo test --release --no-default-features --features "rt-tokio net-h2-server"
windows:
name: Windows x86_64
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Install tools
run: |
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System' -y
choco install ninja nasm -y
- name: Setup Rust
run: |
rustup default stable
rustup component add clippy
- name: Run Clippy
run: cargo clippy --all-targets --no-default-features --features "rt-tokio net-h2-server" -- -D warnings
- name: Build
run: cargo build --release --no-default-features --features "rt-tokio net-h2-server"
- name: Test
run: cargo test --release --no-default-features --features "rt-tokio net-h2-server"
android:
name: Android ${{ matrix.target }}
runs-on: ubuntu-latest
strategy:
matrix:
target:
[armv7-linux-androideabi, aarch64-linux-android, x86_64-linux-android]
steps:
- uses: actions/checkout@v4
- name: Add Android target
run: rustup target add ${{ matrix.target }}
- name: Install NDK
uses: nttld/setup-ndk@v1
with:
ndk-version: r25b
add-to-path: true
- name: Install cargo-ndk
run: cargo install cargo-ndk
- name: Build
run: cargo ndk -t ${{ matrix.target }} -o ./target build --release
apple:
name: Apple (macOS & iOS)
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- name: Install tools
run: brew install ninja
- name: Install GStreamer
run: |
curl -O https://gstreamer.freedesktop.org/data/pkg/osx/1.26.2/gstreamer-1.0-1.26.2-universal.pkg
curl -O https://gstreamer.freedesktop.org/data/pkg/osx/1.26.2/gstreamer-1.0-devel-1.26.2-universal.pkg
sudo installer -pkg gstreamer-1.0-1.26.2-universal.pkg -target /
sudo installer -pkg gstreamer-1.0-devel-1.26.2-universal.pkg -target /
echo "PATH=/Library/Frameworks/GStreamer.framework/Versions/1.0/bin:$PATH" >> $GITHUB_ENV
- name: Run FoundationDB setup
run: bash ./bash/fdb.sh
- name: Setup Rust
run: |
rustup default stable
rustup component add clippy
rustup target add aarch64-apple-darwin
rustup target add aarch64-apple-ios
- name: Run Clippy
run: cargo clippy
- name: Build for macOS (arm64)
run: cargo build --release --target=aarch64-apple-darwin
- name: Build for iOS (staticlib)
run: |
cargo install cargo-lipo
cargo lipo --release --targets=aarch64-apple-ios