Skip to content

feat: add goose-powered release notes generator workflow#7503

Merged
blackgirlbytes merged 19 commits intomainfrom
feat/goose-release-notes-workflow
Feb 26, 2026
Merged

feat: add goose-powered release notes generator workflow#7503
blackgirlbytes merged 19 commits intomainfrom
feat/goose-release-notes-workflow

Conversation

@blackgirlbytes
Copy link
Copy Markdown
Collaborator

@blackgirlbytes blackgirlbytes commented Feb 25, 2026

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

  1. Triggers when the Release workflow completes successfully (or manually via workflow_dispatch)
  2. Runs goose with the developer extension to analyze git history between tags
  3. Generates categorized release notes with:
    • ✨ Features
    • 🐛 Bug Fixes
    • 🔧 Improvements
    • 📚 Documentation
  4. Updates the GitHub Release page with the generated notes
  5. Posts to Discord with smart content splitting:
    • Main message: Header + as many complete bullet points as fit + @everyone ping
    • Thread: Remaining content split at line boundaries (never mid-item)

Configuration

Required Secrets:

  • RELEASE_BOT_ANTHROPIC_KEY - API key for Anthropic

Optional Secrets (for Discord):

  • DISCORD_RELEASE_BOT_TOKEN - Discord bot token for posting release announcements
  • DISCORD_RELEASE_BOT_CHANNEL_ID - Discord channel ID for release announcements

Default Settings:

  • GOOSE_PROVIDER: anthropic
  • GOOSE_MODEL: claude-opus-4-5

Testing

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_run instead of release: published?

GitHub doesn't trigger workflows for events created by GITHUB_TOKEN (to prevent infinite loops). Since release.yml publishes releases using GITHUB_TOKEN, a release: published trigger would never fire for automated releases.

The solution is to use workflow_run which triggers when another workflow completes - this does fire even when the original workflow used GITHUB_TOKEN. This follows the same pattern used by build-notify.yml in this repo.

Changes from initial implementation

  • Fixed YAML syntax errors (multiline string indentation)
  • Switched from OpenRouter to Anthropic (claude-opus-4-5)
  • Fixed trigger: Changed from release: published to workflow_run on Release workflow
  • Redesigned Discord posting to avoid cutting off content mid-item
  • Added @everyone ping in main message footer
  • Renamed secrets to be more descriptive (DISCORD_RELEASE_BOT_*)

Results

image image

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
@blackgirlbytes blackgirlbytes marked this pull request as ready for review February 26, 2026 04:17
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 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.
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 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".

Comment on lines +259 to +261
send_discord "$FULL_MSG" "$DISCORD_CHANNEL_ID"
echo "::notice::Discord notification sent successfully"
exit 0
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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 👍 / 👎.

@blackgirlbytes blackgirlbytes added this pull request to the merge queue Feb 26, 2026
Merged via the queue into main with commit 86186a9 Feb 26, 2026
21 checks passed
@blackgirlbytes blackgirlbytes deleted the feat/goose-release-notes-workflow branch February 26, 2026 05:11
tlongwell-block added a commit that referenced this pull request Feb 27, 2026
…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
lifeizhou-ap added a commit that referenced this pull request Mar 2, 2026
* main:
  feat: add goose-powered release notes generator workflow (#7503)
craigwalkeruk pushed a commit to craigwalkeruk/custom-goose that referenced this pull request Mar 5, 2026
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.

3 participants