Skip to content

Ship pinned prebuilt external cargo tools in the sc-lint release package #118

Description

@randlee

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

  1. 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).
  2. 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.
  3. 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.
  4. 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).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions