Release Notes: Drafts, In-App Notes and Sync
How imgcompress release notes are made: GitHub drafts them from PR labels, highlights lead, the image ships the notes and publishing syncs them to main.
How imgcompress release notes are made: GitHub drafts them from PR labels, highlights lead, the image ships the notes and publishing syncs them to main.
Release notes are written once and end up in three places: the GitHub release, the app and the docs.
Your highlights. Write them as the top entry of frontend/public/release-notes.md, with the release date or DateNeedsToBeReplaced:
markdown## v1.0.0 — 2026-10-26 ### Features - Add SVG import: …
They become the Features section of the draft, for the stable release and for its RCs. If the top entry is for another version, the draft uses GitHub's generated features.
Generated notes. GitHub lists every merged PR since the last stable release. The PR labels decide the section, set in .github/release.yml:
| Section | Labels |
|---|---|
| Features | enhancement, feature, breaking-change |
| Bug Fixes | bug, bugfix |
| Security Patches | security, CVEs, docker, digest refreshes |
| Dependencies | Dependabot and dependency updates (counted, not listed one by one) |
| Other Changes | everything else |
The layout follows the v0.9.0 release: version and date, changelog, new contributors, full changelog link, setup link and the pinned image tag. RCs start with a short note that they are for testing.
| Place | What it shows | When |
|---|---|---|
| GitHub draft | The full notes | After the image is built |
| The app (Release Notes) | The same notes, without the extra "Changelog" heading | Built into the image of that tag |
main and the docs | The published notes | When a stable release is published |
Publishing runs Sync published release notes. It replaces your hand-written entry for that version in main with the published notes and the publication date. Editing a published release updates that entry again.
The image is built before you review the draft. If you change the text in the draft, the change reaches main on publish and shows in the app from the next build on.