Skip to content

fix(release): select exactly one package per package-specific tag - #53

Merged
arobertherz merged 3 commits into
release/2.2.xfrom
fix/release-package-tag
Nov 7, 2026
Merged

arobertherz merged 3 commits into
release/2.2.xfrom
fix/release-package-tag

Conversation

@arobertherz

Copy link
Copy Markdown
Owner

Summary

Release selection no longer derives packages from a shared v* tag. Exactly one package is staged, via a package-specific tag (cli-vX, loader-vX, modules-vX) or the same value as a workflow_dispatch input ref.

  • The version after -v must match that package's package.json character-for-character (no semver compare, no registry lookup).
  • Shared v* tags no longer start staging.
  • The workflow validates the ref, then checks out refs/tags/<validated ref> so a same-named branch cannot win.
  • Staging still uses npm stage publish under dist-tag next, never latest.
  • No package version bump in this PR.

Head: 470402ac8afbfee81533706301aa9e38a958c5ec (Donna §7a PASS, report 20261107-155643, 47/47). Base: current release/2.2.x at d531d300a9a793618ecc9230328d3db6f7cb7cd0 (fast-forward of those three commits only).

Files

  • .github/workflows/release.yml
  • scripts/check-release-version.mjs
  • packages/cli/src/lib/__tests__/check-release-version.test.js
  • RELEASING.md

Out of scope

No tag, no npm stage, no publish, no re-release of @stagepass/modules@2.2.2. A later release still needs an explicit package and version.

Checklist

  • Tests workflow green on fix/** push (cerebro-stagepass)
  • Merge as a merge commit (keep reviewed SHA 470402a reachable; no squash/rebase)

Replace shared v-tag matching with an explicit package tag
(cli-vX, loader-vX, modules-vX) or the same ref via workflow_dispatch.
Verify that package.json version equals the tag version. Unknown or
shared v-tags fail closed and do not stage.
Pass the package ref through RELEASE_REF instead of interpolating it
into shell. Reject anything outside cli|loader|modules-vX.Y.Z with an
optional prerelease suffix. workflow_dispatch checks out that ref with
no stored credentials. Tests cover injection and malformed refs.
Check out refs/tags/<validated ref> so a same-named branch cannot
win. Fail the job when stage_dir is missing instead of skipping.
An empty CLI argument does not fall back to the environment; only
an omitted argument may use RELEASE_REF or GITHUB_REF_NAME. Process
tests cover main() exit status, GITHUB_OUTPUT, and the workflow
shape.
@arobertherz
arobertherz merged commit 0898091 into release/2.2.x Nov 7, 2026
2 checks passed
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