Releases are automated via .github/workflows/release.yml. Pushing a git tag triggers CI which:
- Runs
bun run typecheck+bun test ./src/ - Publishes to npm (with provenance attestation, via Trusted Publishing OIDC)
Vault has no container image artifact — the ghcr.io step that ships with the hub workflow is intentionally omitted here. If a vault image ever becomes useful, add a publish-image job mirroring hub's.
Per governance rule 2:
| Tag shape | Example | npm dist-tag |
|---|---|---|
vX.Y.Z-rc.N |
v0.4.8-rc.7 |
rc |
vX.Y.Z |
v0.4.8 |
latest |
The workflow auto-detects rc vs stable from the tag string (-rc. substring).
After your PR merges to main with a bumped rc.N:
git fetch && git checkout main && git pull --ff-only
VERSION="v$(node -p "require('./package.json').version")"
git tag "$VERSION"
git push origin "$VERSION"CI takes over from there — watch the run at Actions.
When the rc chain is ready to release:
- Open a PR that drops the
-rc.Nsuffix frompackage.json(e.g.0.4.8-rc.7→0.4.8). - Reviewer + merge as usual.
- Tag the merged commit with the bare version:
git tag v0.4.8 && git push origin v0.4.8. - CI publishes with
dist-tag=latest.
Per governance, doc-only PRs are EXEMPT from rc.N bumping — they merge without a version bump and get picked up by the next code-touching PR's rc bump (or by the stable promotion, whichever comes first). Don't fragment a release into many patch bumps mid-validation.
If you DO need to ship a doc-only fix outside an active rc chain (i.e. main is on a stable version with no rc.N in flight), bump the next patch (0.4.8 → 0.4.9), tag, ship.
Before the workflow can publish, this repo needs:
-
npm Trusted Publisher: log into npmjs.com → package
@openparachute/vault→ Settings → Trusted Publishers → "Add a new publisher" → choose GitHub Actions. Fill:- Organization:
ParachuteComputer - Repository name:
parachute-vault - Workflow filename:
release.yml - Environment name: (leave blank)
No
NPM_TOKENsecret needed — the workflow uses OIDC. - Organization:
npm view @openparachute/vault@<version> dist.tarball
npm view @openparachute/vault dist-tagsThe npm tarball page links to the GitHub Actions run that produced it (provenance attestation).
There's no "unpublish" path for npm (strict 72-hour unpublish policy that you should avoid for published packages anyway). To roll back:
- Cut a new patch from a known-good commit (e.g.
0.4.8→0.4.9reverting the bad change). - Tag + push; CI republishes with the higher version under the same dist-tag.
- Workflow doesn't trigger: confirm the tag matches the workflow's
on.push.tagspattern (v[0-9]+.[0-9]+.[0-9]+orv[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+). version mismatcherror in publish-npm: package.json version differs from the tag. Re-tag the correct commit.npm ERR! 403 You do not have permission to publish: Trusted Publisher rule on npm doesn't match this workflow. Verify org/repo/workflow filename are exactlyParachuteComputer/parachute-vault/release.yml. If the workflow file was renamed, the rule needs updating on npm.npm ERR! 401 Unauthorizedwith no OIDC token: the workflow is missingpermissions: id-token: writeat the job level. Verify the YAML.