The Windows UI needs winsafe, whose current release requires rustc 1.87. The alternative was pinning winsafe back to an older release, which would bake a stale API surface into a brand-new UI permanently to dodge one minor version. The pin's purpose is to sit BELOW the Mac default so clippy drift is caught locally before CI, not to stay on 1.86 specifically, so 1.87 preserves the discipline exactly. Verified before moving anything, not after: `cargo +1.87 clippy -- -D warnings` and `cargo +1.87 fmt --check` are clean across all eight repos, and the full precommit gate (fmt + clippy + tests) passes on libfreemkv, autorip, bdemu, freemkv-engine and freemkv-keysources. Zero new lints, zero formatting drift.
59 lines
2.1 KiB
YAML
59 lines
2.1 KiB
YAML
name: Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
verify:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Verify Cargo.toml version matches tag
|
|
run: |
|
|
CARGO_VER="v$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)"/\1/')"
|
|
if [ "$CARGO_VER" != "${{ github.ref_name }}" ]; then
|
|
echo "::error::Cargo.toml says $CARGO_VER but tag is ${{ github.ref_name }}"
|
|
exit 1
|
|
fi
|
|
echo "Version match: $CARGO_VER"
|
|
|
|
# Tests run as a PARALLEL TRIPWIRE: they fail the run if they fail, but the
|
|
# publish/release jobs do NOT `needs:` this job. The tag decision was already
|
|
# gated by the local precommit (same Rust 1.87, same commit). Binary consumers
|
|
# (freemkv/autorip/bdemu) git-tag-pin libfreemkv and therefore start building
|
|
# the instant this tag exists — so this test job and the crates.io publish
|
|
# below must NOT sit on their critical path.
|
|
test:
|
|
needs: verify
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- uses: dtolnay/rust-toolchain@1.87.0
|
|
- uses: Swatinem/rust-cache@v2
|
|
# libfreemkv is a library — Cargo.lock isn't tracked, so --locked
|
|
# would always fail (no lockfile to lock against on a fresh runner).
|
|
- run: cargo test
|
|
|
|
# NOTE: there is no crates.io publish job. libfreemkv is git-tag-only
|
|
# (`package.publish = false` — it git-deps the firmware crate freemkv-unlock,
|
|
# which never ships to crates.io). Every consumer git-tag-pins libfreemkv via
|
|
# a committed [patch.crates-io]; the git tag itself IS the release artifact.
|
|
# A `cargo publish` here fails hard on `publish = false`, so it was removed.
|
|
|
|
release:
|
|
# Only needs `verify`; the GitHub Release can be cut as soon as the version
|
|
# check passes, in parallel with test + publish.
|
|
needs: verify
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Create GitHub Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
generate_release_notes: true
|