Skip to content

fix(ci): rebuild the release pipeline to stop the version-bump runaway loop - #30

Merged
bougyman merged 1 commit into
mainfrom
fix-release-loop
Aug 9, 2026
Merged

fix(ci): rebuild the release pipeline to stop the version-bump runaway loop#30
bougyman merged 1 commit into
mainfrom
fix-release-loop

Conversation

@bougyman

@bougyman bougyman commented Aug 9, 2026

Copy link
Copy Markdown
Member

Summary

draft:true (#18/#19) desynced release-please's own tracking from GitHub's actual release state once we published drafts ourselves via a raw gh release edit --draft=false, outside release-please's own process. Every subsequent run re-included already-released commits and kept bumping minor forever (0.2.1 -> 0.3.0 -> 0.3.1 -> 0.4.0 -> 0.5.0 -> 0.6.0 -> 0.7.0 -> a pending 0.8.0 PR).

Split release-please's responsibilities into two workflows:

  • release-pr.yaml: runs on every push to main, skip-github-release: true - manages the version-bump PR only (manifest/CHANGELOG.md/app/mix.exs), never touches tags/releases at all, so it has nothing left to get confused about.
  • release.yaml: triggers only when that PR merges (pull_request: closed filtered to release-please--branches--main merging - approving the release is the trigger, not every push). Builds the Burrito binaries/tarballs/checksums first, reads the version straight from the manifest release-pr.yaml already bumped, then creates the tag + release + uploads every asset in one atomic gh release create call. No separate release object ever sits around waiting for a later upload, so Immutable Releases (GA Oct 2025, the reason Releases ship with zero assets - GitHub's Immutable Releases locks them before the build finishes #18 existed) never gets a chance to lock us out.

Also reverts .release-please-config.json's draft: true - unused now that release-please never creates the release itself. burrito-release.yaml is removed; its steps are folded directly into release.yaml.

Follow-up needed after this merges: close the stray "chore(main): release 0.8.0" PR (#29), opened under the old broken setup, and let release-please regenerate a clean one against this new pipeline.

Test plan

  • Both new/edited workflow YAML files validated with ruby -ryaml (not python - not reliably available)
  • Verified skip-github-release is release-please-action's real, documented input (checked its actual action.yml + README directly, including the exact migration-table semantics: this is what the old release-pr command did)
  • Verified release-please-action's own README documents the identical "build artifacts, run release-please, gh release upload if release_created" pattern we're now using (minus its release-creation step, which we do ourselves) - confirms this is well-trodden, not novel
  • Manually tested the exact version-extraction one-liner against the real .release-please-manifest.json
  • Next real release-please PR merge should build binaries, create exactly one tag/release with all assets attached, and not trigger any further automatic version bump

🤖 Generated with Claude Code

…y loop

draft:true (see #18/#19) desynced release-please's own tracking from
GitHub's actual release state once we published drafts ourselves via a
raw `gh release edit`, outside release-please's own process. Every
subsequent run re-included already-released commits and kept bumping
minor forever (0.2.1 -> 0.3.0 -> 0.3.1 -> 0.4.0 -> ... -> 0.8.0).

Split release-please's two jobs into two workflows:
- release-pr.yaml: runs on every push to main, skip-github-release:
  true - manages the version-bump PR only, never touches tags/releases
  at all, so it has nothing left to get confused about.
- release.yaml: triggers only when that PR merges (approving the
  release IS the trigger, not every push). Builds the Burrito
  binaries/tarballs/checksums first, reads the version straight from
  the manifest release-pr.yaml already bumped, then creates the tag +
  release + uploads every asset in one atomic `gh release create`
  call. No separate release object ever sits around waiting for a
  later upload, so Immutable Releases (GA Oct 2025, the reason #18
  existed) never gets a chance to lock us out.

Also reverts .release-please-config.json's draft:true - unused now
that release-please never creates the release itself.

Follow-up needed after this merges: close the stray "chore(main):
release 0.8.0" PR (#29) opened under the old broken config and let
release-please regenerate a clean one.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings August 9, 2026 23:02
@bougyman
bougyman merged commit c311fd4 into main Aug 9, 2026
3 checks passed
@bougyman
bougyman deleted the fix-release-loop branch August 9, 2026 23:03
bougyman pushed a commit that referenced this pull request Aug 9, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.7.1](v0.7.0...v0.7.1)
(2026-08-09)


### Bug Fixes

* **ci:** rebuild the release pipeline to stop the version-bump runaway
loop ([#30](#30))
([c311fd4](c311fd4))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Rebuilds the release automation to prevent release-please from repeatedly bumping versions due to draft/publish state drift, by separating “open/update release PR” from “build artifacts + create GitHub release”.

Changes:

  • Split responsibilities into a new release-pr workflow (version-bump PR only) and a release workflow (build + tag + release + asset upload).
  • Update the release workflow to trigger on merge of the release-please PR and create the GitHub release in a single gh release create step with all assets attached.
  • Revert release-please config draft setting since release-please no longer creates/releases GitHub Releases directly.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
.release-please-config.json Sets draft: false since release-please is no longer responsible for creating GitHub Releases.
.github/workflows/release.yaml Triggers release build/publish on merged release-please PR; builds Burrito artifacts, creates release atomically, and publishes container image.
.github/workflows/release-pr.yaml New workflow: runs on main pushes to open/update the release-please PR with skip-github-release: true.
.github/workflows/burrito-release.yaml Removed; its responsibilities are folded into release.yaml.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +66 to +76
run: |
missing=0
for target in lc_linux_x86_64 lc_macos_aarch64
do
if [ ! -f "burrito_out/$target" ]
then
printf '::error::missing required release artifact: %s\n' "$target"
missing=1
fi
done
[ "$missing" -eq 0 ]
Comment on lines +14 to 21
jobs:
burrito:
# Only when release-please's own release PR (always from this exact
# branch, see release-pr.yaml) actually merges - "approving the
# release PR" is the trigger for building, not every push to main.
if: github.event_name == 'workflow_dispatch' || (github.event.pull_request.merged == true && github.event.pull_request.head.ref == 'release-please--branches--main')
name: Build Burrito binaries and create the release
runs-on: ubuntu-latest
This was referenced Aug 11, 2026
bougyman pushed a commit that referenced this pull request Aug 11, 2026
🤖 I have created a release *beep* *boop*
---


##
[1.0.0](v1.0.0...v1.0.0)
(2026-08-11)


### ⚠ BREAKING CHANGES

* graduate to 1.0.0 - disable pre-major version bumping
([#70](#70))
* **cd:** parallelize Burrito target builds and fix Trivy/Podman image
scanning ([#68](#68))
* **ci:** rename release.yaml to main.yaml, workflow name to "main"
([#38](#38))
* add Readme/LICENSE, feat: wire up the issue list --project picker
([#12](#12))

### Features

* add mix githooks.install to activate the repo's git hooks
([#51](#51))
([9b35472](9b35472))
* **api:** add LinearCli.Api GraphQL client (Phase 1)
([723f3f6](723f3f6))
* **ci:** add a full SBOM - app deps, OTP/Elixir runtime, container OS
packages ([#54](#54))
([e296fdd](e296fdd))
* **cli:** add favorite teams/projects, filtering list views by them
([#61](#61))
([6c858d9](6c858d9))
* **cli:** add issue create/develop/pr/take/update write commands (Phase
6)
([1649618](1649618))
* **cli:** add profiles - default team/project stored in local SQLite
([#57](#57))
([554e336](554e336))
* **cli:** add project update - post a status update to a project
([#43](#43))
([30dc6dc](30dc6dc))
* **cli:** make version respect --output json
([#33](#33))
([b160aad](b160aad))
* **cli:** resolve bare issue numbers via active profile, favorited
teams, or a team prompt
([#65](#65))
([8b183da](8b183da))
* **cli:** support Ruby's short subcommand aliases
([#15](#15))
([9fca6b5](9fca6b5))
* initial commit with ash submodule
([c2ceafb](c2ceafb))
* **linear:** add Ash domain resources for
Issue/Project/Team/User/Label/WorkflowState/Comment (Phase 2)
([e2a27f3](e2a27f3))
* **oban:** add scheduled monthly project rollover (Phase 7)
([11afb43](11afb43))
* phase 4 from initial plan -&gt; complete
([012866e](012866e))
* phase 8 - packaging, releasing, and CI
([#1](#1))
([905c238](905c238))
* scaffold Elixir port and enforce conventional commits
([a4d03a0](a4d03a0))


### Bug Fixes

* **ci:** consolidate the release pipeline into one workflow/DAG
([ba821bb](ba821bb))
* **ci:** create releases as drafts so assets survive Immutable Releases
([#19](#19))
([8572623](8572623))
* **ci:** package release binaries with the wrapper scripts
([#24](#24))
([5fb24a4](5fb24a4))
* **ci:** rebuild the release pipeline to stop the version-bump runaway
loop ([#30](#30))
([c311fd4](c311fd4))
* **ci:** relabel the release PR as tagged after we tag it ourselves
([ab1408e](ab1408e))
* **ci:** skip commit-subject validation in the post-merge pipeline
([#41](#41))
([3d00a85](3d00a85))
* **cli:** reject unrecognized flags instead of treating them as issue
ids ([#2](#2))
([#4](#4))
([e697ff6](e697ff6))
* **deps:** update ash to a non-vulnerable version
([#63](#63))
([b838e2a](b838e2a))


### Performance Improvements

* **linear:** fan out find-by-ids and per-team project fetches (Phase 5)
([fb00153](fb00153))


### Documentation

* add Readme/LICENSE, feat: wire up the issue list --project picker
([#12](#12))
([eb42c69](eb42c69))


### Miscellaneous Chores

* **ci:** rename release.yaml to main.yaml, workflow name to "main"
([#38](#38))
([2581a40](2581a40))
* graduate to 1.0.0 - disable pre-major version bumping
([#70](#70))
([87a65ae](87a65ae))


### Continuous Integration

* **cd:** parallelize Burrito target builds and fix Trivy/Podman image
scanning ([#68](#68))
([5cc829a](5cc829a))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
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.

2 participants