Files
rutster/.github/workflows/ci.yml
Aaron D. Lee 26f48a4c6b
All checks were successful
CI / fmt (pull_request) Successful in 1m46s
CI / clippy (pull_request) Successful in 2m37s
CI / test (1.85) (pull_request) Successful in 5m57s
CI / test (stable) (pull_request) Successful in 5m48s
CI / deny (pull_request) Successful in 1m19s
ci(slice-4): seam gate — loop_driver + rtc_session pinned byte-identical
Pins the slice-3→slice-4 media seam via blob hashes. Any legitimate
change to these files requires updating the pinned hashes in the same
PR, making the seam gate loud and reviewable.

Pinned hashes (main):
- loop_driver.rs: 744bf314ed
- rtc_session.rs: a4c9f2ae64

Signed-off-by: Aaron D. Lee <himself@adlee.work>
2026-07-04 12:04:44 -04:00

82 lines
2.6 KiB
YAML

# .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 / PORT_PLAN phasing):
#
# `loop_driver.rs` and `rtc_session.rs` are the hot-path media seam
# preserved from slice-3. They MUST remain byte-identical across
# slice-4 so the reflex wrapper can be added without touching the
# core poll loop. 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 + rtc_session byte-identical to slice-3
run: |
EXPECTED_LOOP_DRIVER='744bf314edf7f4925c8bb3bd0f5176dbc88f8113'
EXPECTED_RTC_SESSION='a4c9f2ae64e56c08e1990956391514929535b526'
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