Context
atm-core is planning to migrate its lint provisioning to sc-lint (the tooling was dogfooded in atm-core and split out here). The main blocker to a fast, clean migration is that the external cargo tools sc-lint's lint surface depends on (cargo-deny, cargo-shear, cargo-modules) are not part of the sc-lint package — every consumer (including sc-lint's own CI) provisions them separately, and any registry-install fallback path risks silent multi-minute source compiles in CI (atm-core just spent PR randlee/atm-core#1026 eliminating exactly that failure mode: CI medians went 12→42 min from source-building these tools).
Requested changes
- Bundle pinned upstream prebuilt binaries in the release archives. The release pipeline downloads the official upstream prebuilt binaries for the pinned tool versions, verifies them, and packs them into
sc-lint_<ver>_<target>.tar.gz alongside the sc-lint binaries, covered by the existing checksums.txt. Consumers then get one download + one checksum verification for the whole lint toolchain — no binstall, no registry fallback, no compile path at all.
- Current pins to bundle: cargo-deny 0.20.2, cargo-shear 1.13.3, cargo-modules 0.26.0 (all publish official GitHub-release prebuilts for the 4 sc-lint targets).
- Include a NOTICE/attribution file for redistribution (deny/audit MIT OR Apache-2.0, shear MIT, cargo-modules MPL-2.0 — MPL requires a pointer to upstream source).
- The pinned tool set becomes part of the versioned release contract, which is a feature: consumers stop drifting (atm-core is on shear 1.12.0, sc-lint CI on 1.13.3 today).
- Action
setup operation installs the bundled tools onto PATH (and verifies them), so a consumer workflow needs exactly one step: uses: randlee/sc-lint@<sha> with: {operation: setup, version: X.Y.Z}. Hard-fail on any verification mismatch; no compile fallback of any kind.
- Decide cargo-audit ownership. atm-core CI also runs
cargo audit (pinned 0.22.2) as a security gate. Either include cargo-audit in the bundled set (preferred — one supply channel for all CI cargo tools) or document explicitly that it stays consumer-owned.
- Dogfood: switch sc-lint's own CI off taiki-e/install-action + binstall onto the bundled artifacts, so the packaging path is exercised on every release.
Acceptance sketch
gh release view on the next release shows the tool binaries inside the platform archives (or as separately checksummed assets) and a NOTICE file.
- A consumer job on ubuntu/macos/windows runners gets sc-lint + all bundled tools from a single verified download, with zero
cargo install/compile lines in the log.
- Version receipts:
setup records/asserts exact tool versions; mismatch is a hard failure.
Why now
This lands before atm-core's migration so the migration PR can delete atm-core's four-tool bootstrap section and duplicated .just/lint_cargo_*.py wrappers in one move, collapsing atm-core bootstrap to two verified prebuilt downloads (sc-lint + sc-compose).
Filed on behalf of Rand from the atm-core CI wall-clock investigation (PR randlee/atm-core#1026).
Context
atm-core is planning to migrate its lint provisioning to sc-lint (the tooling was dogfooded in atm-core and split out here). The main blocker to a fast, clean migration is that the external cargo tools sc-lint's lint surface depends on (cargo-deny, cargo-shear, cargo-modules) are not part of the sc-lint package — every consumer (including sc-lint's own CI) provisions them separately, and any registry-install fallback path risks silent multi-minute source compiles in CI (atm-core just spent PR randlee/atm-core#1026 eliminating exactly that failure mode: CI medians went 12→42 min from source-building these tools).
Requested changes
sc-lint_<ver>_<target>.tar.gzalongside the sc-lint binaries, covered by the existingchecksums.txt. Consumers then get one download + one checksum verification for the whole lint toolchain — no binstall, no registry fallback, no compile path at all.setupoperation installs the bundled tools onto PATH (and verifies them), so a consumer workflow needs exactly one step:uses: randlee/sc-lint@<sha> with: {operation: setup, version: X.Y.Z}. Hard-fail on any verification mismatch; no compile fallback of any kind.cargo audit(pinned 0.22.2) as a security gate. Either include cargo-audit in the bundled set (preferred — one supply channel for all CI cargo tools) or document explicitly that it stays consumer-owned.Acceptance sketch
gh release viewon the next release shows the tool binaries inside the platform archives (or as separately checksummed assets) and a NOTICE file.cargo install/compile lines in the log.setuprecords/asserts exact tool versions; mismatch is a hard failure.Why now
This lands before atm-core's migration so the migration PR can delete atm-core's four-tool bootstrap section and duplicated
.just/lint_cargo_*.pywrappers in one move, collapsing atm-core bootstrap to two verified prebuilt downloads (sc-lint + sc-compose).Filed on behalf of Rand from the atm-core CI wall-clock investigation (PR randlee/atm-core#1026).