The release workflow passes its notes by file, caps a long page and checks the release exists (#1154) #1155

Merged
claude-bot merged 1 commit from fix/1154-release-notes-by-file into main 2026-10-13 00:54:21 +00:00
Collaborator

Fixes #1154.

The failure

On v4.5.0 the "Create Forgejo release" job died with exec /usr/bin/bash: argument list too long: the notes went through a step output into the release action's release-notes input, and the [4.5.0] section is 344 KB. It had been failing on prereleases too, unnoticed, because the images job succeeded.

What changes

  • Notes by file. scripts/changelog.py release-notes --tag … --out release-notes.md writes them; the release is created with the API from that file (jq --rawfile, curl --data-binary). Nothing long travels through an output, an environment value or an argument.
  • A capped page. Over 60,000 characters the body is the section's preamble, a count of entries per heading, and a link to the full section at the tag (changelog.d/ for a prerelease). The 4.5.0 section comes out at 1,172 characters. Under the cap, the full notes as before.
  • Create or update. A release that already exists for the tag (a re-run, or v4.5.0's hand-made one) is updated, not a failure.
  • A missing release turns the job red: a last step reads the release back and checks the tag and a non-empty body.
  • docs/OPERATIONS.md: both release procedures gain "check the release page exists".
  • The forgejo-release action is no longer used; the job uses the run's own token, as the action did.

Checks

  • The changelog script's tests: 26 passed (6 new). Ruff: clean. changelog.py check: OK. The workflow file parses.
  • Not run: the workflow itself. It only runs on a tag, so its first real run is v4.5.1-rc1. Not confirmed: that the run's token may write releases through the API directly (the action used the same token), and that jq is on the runner image.

🤖 Generated with Claude Code

Fixes #1154. ## The failure On `v4.5.0` the "Create Forgejo release" job died with `exec /usr/bin/bash: argument list too long`: the notes went through a step output into the release action's `release-notes` input, and the `[4.5.0]` section is 344 KB. It had been failing on prereleases too, unnoticed, because the images job succeeded. ## What changes - **Notes by file.** `scripts/changelog.py release-notes --tag … --out release-notes.md` writes them; the release is created with the API from that file (`jq --rawfile`, `curl --data-binary`). Nothing long travels through an output, an environment value or an argument. - **A capped page.** Over 60,000 characters the body is the section's preamble, a count of entries per heading, and a link to the full section at the tag (`changelog.d/` for a prerelease). The 4.5.0 section comes out at 1,172 characters. Under the cap, the full notes as before. - **Create or update.** A release that already exists for the tag (a re-run, or `v4.5.0`'s hand-made one) is updated, not a failure. - **A missing release turns the job red:** a last step reads the release back and checks the tag and a non-empty body. - `docs/OPERATIONS.md`: both release procedures gain "check the release page exists". - The `forgejo-release` action is no longer used; the job uses the run's own token, as the action did. ## Checks - The changelog script's tests: 26 passed (6 new). Ruff: clean. `changelog.py check`: OK. The workflow file parses. - **Not run: the workflow itself.** It only runs on a tag, so its first real run is `v4.5.1-rc1`. Not confirmed: that the run's token may write releases through the API directly (the action used the same token), and that `jq` is on the runner image. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(repo): release notes go through a file and the API, capped in size (#1154)
All checks were successful
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m7s
CI / Backend lint (ruff) (pull_request) Successful in 41s
CI / Bot/backend version sync (pull_request) Successful in 34s
CI / Feedback site tests (pull_request) Successful in 1m1s
CI / Bot tests and audit (pull_request) Successful in 2m34s
CI / Does this change touch the recording path? (pull_request) Successful in 24s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Docker image build (pull_request) Successful in 2m44s
CI / Frontend (shard 2/2) (pull_request) Successful in 10m8s
CI / Frontend (shard 1/2) (pull_request) Successful in 12m2s
CI / End-to-end journeys (phone) (pull_request) Successful in 12m32s
CI / End-to-end journeys (keyboard) (pull_request) Successful in 13m39s
CI / End-to-end journeys (desktop) (pull_request) Successful in 17m22s
CI / Backend migration, tests, and audit (pull_request) Successful in 35m17s
ae9439daa6
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-bot scheduled this pull request to auto merge when all checks succeed 2026-10-13 00:18:35 +00:00
Sign in to join this conversation.
No description provided.