ReleasePad
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 · · 11 min read

Stop spending hours summarizing git logs. Here are three ways to turn your commit history into release notes your users actually care about — from DIY scripts to fully automated 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.

Why Commit Messages Alone Aren’t Enough

Before getting into the methods, it’s worth understanding why you can’t just dump your git log into a changelog 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

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 halluccinates 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

Managed tools handle the entire pipeline for you: connecting to your repository, reading changes, generating summaries, and providing a publishing interface with distribution channels like hosted pages, in-app widgets, and email.

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 changelog page, embed a widget in your app, 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. It connects to your GitHub 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.

Which Method Should You Choose?

Factor Conventional Commits AI Pipeline (DIY) Managed Tool
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 you want the fastest path to automated, AI-generated release notes from your GitHub commits, 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

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!