feat: add goose-powered release notes generator workflow#7503
feat: add goose-powered release notes generator workflow#7503blackgirlbytes merged 19 commits intomainfrom
Conversation
Automatically generates categorized release notes using goose AI agent when a new release is published. Updates the GitHub release page with AI-generated notes organized into Features, Bug Fixes, Improvements, and Documentation sections. - Triggers on release publish or manual workflow_dispatch - Uses goose with developer extension to analyze git history - Extracts PR numbers and creates linked release notes - Skips 'stable' tag releases (just pointers to versioned releases)
- Posts release announcement to Discord channel - Creates thread for long release notes (>1800 chars) - Uses Discord bot API for thread creation support - Requires DISCORD_BOT_TOKEN secret and DISCORD_RELEASE_CHANNEL_ID variable
…n thread by section
…_RELEASE_BOT_CHANNEL_ID
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2e1f22c9dc
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
GitHub doesn't trigger workflows for events created by GITHUB_TOKEN (to prevent infinite loops). Since release.yml publishes releases with GITHUB_TOKEN, the release:published trigger would never fire. Changed to workflow_run trigger on the Release workflow, which does fire even when the original workflow used GITHUB_TOKEN. This follows the same pattern used by build-notify.yml in this repo. - Added condition to only run when Release workflow succeeds - Extract tag from workflow_run.head_branch - Pass tag through job outputs for downstream jobs - Keep workflow_dispatch for manual testing
Pass GitHub context variables through env instead of direct interpolation to prevent potential shell injection attacks via crafted tag names.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5b02152f3d
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| send_discord "$FULL_MSG" "$DISCORD_CHANNEL_ID" | ||
| echo "::notice::Discord notification sent successfully" | ||
| exit 0 |
There was a problem hiding this comment.
Fail when single-message Discord post is rejected
In the short-message branch, the workflow calls send_discord and immediately reports success without checking whether Discord actually accepted the post. If the API returns an error (for example invalid bot permissions, bad channel ID, or rate limiting), send_discord emits a warning and returns an empty ID, but this path still exits 0, so release announcements can be silently dropped even though the job appears green.
Useful? React with 👍 / 👎.
…patible * origin/main: (70 commits) feat: allow goose askai bot to search goose codebase (#7508) Revert "Reapply "fix: prevent crashes in long-running Electron sessions"" Reapply "fix: prevent crashes in long-running Electron sessions" Revert "fix: prevent crashes in long-running Electron sessions" fix: replace unwrap() with graceful error in scheduler execute_job (#7436) fix: Dictation API error message shows incorrect limit (#7423) fix(acp): Use ACP schema types for session/list (#7409) fix(desktop): make bundle and updater asset naming configurable (#7337) fix(openai): preserve order in Responses API history (#7500) Use the correct Goose emoji 🪿 instead of Swan in README.md (#7485) feat(ui): implement fullscreen and pip display modes for MCP Apps (#7312) fix: prevent crashes in long-running Electron sessions Disable tool pair summarization (#7481) fix: New Recipe Warning does not close on cancel (#7524) The client is not the source of truth (#7438) feat: support Anthropic adaptive thinking (#7356) copilot instructions: reword no prerelease docs (#7101) fix(acp): don't fail session creation when model listing is unavailable (#7484) feat: simplify developer extension (#7466) feat: add goose-powered release notes generator workflow (#7503) ... # Conflicts: # Cargo.lock
* main: feat: add goose-powered release notes generator workflow (#7503)
Summary
Automatically generates categorized release notes using goose AI agent when a new release is published. Updates the GitHub release page with AI-generated notes and posts to Discord.
What it does
workflow_dispatch)Configuration
Required Secrets:
RELEASE_BOT_ANTHROPIC_KEY- API key for AnthropicOptional Secrets (for Discord):
DISCORD_RELEASE_BOT_TOKEN- Discord bot token for posting release announcementsDISCORD_RELEASE_BOT_CHANNEL_ID- Discord channel ID for release announcementsDefault Settings:
GOOSE_PROVIDER: anthropicGOOSE_MODEL: claude-opus-4-5Testing
Tested on fork: https://github.com/blackgirlbytes/goose/releases/tag/v1.25.0
Example generated release notes show proper categorization and PR linking.
Key Implementation Details
Why
workflow_runinstead ofrelease: published?GitHub doesn't trigger workflows for events created by
GITHUB_TOKEN(to prevent infinite loops). Sincerelease.ymlpublishes releases usingGITHUB_TOKEN, arelease: publishedtrigger would never fire for automated releases.The solution is to use
workflow_runwhich triggers when another workflow completes - this does fire even when the original workflow usedGITHUB_TOKEN. This follows the same pattern used bybuild-notify.ymlin this repo.Changes from initial implementation
release: publishedtoworkflow_runon Release workflowResults