Skip to content

Polish release notes with AI (nicer GitHub release body + in-app update dialog) #54

Description

@ApocDev

release-please generates the changelog and GitHub release notes as a flat, grouped list of commit subjects (Features / Bug Fixes, each with a commit hash and link). It is an accurate record but dry — a busy release is dozens of raw bullets with no summary or emphasis.

This matters more than usual because the release notes are surfaced in two user-facing places: the GitHub Releases page, and the in-app update dialog. The desktop shell's latest-json job copies the GitHub release body into latest.json's notes field, and the updater dialog renders that markdown. So nicer release notes directly improve the update experience, not just the releases page.

Goal

Produce polished, human-friendly release notes (a short prose summary plus themed highlights) for the GitHub release body, while keeping CHANGELOG.md as the deterministic, commit-derived record. release-please owns CHANGELOG.md and it should stay reproducible — do not AI-rewrite it.

Approach options

  • A small inline step in .github/workflows/release.yml that takes the commit range for the release, calls an LLM (the project already has OpenRouter/Claude access), and sets the polished text as the release body (e.g. gh release edit --notes). Most control, reuses existing model access, runs in a guaranteed order.
  • An off-the-shelf OSS action such as AndreaBonn/ai-changelog-generator (Apache-2.0, writes the release body, supports Claude/OpenAI/Gemini/Groq). If used, pin it to a reviewed commit SHA rather than a floating tag — it is currently unproven (single release, no stars).
  • Non-AI alternative: git-cliff templates for a prettier deterministic list, with no API cost or variability.

Requirements and gotchas

  • Update the release body before the latest-json job reads it, or the dialog shows the raw list while the releases page shows the polished one. An inline step sequenced ahead of latest-json avoids the race a separate release: published trigger would have.
  • Needs an LLM API key as an Actions secret.
  • Constrain the model to summarize and reorganize the actual commits — it must not invent changes. Consider drafting the notes into the release PR so they can be reviewed before publishing.
  • Fail open: if the key is missing or the call errors, fall back to release-please's raw notes so a release is never blocked.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions