sib 0.0.17

A high-performance, secure, and cross-platform modules optimized for efficiency, scalability, and reliability.
Documentation
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