feat(webrtc): add signaling-free WebRTC Direct transport #317
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # CI - Main continuous integration gate | |
| # Runs on every push/PR to verify code quality and tests | |
| name: CI | |
| on: | |
| push: | |
| branches: [master, main, "rc-*"] | |
| pull_request: | |
| branches: [master, main, "rc-*"] | |
| workflow_dispatch: | |
| env: | |
| RUST_BACKTRACE: 1 | |
| CARGO_TERM_COLOR: always | |
| CARGO_INCREMENTAL: 0 | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| # Quick checks - lint, format, compile | |
| quick-checks: | |
| name: Quick Checks | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libdbus-1-dev pkg-config | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt, clippy | |
| targets: wasm32-unknown-unknown | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Format check | |
| run: cargo fmt --all -- --check | |
| - name: Clippy | |
| run: cargo clippy --all-features --lib --bins --examples -- -D warnings | |
| - name: Clippy portable WebRTC profile | |
| run: cargo clippy -p saorsa-webrtc --all-targets -- -D warnings | |
| - name: Build check | |
| run: cargo check --lib --bins --examples | |
| - name: Build portable WebRTC profile for WASM | |
| run: cargo check -p saorsa-webrtc --target wasm32-unknown-unknown | |
| # Main test suite | |
| test: | |
| name: Test Suite | |
| needs: quick-checks | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libdbus-1-dev pkg-config | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Build | |
| run: cargo build --lib --bins --examples | |
| - name: Run library tests | |
| run: cargo test --lib --all-features -- --test-threads=2 | |
| - name: Run portable WebRTC profile tests | |
| run: cargo test -p saorsa-webrtc | |
| - name: Run integration tests | |
| run: | | |
| cargo test --test quick --all-features -- --test-threads=2 --skip auto_binding --skip binding_stream --skip kem_group_is_restricted_with_provider | |
| cargo test --test standard --all-features -- --test-threads=2 | |
| - name: Run doc tests | |
| run: cargo test --doc | |
| # Security audit | |
| security: | |
| name: Security Audit | |
| needs: quick-checks | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Cache cargo-audit | |
| uses: actions/cache@v6 | |
| with: | |
| path: ~/.cargo/bin/cargo-audit | |
| key: cargo-audit-${{ runner.os }} | |
| - name: Install cargo-audit | |
| run: | | |
| if ! command -v cargo-audit &> /dev/null; then | |
| cargo install cargo-audit --locked | |
| fi | |
| - name: Run security audit | |
| run: cargo audit | |
| # NAT traversal tests | |
| nat-tests: | |
| name: NAT Tests | |
| needs: quick-checks | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libdbus-1-dev pkg-config | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: NAT traversal tests | |
| run: cargo test --lib nat_traversal -- --test-threads=2 | |
| - name: Candidate discovery tests | |
| run: cargo test --lib candidate_discovery -- --test-threads=2 | |
| - name: Connection establishment tests | |
| run: cargo test --lib connection_establishment -- --test-threads=2 | |
| # MSRV verification | |
| msrv: | |
| name: MSRV (1.88.0) | |
| needs: quick-checks | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libdbus-1-dev pkg-config | |
| - name: Install MSRV | |
| uses: dtolnay/rust-toolchain@v1 | |
| with: | |
| toolchain: 1.88.0 | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: msrv | |
| - name: Check MSRV | |
| run: cargo check --all-features | |
| # CI gate - all required jobs must pass | |
| ci-success: | |
| name: CI Gate | |
| needs: [quick-checks, test, security, nat-tests, msrv] | |
| runs-on: ubuntu-latest | |
| if: always() | |
| steps: | |
| - name: Check all jobs | |
| run: | | |
| echo "### CI Results" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY | |
| echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| Quick Checks | ${{ needs.quick-checks.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Test Suite | ${{ needs.test.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Security | ${{ needs.security.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| NAT Tests | ${{ needs.nat-tests.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| MSRV | ${{ needs.msrv.result }} |" >> $GITHUB_STEP_SUMMARY | |
| # Required jobs | |
| if [[ "${{ needs.quick-checks.result }}" != "success" ]]; then | |
| echo "::error::Quick checks failed" | |
| exit 1 | |
| fi | |
| if [[ "${{ needs.test.result }}" != "success" ]]; then | |
| echo "::error::Test suite failed" | |
| exit 1 | |
| fi | |
| if [[ "${{ needs.security.result }}" != "success" ]]; then | |
| echo "::error::Security audit failed" | |
| exit 1 | |
| fi | |
| if [[ "${{ needs.nat-tests.result }}" != "success" ]]; then | |
| echo "::error::NAT tests failed" | |
| exit 1 | |
| fi | |
| if [[ "${{ needs.msrv.result }}" != "success" ]]; then | |
| echo "::error::MSRV check failed" | |
| exit 1 | |
| fi | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**All CI checks passed!**" >> $GITHUB_STEP_SUMMARY |