How to Automate Release Notes from GitHub Commits (3 Methods Compared)
Guide

How to Automate Release Notes from GitHub Commits (3 Methods Compared)

Felix Macx · · 13 min read

Stop spending hours summarizing git logs. Here are three ways to turn your commit history into a changelog — and into release notes your users actually care about — from free generators to fully managed tools.

If you’ve ever stared at a wall of git commits trying to figure out what to tell your users, you already know the problem. Your team merges dozens of PRs per week. Each one contains useful changes. But translating fix: resolve race condition in webhook retry logic into something a customer can actually understand takes real effort.

And that effort usually falls on someone — a product manager, a tech lead, or a developer who drew the short straw — who has to manually sift through commit history, cross-reference tickets, and write something coherent before the next release ships.

This guide covers three approaches to automating that process, from lightweight scripts you can set up in an afternoon to fully managed tools that handle the entire pipeline. We’ll compare the trade-offs of each so you can pick the right approach for your team.

Changelog or Release Notes? Decide That First

Before you pick a tool, be clear about which artifact you’re generating from your commits, because the two have very different automation ceilings.

A changelog from commits is a running record. It lists what changed, grouped by type and version, and it stays close to the language of the commits themselves — feat: add CSV export, fix: prevent duplicate webhook deliveries. This is the artifact that can be produced almost entirely mechanically. Point a generator at your git history, and you get a CHANGELOG.md with no human in the loop.

Release notes are a narrative. They explain what a release means for the person using the product, in their language, with the trivia left out. That requires a translation step — from code change to user impact — and no amount of commit parsing performs it. Something has to interpret, whether that’s a person or a model.

Both start from the same source, so the choice isn’t really either/or:

  Changelog from commits Release notes from commits
Audience Developers, integrators, your future self Users, customers, prospects
Can be fully mechanical? Yes No — needs interpretation
Typical output CHANGELOG.md, GitHub Releases Hosted changelog page, in-app widget, email
Depends on commit hygiene Heavily Only for the message-only approaches
Best tool class Method 1 (generators) Method 2 or 3 (AI)

If you only need the first, Method 1 is free and you can stop reading after it. If you need the second — which most SaaS teams do, because their users are not reading a Markdown file in a repo — you need something that can interpret, which is what Methods 2 and 3 are for. The changelog vs release notes distinction is worth getting straight before you invest in a pipeline for the wrong one.

Why Commit Messages Alone Aren’t Enough

Once you know you need the user-facing version, it’s worth understanding why you can’t just dump your git log into it and call it a day.

Commit messages are written for developers. They describe what changed in the code. Release notes are written for users. They describe what’s different about the product. These are fundamentally different audiences with fundamentally different needs.

A commit message like refactor: extract payment validation into separate service is useful for a code reviewer but meaningless to a customer. What the customer needs to know is something like “Payment processing is now faster and more reliable.” That translation step — from code change to user impact — is where the real work happens.

The three methods below each handle this translation differently, with increasing levels of automation and intelligence.

Method 1: DIY with Conventional Commits + Open Source Generators

Time to set up: 1-3 hours
Ongoing effort: Medium (requires commit discipline from the whole team)
Best for: Open source projects and teams that want full control

How it works

This approach relies on your team following the Conventional Commits specification for every commit message. Conventional Commits use a structured format that makes messages machine-parsable:

feat: add CSV export for dashboard reports
fix: prevent duplicate webhook deliveries on timeout
docs: update API authentication guide
chore: upgrade dependencies to latest patch versions

The prefix (feat, fix, docs, chore) categorizes the change. Tools can then parse these prefixes and automatically group them into a structured changelog.

Tools to use

Several open-source tools can generate changelogs from conventional commits:

conventional-changelog is the most established option. It’s a Node.js CLI that reads your git history, parses conventional commit messages, and outputs a formatted CHANGELOG.md file. It supports multiple presets (Angular, Atom, ESLint) and custom configurations.

npm install -g conventional-changelog-cli
conventional-changelog -p angular -i CHANGELOG.md -s

git-cliff is a Rust-based alternative that’s faster and more customizable. It supports regex-based commit parsing, custom templates, and can handle monorepos. If you need more control over the output format, git-cliff is worth trying.

cargo install git-cliff
git-cliff --output CHANGELOG.md

auto-changelog takes a simpler approach — it generates a changelog from git tags and commit history without requiring conventional commit formatting. It’s more forgiving but produces less structured output.

npx auto-changelog

semantic-release goes further than the others: rather than just generating a changelog, it reads your conventional commits to decide the next semantic version number, writes the release notes, tags the release, and publishes the package — all from CI. Its @semantic-release/release-notes-generator plugin is the piece that turns commits into the notes body. If you want the whole release pipeline automated and you’re already disciplined about commit messages, this is the most complete option in the category.

npm install -D semantic-release @semantic-release/changelog @semantic-release/git
npx semantic-release

The trade-off with semantic-release is that it’s opinionated and all-or-nothing. It wants to own versioning, tagging, and publishing, not just the changelog. That’s excellent for libraries and packages, and often more machinery than a SaaS product with a continuously deployed web app actually needs.

Automating with GitHub Actions

You can integrate any of these tools into your CI/CD pipeline so changelogs generate automatically on release:

name: Generate Changelog
on:
  push:
    tags:
      - 'v*'

jobs:
  changelog:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Generate changelog
        run: npx conventional-changelog-cli -p angular -r 1 -o RELEASE_NOTES.md

      - name: Create GitHub Release
        uses: softprops/action-gh-release@v1
        with:
          body_path: RELEASE_NOTES.md

The real trade-off

This approach is free and gives you full control, but it has a significant hidden cost: every developer on your team has to write perfect conventional commits, every time. In practice, this is hard to enforce consistently. One developer writes feat: add export button, another writes added the export thing, and a third writes wip on half their commits.

You can add commit linting (using tools like commitlint) to reject non-conforming messages, but this adds friction to the development workflow. Teams using AI coding assistants like Cursor or Copilot find this especially challenging because the AI often generates rapid-fire commits with generic messages.

The output is also still developer-facing. The generated changelog will say “feat: add CSV export for dashboard reports” — which is better than a raw git log but still not quite what a user expects to see. It doesn’t explain why this matters or how to use it.

Verdict: Good for open source projects and internal changelogs. Not ideal for user-facing release notes that need to communicate business value.

Method 2: AI-Powered Scripts (Build Your Own Pipeline)

Time to set up: 3-8 hours
Ongoing effort: Low-Medium (needs maintenance when things break)
Best for: Engineering teams that want customization and are comfortable maintaining scripts

How it works

This approach adds an AI layer on top of your git history. Instead of relying on commit message formatting, you feed raw commit messages (or actual diffs) into an LLM and ask it to generate a user-friendly summary.

The basic flow is: trigger on release tag → fetch commits since last release → send to AI API → format and publish.

A basic implementation

Here’s a simplified version of what this pipeline looks like using GitHub Actions and the OpenAI API:

name: AI Release Notes
on:
  push:
    tags:
      - 'v*'

jobs:
  release-notes:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Get commits since last tag
        id: commits
        run: |
          PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
          if [ -z "$PREV_TAG" ]; then
            COMMITS=$(git log --oneline)
          else
            COMMITS=$(git log --oneline ${PREV_TAG}..HEAD)
          fi
          echo "commits<<EOF" >> $GITHUB_OUTPUT
          echo "$COMMITS" >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT

      - name: Generate release notes with AI
        id: ai_notes
        run: |
          RESPONSE=$(curl -s https://api.openai.com/v1/chat/completions \
            -H "Authorization: Bearer $OPENAI_API_KEY" \
            -H "Content-Type: application/json" \
            -d '{
              "model": "gpt-4",
              "messages": [
                {
                  "role": "system",
                  "content": "You are a technical writer. Generate user-friendly release notes from these git commits. Group changes into New Features, Improvements, and Bug Fixes. Focus on user impact, not implementation details. Be concise."
                },
                {
                  "role": "user",
                  "content": "Generate release notes from these commits:\n$COMMITS_LIST"
                }
              ]
            }')
          echo "$RESPONSE" | jq -r '.choices[0].message.content' > RELEASE_NOTES.md
        env:
          OPENAI_API_KEY: $

      - name: Create GitHub Release
        uses: softprops/action-gh-release@v1
        with:
          body_path: RELEASE_NOTES.md

Making it smarter

The basic version above only reads commit messages, which limits the quality of the output. You can improve it significantly by:

Analyzing diffs instead of just messages. Send the actual code changes to the AI, and it can infer user impact even from poorly written commit messages. A diff showing a new export button component tells the AI more than a commit message saying “misc updates.”

# Get diffs instead of just messages
git diff ${PREV_TAG}..HEAD --stat
git diff ${PREV_TAG}..HEAD -- '*.ts' '*.tsx' '*.py'

Including PR descriptions. If your team writes good PR descriptions, these often contain better context than individual commit messages. Use the GitHub API to fetch merged PRs and their descriptions for the release window.

Adding a review step. Instead of publishing directly, have the pipeline create a draft PR or post to a Slack channel for human review before publishing. This catches AI hallucinations or mischaracterizations.

The real trade-off

This approach produces much better user-facing release notes than conventional commits alone. The AI can translate technical changes into business language, and it doesn’t require developers to change their commit habits.

But there are real costs. You’re maintaining custom scripts that will break when APIs change, when your repo structure evolves, or when someone on the team modifies the pipeline without understanding it. You also need to manage API keys, handle rate limits, deal with token limits for large releases, and build retry logic.

The AI output also varies in quality. Sometimes it nails the summary. Sometimes it hallucinates features that don’t exist or misunderstands the impact of a change. Without a human review step, you risk publishing inaccurate release notes.

Verdict: Great for teams with engineering bandwidth to build and maintain custom tooling. Produces significantly better output than conventional commits alone. But it’s a real maintenance burden over time.

Method 3: Managed Release Notes Tools

Time to set up: 15-30 minutes
Ongoing effort: Low (review and publish)
Best for: Teams that want to focus on shipping product, not maintaining release note infrastructure

How it works

A managed release notes tool handles the entire pipeline for you: connecting to your repository, reading changes, generating summaries, and providing a publishing interface with distribution channels like hosted pages and in-app widgets.

The key advantage is that you don’t maintain any infrastructure. The tool handles the git integration, the AI summarization, the formatting, and the distribution. Your team’s only job is to review the generated draft and hit publish.

What to look for

Not all managed tools are created equal. The critical differentiators are:

Source of truth. Does the tool read from your actual git history (commits, PRs, diffs), or does it require you to manually enter updates? Tools that connect to GitHub or GitLab and automatically pull changes save the most time. Tools that just give you a nice editor for writing release notes manually only solve the publishing problem, not the writing problem.

AI quality. If the tool uses AI to generate drafts, how good are they? Does it just rephrase commit messages, or does it actually understand the user impact of changes? Can it handle messy commit histories from AI-assisted development sessions?

Distribution. Can you publish to a hosted public changelog page, embed an in-app widget in your product, send email notifications, and integrate with Slack? Or are you limited to a single channel?

Customization. Can you control the tone, format, and branding of your release notes? Can you adjust the level of detail for different audiences (technical vs. non-technical)?

ReleasePad: Built for This Problem

ReleasePad is designed specifically for this workflow. Its GitHub integration connects to your repository, reads your commits and pull requests, and uses AI to generate release notes that focus on user impact rather than implementation details.

Here’s what the workflow looks like in practice:

  1. Connect your GitHub repo. One-click OAuth connection, no complex configuration.
  2. Push your code as usual. No changes to your development workflow. No commit format requirements.
  3. Review the AI-generated draft. ReleasePad produces a summary organized by features, improvements, and fixes. You can edit, adjust tone, or add context.
  4. Publish. Your release notes go live on your hosted changelog page and get distributed through your configured channels.

The entire process from code push to published release note takes minutes, not hours. And because it reads actual changes rather than depending on commit message quality, it works well even for teams with inconsistent commit practices — which is most teams, especially those using AI coding tools.

Other managed tools

If you’re evaluating the category more broadly:

Released does something similar but exclusively through Jira. If your source of truth is Jira tickets rather than git commits, it’s worth a look. The limitation is that it doesn’t work outside the Jira ecosystem.

Beamer and AnnounceKit are strong on the distribution side (widgets, segmentation, analytics) but don’t connect to your development workflow. You’re still writing everything manually.

Canny and Frill combine changelog with feedback collection, which is useful if you want a unified platform, but their changelog features are secondary to their feedback tools.

The real trade-off

Managed tools cost money (though most offer free tiers for small teams). You also give up some control over exactly how the pipeline works compared to building your own.

But for most teams, the math is straightforward. If your PM spends 2-3 hours per release writing release notes manually, and you release weekly, that’s 100+ hours per year on changelog writing. A managed tool that costs $30-50/month and reduces that to 15 minutes of review per release pays for itself almost immediately.

Verdict: The fastest path to consistent, high-quality release notes with the lowest ongoing maintenance burden. Best for teams that want to solve the problem once and move on.

How Do You Use AI to Generate a Changelog from Commit History?

This is the question underneath all three methods, so it’s worth answering directly rather than leaving it spread across the sections above.

Any AI approach to generating a changelog from commit history has the same four steps. What changes between methods is how many of them you build yourself.

1. Define the release window. You need the set of commits that belong to this release. Usually that’s everything since the last tag:

git log $(git describe --tags --abbrev=0)..HEAD --oneline

2. Gather enough context to interpret. Commit subjects alone are thin. The quality ranking, worst to best, is: commit messages → commit messages plus PR titles and descriptions → the actual diffs. Diffs are what let a model write something accurate when the commit says wip or misc fixes, which is why the gap between methods shows up most on teams with loose commit hygiene.

3. Ask for user impact, not a summary. The most common mistake is prompting for “a summary of these commits,” which gets you a rephrased git log. Ask instead for what changed from the user’s point of view, grouped into features, improvements, and fixes, with implementation detail dropped. Give the model the audience: “customers of a B2B analytics product, mostly non-technical.”

4. Review before publishing. Models invent features that don’t exist and misjudge which changes matter. Every workable pipeline puts a human between generation and publication — a draft PR, a Slack message, or a review screen in a tool.

Method 2 means you build all four. Method 3 means the tool does 1, 2, and 3, and hands you 4 as a draft to approve. Neither removes the review step, and you should be suspicious of anything that claims it does.

A practical note on step 2: if you’re working through an AI coding assistant, your commit history is likely getting less descriptive over time, not more. That inverts the usual advice. Approaches that read diffs or PR context degrade gracefully as commit quality drops; approaches that parse commit messages degrade badly. Choose accordingly. Our post on what AI coding tools actually see covers the other half of this loop — how those same tools read your changelog once it’s published.

Which Method Should You Choose?

Factor Conventional Commits AI Pipeline (DIY) Managed Tool
Produces A changelog Release notes Release notes + changelog
Setup time 1-3 hours 3-8 hours 15-30 minutes
Ongoing maintenance Low (but high commit discipline) Medium-High None
Output quality Developer-facing User-facing (variable) User-facing (consistent)
Requires commit format Yes (strict) No No
Handles AI coding tools Poorly Well Well
Cost Free API costs (~$5-20/month) $0-50/month
Best for Open source, internal logs Custom needs, engineering teams Most SaaS teams

For most SaaS teams that ship regularly and need user-facing release notes, the managed tool approach gives the best ratio of output quality to ongoing effort. If you have specific customization needs or want full control of the pipeline, the DIY AI approach is powerful but requires engineering investment to maintain.

Conventional commits are great for open source projects and internal developer changelogs, but they rarely produce release notes that non-technical users find useful.

Getting Started

Whatever method you choose, the most important step is to start. Release notes that ship imperfectly are infinitely better than perfect release notes that never get written.

If a CHANGELOG.md in your repo is all you need, install git-cliff or conventional-changelog this afternoon and wire it into a release tag. That’s a genuinely finished solution for a lot of projects, and it costs nothing.

If you need the user-facing version — a changelog your customers actually see, not one they’d have to browse your repo to find — you can connect your repo to ReleasePad and have your first release note published in under 10 minutes. No commit format requirements, no scripts to maintain, no pipeline to debug.

Your users are waiting to hear what you built. Stop making them guess.


Further Reading

Frequently Asked Questions

What's the easiest way to automate release notes from GitHub commits?

A managed tool that connects to your repository and generates AI drafts from commits and PRs takes 15-30 minutes to set up and requires no ongoing maintenance. DIY approaches with conventional commits or custom AI scripts are cheaper or more customizable but cost engineering time to build, enforce, and maintain.

How do I generate a changelog from GitHub commits?

There are three practical paths. Adopt Conventional Commits and run a generator like conventional-changelog, git-cliff, or semantic-release to produce a CHANGELOG.md from your git history. Build a script that sends commits or diffs to an AI model and writes the output to a file. Or connect a managed tool that reads your repo and drafts the changelog for you. The first is free but depends on commit discipline; the third takes about 15 minutes and no maintenance.

Is a changelog from commits the same as release notes?

No. A changelog generated from commits is a running record of every change, usually grouped by type and version, and it stays close to the language of the commits themselves. Release notes are a narrative written for users that explains what a release means for them. The same commit history can feed both, but only the changelog can be produced mechanically — release notes need a translation step, whether a human or an AI does it.

Can I generate a changelog from commits without Conventional Commits?

Yes. Tools like auto-changelog work from git tags and raw history without any message format, and AI-based approaches read commit content or diffs directly, so message hygiene matters much less. Conventional Commits give you cleaner grouping for free, but they are not a prerequisite — which matters for teams using AI coding assistants that generate rapid-fire commits with generic messages.

Are Conventional Commits enough to generate good release notes?

Conventional Commits produce clean, structured changelogs but the output is still developer-facing — entries read like 'feat: add CSV export for dashboard reports' instead of explaining the user impact. They're great for open source and internal logs, but rarely produce notes that non-technical users actually want to read.

Why is a custom AI release notes pipeline harder to maintain than it looks?

Custom scripts break when APIs change, repo structure evolves, or token limits get hit on large releases. You also need to manage API keys, handle rate limits, build retry logic, and add a human review step to catch hallucinations — none of which is hard individually, but it adds up to ongoing engineering overhead.

Should release note automation analyze diffs or commit messages?

Diffs produce far better results, especially for teams with messy commit histories. A commit message saying 'misc updates' tells AI nothing, but the underlying diff showing a new export button component is unambiguous. Tools that read actual code changes work even when commit hygiene drops.

How much time does automating release notes actually save?

If a PM spends 2-3 hours per release writing notes manually and you ship weekly, that's 100+ hours per year. A managed tool that costs $30-50/month and reduces the work to 15 minutes of review per release pays for itself almost immediately and scales as shipping velocity increases.

release-notes automation github ai changelog conventional-commits

Ready to put this into practice?

Your changelog shouldn't be an afterthought.

ReleasePad makes it easy to publish great release notes — from a public changelog page to an in-app widget, GitHub integration, and analytics. Free to get started.

Get started — it's free
Try me now!