name: CI on: push: # `dev` is where work lands and where CI must be green. `main` only ever # moves at release time, to the tagged commit, so a push to it is the # release validation run rather than day-to-day feedback. branches: [main, dev] pull_request: jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 with: path: libfreemkv # libfreemkv path-deps ../freemkv-unlock on the BRANCH tip (release.sh # swaps it to a git tag only inside the tagged commit, then restores the # path dep). CI checks out one repo, so the branch tip has never been # buildable here — every green run you have ever seen was a tag build, # and Windows/Linux were first compiled at release time. # # Both repos go into subdirectories because actions/checkout refuses a # `path:` outside $GITHUB_WORKSPACE, and `../freemkv-unlock` is outside. # With this layout the path dep resolves exactly as it does locally. - uses: actions/checkout@v5 with: repository: freemkv/freemkv-unlock ref: dev path: freemkv-unlock - uses: dtolnay/rust-toolchain@1.97.0 with: components: clippy, rustfmt - uses: Swatinem/rust-cache@v2 with: workspaces: libfreemkv - run: cargo fmt --check working-directory: libfreemkv # libfreemkv is a library — Cargo.lock is gitignored. --locked # would always fail on a fresh runner because there's no committed # lockfile to lock against. The binary crates (freemkv, autorip, # bdemu) track Cargo.lock and DO use --locked. # --all-targets so TEST code is linted too. Without it this crate — the # reference implementation for the other seven — was the only one whose # tests had never been linted at all, and it was hiding 74 findings. - run: cargo clippy --all-targets -- -D warnings working-directory: libfreemkv test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 with: path: libfreemkv # libfreemkv path-deps ../freemkv-unlock on the BRANCH tip (release.sh # swaps it to a git tag only inside the tagged commit, then restores the # path dep). CI checks out one repo, so the branch tip has never been # buildable here — every green run you have ever seen was a tag build, # and Windows/Linux were first compiled at release time. # # Both repos go into subdirectories because actions/checkout refuses a # `path:` outside $GITHUB_WORKSPACE, and `../freemkv-unlock` is outside. # With this layout the path dep resolves exactly as it does locally. - uses: actions/checkout@v5 with: repository: freemkv/freemkv-unlock ref: dev path: freemkv-unlock - uses: dtolnay/rust-toolchain@1.97.0 - uses: Swatinem/rust-cache@v2 with: workspaces: libfreemkv - run: cargo test --tests working-directory: libfreemkv check-macos: runs-on: macos-latest steps: - uses: actions/checkout@v5 with: path: libfreemkv # libfreemkv path-deps ../freemkv-unlock on the BRANCH tip (release.sh # swaps it to a git tag only inside the tagged commit, then restores the # path dep). CI checks out one repo, so the branch tip has never been # buildable here — every green run you have ever seen was a tag build, # and Windows/Linux were first compiled at release time. # # Both repos go into subdirectories because actions/checkout refuses a # `path:` outside $GITHUB_WORKSPACE, and `../freemkv-unlock` is outside. # With this layout the path dep resolves exactly as it does locally. - uses: actions/checkout@v5 with: repository: freemkv/freemkv-unlock ref: dev path: freemkv-unlock - uses: dtolnay/rust-toolchain@1.97.0 - uses: Swatinem/rust-cache@v2 with: workspaces: libfreemkv - run: cargo check working-directory: libfreemkv check-windows: runs-on: windows-latest steps: - uses: actions/checkout@v5 with: path: libfreemkv # libfreemkv path-deps ../freemkv-unlock on the BRANCH tip (release.sh # swaps it to a git tag only inside the tagged commit, then restores the # path dep). CI checks out one repo, so the branch tip has never been # buildable here — every green run you have ever seen was a tag build, # and Windows/Linux were first compiled at release time. # # Both repos go into subdirectories because actions/checkout refuses a # `path:` outside $GITHUB_WORKSPACE, and `../freemkv-unlock` is outside. # With this layout the path dep resolves exactly as it does locally. - uses: actions/checkout@v5 with: repository: freemkv/freemkv-unlock ref: dev path: freemkv-unlock - uses: dtolnay/rust-toolchain@1.97.0 - uses: Swatinem/rust-cache@v2 with: workspaces: libfreemkv # Build the tests (not just `cargo check`): catches errors in test # code and forces full codegen of the Windows-only SPTI transport # (src/scsi/windows.rs), which never compiles on the Linux/macOS dev # hosts. We don't `cargo test` here — the suite needs no drive but the # extra build is the value; running tests is covered by the Linux job. - run: cargo build --tests working-directory: libfreemkv