The ask
An adopter's caller workflow should not have to name an exact patch version. Today init --workflow writes:
uses: simplycubed/code/.github/workflows/simplycubed.yml@v0.2.0
so every adopter is frozen on the release they installed under until someone edits their workflow. Worse, that file lives in .github/workflows/, which the App cannot push, so the agent can never upgrade its own caller. Every upgrade is manual, forever.
What is not possible
There is no latest for uses:. GitHub Actions resolves a tag, a branch, or a SHA and nothing else.
@main would float, which is not the same thing as latest-release: adopters would silently receive unreleased and breaking changes. v0.2.0 renamed two configuration values; on @main that would have broken every install with no warning and no version to point at.
What is possible
A moving major tag, republished on each release. actions/checkout@v4 works exactly this way, and it is what most adopters already expect from an Action.
uses: simplycubed/code/.github/workflows/simplycubed.yml@v0
Fixes reach adopters without them touching their workflow. A breaking change becomes a deliberate move to @v1, which is a decision they make rather than one that happens to them.
The cost is a release step: after tagging vX.Y.Z, force-update v0 to the same commit. Worth automating in tag-release.yml rather than remembering.
Not the same as the Go install pin
go install ...@v0 is not valid. Go modules need a real version, and proxy.golang.org records them immutably, which is the whole reason the release process refuses to retag. The CLI install command stays @<release-tag> with a link to Releases.
So the two pins deliberately diverge: the CLI is pinned exactly, the reusable workflow tracks a major. That is worth stating in docs/release.md, because it looks like an inconsistency until you know why.
Decide first
Work
- Publish and maintain the moving tag from
tag-release.yml.
- Point
latestKnownWorkflowTag and docs/templates/simplycubed-caller.yml at it.
- Teach
scripts/verify-release.sh what to enforce once the pins no longer all name the same string.
- Say in
docs/release.md why the CLI pin and the workflow pin differ.
Acceptance
The ask
An adopter's caller workflow should not have to name an exact patch version. Today
init --workflowwrites:so every adopter is frozen on the release they installed under until someone edits their workflow. Worse, that file lives in
.github/workflows/, which the App cannot push, so the agent can never upgrade its own caller. Every upgrade is manual, forever.What is not possible
There is no
latestforuses:. GitHub Actions resolves a tag, a branch, or a SHA and nothing else.@mainwould float, which is not the same thing as latest-release: adopters would silently receive unreleased and breaking changes. v0.2.0 renamed two configuration values; on@mainthat would have broken every install with no warning and no version to point at.What is possible
A moving major tag, republished on each release.
actions/checkout@v4works exactly this way, and it is what most adopters already expect from an Action.Fixes reach adopters without them touching their workflow. A breaking change becomes a deliberate move to
@v1, which is a decision they make rather than one that happens to them.The cost is a release step: after tagging
vX.Y.Z, force-updatev0to the same commit. Worth automating intag-release.ymlrather than remembering.Not the same as the Go install pin
go install ...@v0is not valid. Go modules need a real version, andproxy.golang.orgrecords them immutably, which is the whole reason the release process refuses to retag. The CLI install command stays@<release-tag>with a link to Releases.So the two pins deliberately diverge: the CLI is pinned exactly, the reusable workflow tracks a major. That is worth stating in
docs/release.md, because it looks like an inconsistency until you know why.Decide first
@v0the right level, given pre-1.0 minors may still break?v0.2moving within the minor is stricter and more honest about that.init --workflowwrite the moving tag, the exact tag, or offer both?Work
tag-release.yml.latestKnownWorkflowTaganddocs/templates/simplycubed-caller.ymlat it.scripts/verify-release.shwhat to enforce once the pins no longer all name the same string.docs/release.mdwhy the CLI pin and the workflow pin differ.Acceptance
init --workflowkeeps working across a patch release with no editverify-release.shstill refuses a release whose pins disagree