# .github/workflows/ci.yml — slice-1 CI (spec §6.2). # Gates: fmt --check, clippy -D warnings, test --all, cargo deny check. name: CI on: push: branches: [main] pull_request: branches: [main] env: CARGO_TERM_COLOR: always jobs: fmt: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt - run: cargo fmt --check clippy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: clippy - name: Install libopus (media crate FFI dep) run: apt-get update && apt-get install -y libopus-dev - uses: Swatinem/rust-cache@v2 - run: cargo clippy --all -- -D warnings test: runs-on: ubuntu-latest strategy: matrix: toolchain: [stable, "1.85"] steps: - uses: actions/checkout@v4 # Seam gate (slice-4 §7 #3; re-pinned slice-5): # # `loop_driver.rs` stays byte-identical to slice-3 — the hot-path # poll loop is untouched. `rtc_session.rs` was re-pinned in slice-5 # for MediaAddressConfig (2026-07-04 scalability review, B1: # bind/advertised address split + port range). If a legitimate # change is needed, update the pinned blob hashes below in the same # PR — loud and reviewable by design. - name: Seam gate — loop_driver frozen (slice-3) + rtc_session pinned (slice-5) run: | EXPECTED_LOOP_DRIVER='744bf314edf7f4925c8bb3bd0f5176dbc88f8113' EXPECTED_RTC_SESSION='f47d63b9a2883d37066a93c9daa0e2cf8816bec4' GOT_LOOP_DRIVER=$(git hash-object crates/rutster-media/src/loop_driver.rs) GOT_RTC_SESSION=$(git hash-object crates/rutster-media/src/rtc_session.rs) if [ "$GOT_LOOP_DRIVER" != "$EXPECTED_LOOP_DRIVER" ]; then echo "::error::loop_driver.rs blob mismatch: $GOT_LOOP_DRIVER != $EXPECTED_LOOP_DRIVER" exit 1 fi if [ "$GOT_RTC_SESSION" != "$EXPECTED_RTC_SESSION" ]; then echo "::error::rtc_session.rs blob mismatch: $GOT_RTC_SESSION != $EXPECTED_RTC_SESSION" exit 1 fi - uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.toolchain }} - name: Install libopus (media crate FFI dep) run: apt-get update && apt-get install -y libopus-dev - uses: Swatinem/rust-cache@v2 - run: cargo test --all deny: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - uses: EmbarkStudios/cargo-deny-action@v2 with: command: check