Label security pull requests consistently, then add a category for that label in a .github/release.yml file. GitHub's generated release notes will group those pull requests under their own heading. Add the advisory link and upgrade guidance by hand, because labels alone do not say how serious a fix is.
What GitHub generates
GitHub's documentation says automatically generated release notes include a list of merged pull requests, a list of contributors to the release, and a link to a full changelog. You can customise them with labels to create custom categories, and exclude certain labels and users from the output. To do that you create a file called .github/release.yml in the repository, listing the labels and authors to exclude and the categories to create.
Setting it up
- Agree on one label for security changes, for example
security. Consistent labelling is the whole trick. - Create the configuration file.
changelog:
exclude:
labels:
- ignore-for-release
categories:
- title: Security fixes
labels:
- security
- title: Other changes
labels:
- "*"
- Check the current GitHub documentation for the exact options before you rely on this sample.
- When you draft a release, use the generate notes option and review the result.
What the tool cannot do
Generated notes list pull request titles. They do not tell a reader:
- which versions are affected
- how severe the issue is
- whether there is an advisory or identifier to look up
- what to do if they cannot upgrade immediately
So write a short block by hand above the generated list for any security release.
A template for the hand written block
| Field | Content |
|---|---|
| Summary | One sentence on what was fixed, without exploit detail |
| Affected versions | Range, stated exactly |
| Fixed in | This version |
| Advisory | Link or identifier |
| Action | Upgrade, or the workaround if upgrade is not possible |
Keep it consistent with the advisory and the changelog. See changelog security disclosure practices and publish a GitHub security advisory checklist.
Common mistakes
- Titles that reveal too much before users can upgrade. Review pull request titles of security fixes first.
- Inconsistent labels. A fix labelled "bug" will not appear in the security group.
- Mixing security notes into a long list so nobody finds them.
- Skipping the hand written block because the tool produced something.
Keeping labels honest
The category only works if people label correctly, so make labelling part of the pull request checklist and have a maintainer confirm it at merge time. Review the labels again when you draft the release: look at the list of merged pull requests for any dependency bump that fixed an advisory but was labelled as maintenance. Those are easy to miss, and they are often exactly what a cautious user wants to find. If a pull request was security related but must not be described yet, hold the release notes until the advisory is ready, then publish both together.
Quick check
Can generated notes replace a changelog?
They can feed one, but they list pull requests, not user impact. A changelog written for readers is still worth keeping.
Should a security label be public?
Labels on merged pull requests are visible. Apply them when the fix is public, not on private work.
Sources
Last reviewed: 19 October 2026.