Skip to content

Release hygiene: fix config drift and close gold-standard gaps #182

Description

@dean0x

An audit used this repo as the reference template for release-readiness of another project. It's a strong template, but a few items of config drift and some gaps against a "gold standard" release bar surfaced. Filing them here to fix later.

Config drift (small, factual fixes)

  1. Repo homepage points at the wrong slug: https://github.com/dean0x/mds#readme → should be …/mdscript#readme (the package manifests already use the correct URL).
  2. .github/ISSUE_TEMPLATE/config.yml links to /discussions, but Discussions is disabled → enable Discussions or repoint the contact link.
  3. SECURITY.md supported-versions table is stale (says 0.1.x; current release is v0.3.0) → replace the table with a rolling statement ("the latest 0.x release receives security fixes") so it can't rot again.
  4. CODE_OF_CONDUCT.md still missing (tracked in Add CODE_OF_CONDUCT.md (Contributor Covenant 2.1) #38) — folded in here for visibility.
  5. workflow_dispatch release path is still broken against protected main (release: workflow_dispatch path fails GH006 on protected main (prepare can't push) #127) — consider deleting the prepare push-to-main job in favor of a pure tag-driven flow (bump via PR, tag the merge commit), which designs the failure out instead of working around it.

Gold-standard gaps

The bar used for the audit:

  • (a) Every public claim is CI-verified — declared MSRV is checked (✅ already done here), claimed commit conventions are enforced, docs can't silently drift from settings.
  • (b) Supply chain — all actions SHA-pinned with Dependabot keeping pins fresh; OIDC trusted publishing (no long-lived registry tokens); npm provenance; cargo-deny gating advisories/licenses.
  • (c) Release integrity — checksummed release artifacts + build-provenance attestations; a dry-run path exercising the full build matrix (✅ already done here); idempotent, safely re-runnable publish steps.
  • (d) Self-consistency — repo settings, templates, and health files agree with each other.
  • (e) Protection that doesn't fight automation — branch protection with the release path designed around it.

Against that bar:

  • Registry auth uses long-lived secrets (CARGO_REGISTRY_TOKEN, NPM_TOKEN); both crates.io and npm support OIDC trusted publishing — switch, then delete the tokens.
  • Only the composite action's internals are SHA-pinned; workflow-level actions float on major tags — pin all uses: to full SHAs (the github-actions Dependabot ecosystem is already configured, so pins stay fresh).
  • GitHub Releases carry no artifacts or checksums — attach a SHA256SUMS (and optionally the platform artifacts), and add build-provenance attestations (actions/attest-build-provenance).
  • No cargo-deny/cargo-audit gate in CI (already noted as a follow-up in Cargo.toml comments).
  • publish-crates waits on the index with sleep 30 between mds-core and mds-cli — replace with a poll of the crates.io index for the exact version.
  • Publish failures are downgraded to warnings ("may already exist") — replace with explicit idempotency checks (query the registry for the exact version; skip if present, hard-fail on anything else).
  • Conventional Commits are claimed in CONTRIBUTING and the PR template but not enforced — add a PR-title lint or soften the claim.
  • Optional: OpenSSF Scorecard workflow + badge; coverage reporting.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions