Skip to content

release(v3.1.x): v3.1.4 prep and standard dependency audit - #395

Merged
pacphi merged 5 commits into
v3.1.xfrom
release/v3.1.4
Oct 23, 2026
Merged

pacphi merged 5 commits into
v3.1.xfrom
release/v3.1.4

Conversation

@pacphi

@pacphi pacphi commented Oct 23, 2026 •

Copy link
Copy Markdown
Owner

Summary

This PR prepares the v3.1.4 patch release from the v3.1.x maintenance branch. There is no release candidate. It also moves v3.1.x onto the owner's dependency-audit standard. #385's security fixes are already on the branch; this PR adds the audit standard, the release-workflow fixes and the version bump.

No tag is created here. The tag is pushed after merge; see "Tagging" below.

Commits

1. ci(v3.1.x): standard Dependency Audit with native .cargo/audit.toml

  • Ignores moved. The 3 ignores in v3/audit-ignore now live in v3/.cargo/audit.toml under [advisories] ignore, and v3/audit-ignore is deleted. Each entry keeps its path, reasoning, reachability and exit condition, and now also has its RustSec link.
  • Job renamed. Security Audit becomes Dependency Audit. The new job:
    • pins cargo-audit to 0.22.2: cargo binstall --locked cargo-audit@0.22.2, with a SHA-pinned cargo-bins/cargo-binstall v1.17.7;
    • runs cargo audit --deny warnings in v3/;
    • has no if:, and the run-audit dispatch input is removed.
  • Path filters dropped from ci-v3.yml (deliberate). Every push and PR on v3.1.x now runs the workflow:
    • The required Dependency Audit check always reports, so no PR can wait forever on a check that never runs.
    • Every push to v3.1.x builds the CI image that the release promotes.
    • The cost is that every v3.1.x PR now runs the full v3 matrix (images, k8s).
  • Audit failures fail the aggregates. CI v3 Required Checks and CI v3 Status both fail when Dependency Audit is anything but success.
  • Trivy pinned. aquasecurity/trivy-action is pinned to ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0, which is the annotated tag dereferenced to its commit. It also sets version: v0.76.0, the newest Trivy release at least 3 days old; v0.76.1 came out 2026-10-21T11:18Z.
  • make v3-audit. .github/scripts/v3/cargo-audit.sh now runs the same command, and make v3-audit installs cargo-audit --version 0.22.2 --locked.

2. ci(v3.1.x): release the v3 line from v3.1.x

  • mark-passed (in ci-v3.yml) now runs for pushes to refs/heads/v3.1.x as well as main. This produces v3-ci-passed-<sha>-{ubuntu,fedora,opensuse}, the images verify-ci-image looks for first.
  • update-version-files (in release-v3.yml):
    • It checks out ref: v3.1.x instead of main and pushes HEAD:v3.1.x.
    • A new guard step. The old logic skipped only the CHANGELOG step. It then still bumped Cargo.toml to 3.1.5, re-resolved the whole lockfile with cargo generate-lockfile, and tried to push. Now, when v3/CHANGELOG.md already has ## [<version>] and [workspace.package] version already equals the tag version, the job skips every later step: download, changelog, bump, toolchain, lockfile regeneration, commit and push. The job still succeeds.
    • Both hold for 3.1.4 after this PR. I simulated the guard locally: 3.1.4 gives skip=true and 3.1.5 gives skip=false.
  • Floating actions SHA-pinned in the jobs touched here (mark-passed, verify-ci-image, publish-npm, update-version-files), in main's @<sha> # vX.Y.Z style:
    • checkout v6.1.0, setup-node v4.4.0, download-artifact v8.0.2, rust-toolchain stable @ b725eda (2026-10-16).
    • docker/login-action is pinned to v4.6.0, because @v4 now resolves to v4.7.0 (published 2026-10-23T15:22Z, under 3 days old).

3. chore(v3.1.x): prepare v3.1.4

  • Cargo. The v3/Cargo.toml workspace version goes 3.1.3 → 3.1.4, and all 12 crates inherit it. v3/Cargo.lock was updated with cargo update -w, which changes only the 12 sindri-* version lines.
  • rust-version goes "1.94" → "1.94.1". aws-sdk-s3 ≥ 1.140 and the matching aws-* crates already require it, and rust-toolchain.toml already pins 1.94.1. This is a patch-level change.
  • npm packages. Every packages/@pacphi/sindri-cli*/package.json version, and the wrapper's 5 optionalDependencies, go 3.1.0 → 3.1.4.
  • v3/CHANGELOG.md gets a ## [3.1.4] - 2026-10-23 entry summarizing deps(v3.1.x): consolidate dependency updates and security fixes #385's security fixes and this PR. Prettier also normalized blank lines in older entries (whitespace only), because the pre-commit prettier --check requires it.

4. docs(v3.1.x): describe 3.1.4 as a v3.1.x patch release in the CHANGELOG

  • Rewords the entry's opening line. SECURITY.md keeps v3 supported with ongoing v3.1.x releases, so the entry no longer calls 3.1.4 the line's "final" release.

5. ci(v3.1.x): pin release actions

  • Every action in release-v3.yml is now pinned by commit SHA with a # vX.Y.Z comment. Each is at the newest release in its major (0.x: minor) that is at least 3 days old.
  • Most pins are the same commits the floating tags resolve to today.
  • Two pins change what runs:
    • docker/login-action is pinned to v4.6.0; @v4 now points at v4.7.0, which is under 3 days old.
    • sigstore/cosign-installer moves from v4.1.0 to v4.1.2.
  • make_latest is unchanged, so v3.1.4 becomes GitHub's Latest release.

Audit

Check Result
cd v3 && cargo audit --deny warnings with only .cargo/audit.toml (cargo-audit 0.22.2, 1351 advisories, 599 crates) exit 0
Same command with .cargo/audit.toml removed (control) fails on exactly RUSTSEC-2026-0374, -0173 and 2024-0449
Vulnerabilities ignored none; all 3 ignores are unmaintained warnings

What release-v3.yml will do for tag v3.1.4

The tag push runs the workflow file as of the tagged commit, which is this branch's version of the file.

Job Action
validate-tag version=3.1.4, is_prerelease=false
generate-changelog Commits in v3.1.3..v3.1.4 touching v3/; this becomes the GitHub Release body (not the CHANGELOG.md entry)
build-binaries linux x86_64, linux aarch64 (cross), macOS aarch64, windows x86_64; rustc 1.94.1 from v3/rust-toolchain.toml; binaries report sindri 3.1.4
verify-ci-image Looks for v3-ci-passed-<tagged sha>-ubuntu, then v3-ci-<sha>-ubuntu, then up to 10 ancestors with no container-affecting change
promote-image Re-tags the CI images (no rebuild) for ubuntu, fedora and opensuse; see the tag list below
sign-image cosign sign --yes (keyless, by digest) for 3.1.4-{ubuntu,fedora,opensuse}
attest-provenance actions/attest-build-provenance for each distro's 3.1.4-<distro> digest
generate-sbom SPDX SBOM of :3.1.4, attached with cosign attach sbom, and uploaded as an artifact
publish-npm Platform packages and the wrapper; see the details below
update-version-files Checks out v3.1.x; the guard finds [3.1.4] and Cargo 3.1.4, so it skips without pushing
create-release "Sindri v3.1.4 (Rust)", not a prerelease, so it becomes GitHub's "Latest". Assets: 4 binaries, .sha256 files, checksums.txt, install-v3.sh, VERIFY.md, sbom.spdx.json
notify-release Logs success; opens an issue on failure

promote-image tags:

  • Every distro: 3.1.4-<d>, 3.1-<d>, 3-<d>, <d>, latest-<d>.
  • ubuntu only: also 3.1.4, 3.1, 3, v3, v3-latest, latest.
  • Registries: GHCR always; Docker Hub only if DOCKERHUB_USERNAME and DOCKERHUB_TOKEN are set, and neither is a repository secret today.

publish-npm:

  • npm publish --provenance --access public --tag latest for @pacphi/sindri-cli-{linux-x64,linux-arm64,darwin-arm64,win32-x64}@3.1.4, then for the @pacphi/sindri-cli@3.1.4 wrapper.
  • Today latest points to 3.1.3 for all of them.
  • @pacphi/sindri-cli-darwin-x64 is in the wrapper's optionalDependencies but is never built or published. That was already true for 3.1.3. npm skips the missing optional package, and npm install @pacphi/sindri-cli@3.1.3 works, but Intel Macs get no binary.

Tagging

  • Tag the commit this PR becomes on v3.1.x (git rev-parse origin/v3.1.x right after merge).
  • Wait first. Before pushing the tag, wait until that commit's own v3: CI push run has finished Mark Promotion Candidates.
  • Push nothing else to v3.1.x in between. ci-v3 uses cancel-in-progress, and no v3.1.x commit has a v3-ci-passed-* image yet. The ancestor fallback also stops at this PR, because it changes v3/.

Unverified / for the owner

  • Can't run before a tag: build-binaries (especially the cross aarch64 build, which installs cross from git HEAD), the npm publish, cosign signing and the attestations.
  • NPM_TOKEN was last updated 2026-03-21. Confirm it is still valid at npmjs.com before tagging. If it isn't, publish-npm fails after the images have already been promoted.
  • v3/CHANGELOG.md has no [3.1.3] entry: the release bot pushed that one to main. I didn't backfill it.
  • Hooks. Pre-commit hooks ran on every commit with PNPM_CONFIG_VERIFY_DEPS_BEFORE_RUN=false, because of the known pnpm.overrides issue.

🤖 Generated with Claude Code

- Migrate the three documented ignores from v3/audit-ignore to
  v3/.cargo/audit.toml ([advisories] ignore), adding advisory links,
  and delete v3/audit-ignore.
- Replace the "Security Audit" job with "Dependency Audit": cargo-audit
  pinned to 0.22.2 (SHA-pinned binstall), `cargo audit --deny warnings`
  run in v3/, no `if:`, so it runs on every push, pull_request and
  workflow_dispatch. Drop the run-audit dispatch input.
- Drop the ci-v3.yml path filters so the check always reports on
  v3.1.x PRs and pushes.
- CI v3 Required Checks and CI v3 Status now fail when Dependency Audit
  is anything but success.
- Pin aquasecurity/trivy-action by SHA to v0.36.0 with Trivy v0.76.0.
- cargo-audit.sh (used by `make v3-audit`) now runs the same command;
  `make v3-audit` installs cargo-audit 0.22.2 --locked.
- ci-v3.yml mark-passed also runs for pushes to v3.1.x, so the commit a
  v3.1.x release tag points at gets the v3-ci-passed-<sha>-<distro>
  images that release-v3.yml's verify-ci-image looks up.
- release-v3.yml update-version-files checks out v3.1.x instead of main
  (main has no v3 product code and is protected) and pushes HEAD:v3.1.x.
  A new guard step skips the changelog, the next-version bump, the
  Cargo.lock regeneration and the push when v3/CHANGELOG.md already has
  the released version and v3/Cargo.toml already carries it, which the
  release PR provides.
- SHA-pin the floating actions in the jobs touched here (mark-passed,
  verify-ci-image, publish-npm, update-version-files). docker/login-action
  is pinned to v4.6.0 because the v4 tag now points at v4.7.0, which is
  under 3 days old.
- v3/Cargo.toml workspace version 3.1.3 -> 3.1.4 (all 12 crates inherit
  it); v3/Cargo.lock updated with `cargo update -w` (only the 12 sindri-*
  version lines change).
- rust-version "1.94" -> "1.94.1": the dependency set (aws-sdk-s3 >= 1.140
  and the matching aws-* crates) already requires rustc 1.94.1, which
  v3/rust-toolchain.toml pins. Patch-level, within the line.
- packages/@pacphi/sindri-cli* package.json: version and the wrapper's
  optionalDependencies 3.1.0 -> 3.1.4 (publish-npm also sets them from the
  tag at release time).
- v3/CHANGELOG.md: add the [3.1.4] - 2026-10-23 entry summarising #385's
  security fixes and this PR. Prettier also normalised blank lines in
  older entries (whitespace only), which the pre-commit check requires.
SECURITY.md keeps v3 supported with ongoing v3.1.x releases, so the entry
should not call 3.1.4 the line's final release.
Pin every action in the v3 release workflow (release-v3.yml) by commit
SHA, with a `# vX.Y.Z` comment, at the newest release within its current
major (0.x: minor) that is at least 3 days old. This covers
build-binaries, generate-changelog, promote-image, sign-image,
attest-provenance, generate-sbom, create-release and notify-release;
the jobs already pinned earlier use the same SHAs.

- actions/checkout v6.1.0, actions/upload-artifact v7.0.2,
  actions/download-artifact v8.0.2, actions/cache v5.1.0,
  actions/attest-build-provenance v4.2.2, actions/github-script v8.0.0,
  docker/metadata-action v6.2.0, softprops/action-gh-release v2.6.2,
  anchore/sbom-action v0.22.2, dtolnay/rust-toolchain stable (b725eda):
  the same commits their floating tags resolve to today.
- docker/login-action v4.6.0: the v4 tag now points at v4.7.0
  (published 2026-10-23), which is under 3 days old.
- sigstore/cosign-installer v4.1.0 -> v4.1.2 (patch, 2026-05-07).

No behaviour change otherwise; make_latest is left unset, so a stable
v3 release still becomes GitHub's Latest release.
@pacphi
pacphi merged commit 815592f into v3.1.x Oct 23, 2026
42 checks passed
@pacphi
pacphi deleted the release/v3.1.4 branch October 23, 2026 21:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant