fix: move floating major tag from release-please workflow#10
Merged
Conversation
The standalone update-major-tag workflow does not fire when release-please pushes the version tag, because workflows triggered by GITHUB_TOKEN do not trigger downstream workflows. Move the tag in the same workflow that created the release so the major tag stays in sync with each release.
3 tasks
phramz
added a commit
that referenced
this pull request
Apr 17, 2026
Standalone tag-triggered workflows (release-action, update-major-tag) never fired for release-please releases because tag pushes made with the default GITHUB_TOKEN do not trigger downstream workflows. This left v1.0.1 and v1.1.0 with no phpup-linux-amd64 asset, breaking `uses: buildrush/setup-php@v1` consumers whose action JS resolves the release tag and tries to download from `releases/download/<tag>/...`. Fold the build + upload steps (and the already-migrated major-tag move) into release-please.yml so they run in the same job that creates the release -- same pattern PR #10 used for the major-tag move. Delete the now-redundant release-action.yml and update-major-tag.yml. After this change no workflow triggers on `push: tags: ...`, closing the class of bug entirely.
3 tasks
phramz
added a commit
that referenced
this pull request
Apr 17, 2026
Standalone tag-triggered workflows (release-action, update-major-tag) never fired for release-please releases because tag pushes made with the default GITHUB_TOKEN do not trigger downstream workflows. This left v1.0.1 and v1.1.0 with no phpup-linux-amd64 asset, breaking `uses: buildrush/setup-php@v1` consumers whose action JS resolves the release tag and tries to download from `releases/download/<tag>/...`. Fold the build + upload steps (and the already-migrated major-tag move) into release-please.yml so they run in the same job that creates the release -- same pattern PR #10 used for the major-tag move. Delete the now-redundant release-action.yml and update-major-tag.yml. After this change no workflow triggers on `push: tags: ...`, closing the class of bug entirely.
phramz
added a commit
that referenced
this pull request
Apr 17, 2026
A standalone `v1` GitHub Release (uploaded out-of-band when PR #10 force-pushed the v1 git tag and triggered the old release-action.yml) was still pinning `@v1` consumers to stale v1.0.1-era assets: the resolver found /releases/tags/v1 -> 200 and returned `v1`, downloading the pre-coverage-install binary that made PHPUnit report "No code coverage driver available / No tests executed". Codify the contract that the vN git tag is a `uses:` convenience and must never have a matching release: - src/index.js:resolveReleaseTag skips /releases/tags/<ref> for floating-major refs (/^v\d+$/), resolving through /releases/latest + major-match. Also propagates 404 as an error for specific-version pins (/^v\d+\.\d+\.\d+/) instead of silently substituting latest (which violated pin reproducibility). - release-please.yml adds a defense-in-depth step that deletes any standalone vN release after each release cut. - Unit tests cover the regression directly (ignores a standalone floating-major release) plus the pin-respect tightening. - CLAUDE.md documents the release-artifact contract. Post-merge cleanup (out of band): `gh release delete v1 v1.0.1 v1.1.0` to purge the stale + empty-asset releases while keeping the git tags.
5 tasks
phramz
added a commit
that referenced
this pull request
Apr 17, 2026
A standalone `v1` GitHub Release (uploaded out-of-band when PR #10 force-pushed the v1 git tag and triggered the old release-action.yml) was still pinning `@v1` consumers to stale v1.0.1-era assets: the resolver found /releases/tags/v1 -> 200 and returned `v1`, downloading the pre-coverage-install binary that made PHPUnit report "No code coverage driver available / No tests executed". Codify the contract that the vN git tag is a `uses:` convenience and must never have a matching release: - src/index.js:resolveReleaseTag skips /releases/tags/<ref> for floating-major refs (/^v\d+$/), resolving through /releases/latest + major-match. Also propagates 404 as an error for specific-version pins (/^v\d+\.\d+\.\d+/) instead of silently substituting latest (which violated pin reproducibility). - release-please.yml adds a defense-in-depth step that deletes any standalone vN release after each release cut. - Unit tests cover the regression directly (ignores a standalone floating-major release) plus the pin-respect tightening. - CLAUDE.md documents the release-artifact contract. Post-merge cleanup (out of band): `gh release delete v1 v1.0.1 v1.1.0` to purge the stale + empty-asset releases while keeping the git tags.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
update-major-tagworkflow never fires for release-please releases, because tag pushes made withGITHUB_TOKENdo not trigger downstream workflows. Result:v1was stuck onv1.0.0afterv1.0.1shipped, breakinguses: buildrush/setup-php@v1consumers (the oldsrc/index.jslacked the API-based tag resolution and 404'd onreleases/download/v1/...).release-please.ymlitself so it runs in the same workflow that created the release, sidestepping the trigger restriction.v1floating tag was force-moved tov1.0.1out of band to unblock consumers immediately.Test plan
vNtag automatically.update-major-tag.ymlcan be removed in a follow-up once verified.