docs: describe atomic release publication
Some checks failed
CI / self-guards (pull_request) Successful in 9s
CI / release-exercise (pull_request) Successful in 13s
CI / action-exercise (pull_request) Successful in 6s
CI / docs-sync-exercise (pull_request) Successful in 6s
labels / labels (pull_request) Successful in 8s
Refs guard / refs-not-closing (pull_request) Successful in 6s
CI / test (pull_request) Failing after 42s
Some checks failed
CI / self-guards (pull_request) Successful in 9s
CI / release-exercise (pull_request) Successful in 13s
CI / action-exercise (pull_request) Successful in 6s
CI / docs-sync-exercise (pull_request) Successful in 6s
labels / labels (pull_request) Successful in 8s
Refs guard / refs-not-closing (pull_request) Successful in 6s
CI / test (pull_request) Failing after 42s
This commit is contained in:
parent
734676ab7d
commit
20cba4583d
2 changed files with 6 additions and 3 deletions
|
|
@ -109,7 +109,7 @@ consumer's release, when it is stale.)
|
|||
|
||||
**The merge is the ship decision; the tag is transcription.** After the
|
||||
merge, [release.yml](.github/workflows/release.yml#L136-L301) asserts its
|
||||
way to certainty, tags the merge commit, publishes the GitHub release with
|
||||
way to certainty, tags the merge commit, publishes the forge release with
|
||||
the version's own changelog section as the body — the curated prose, never
|
||||
the generated PR list ([lib/changelog.sh](lib/changelog.sh) is the one
|
||||
canonical extractor, and [bin/changelog-section](bin/changelog-section) is
|
||||
|
|
@ -127,7 +127,7 @@ steps run past the tag, and what a failure at each leaves behind is what
|
|||
sorts them. Two fail before the release exists: the consumer's
|
||||
[artifact hook](docs/CONSUMERS.md#the-artifact-hook) sits between the tag and
|
||||
the publish, so its non-zero exit aborts, and the publish itself
|
||||
([`gh release create --verify-tag`](.github/workflows/release.yml#L246-L258))
|
||||
([`forge_release_create`](.github/workflows/release.yml#L255-L268))
|
||||
can fail on the API call or the assets. Either leaves the same state — a tag
|
||||
standing and no release — which the
|
||||
[nothing-exists assert](#the-merge-door-refused-releaseyml) names and the tag
|
||||
|
|
@ -491,7 +491,7 @@ the thing twice. If the tag exists but the release does not (a manual tag
|
|||
won the race, or
|
||||
[a failed artifact hook](docs/CONSUMERS.md#the-artifact-hook), or the publish
|
||||
step itself failing after the tag), recover by the tag door: delete and
|
||||
re-push the tag, or `gh release create` by hand from a fixed tree.
|
||||
re-push the tag, or run `forge_release_create` by hand from a fixed tree.
|
||||
|
||||
> direct push refused (branch protection?) — opening the bump PR instead
|
||||
|
||||
|
|
|
|||
3
changelog.d/271.md
Normal file
3
changelog.d/271.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
### Fixed
|
||||
|
||||
- Forgejo release publishing now stages drafts until assets upload, rolls back failures, and recovers stranded same-tag drafts before retrying (#271).
|
||||
Loading…
Reference in a new issue