diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2d1ba27..92e7f4c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,42 +13,119 @@ jobs: 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. - run: cargo clippy -- -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