Auto versioning + changelog generation using Github Action This article explains how to set up an automated versioning and changelog generation system using GitHub Actions and the semantic-release tool. The system works by analyzing commit messages that follow the Conventional Commits format (feat, fix, breaking change) to automatically determine version bumps, generate changelogs, create git tags, and publish GitHub releases. The guide provides step-by-step instructions for configuring the necessary files, including `.releaserc.json` and a GitHub Actions workflow file. Auto versioning + changelog generation is a very real production pattern used in open-source and SaaS teams to avoid messy release notes and manual tagging. We’ll build a clean system using: plaintext id="flow0" commit → push → GitHub Action ↓ analyze commits ↓ bump version patch/minor/major ↓ generate changelog ↓ create git tag ↓ create GitHub release --- 📦 1. Install required tool standard approach We’ll use: 👉 semantic-release industry standard bash id="inst1" npm install --save-dev semantic-release @semantic-release/changelog @semantic-release/git @semantic-release/github Your commits MUST follow this format: bash id="c1" feat: add user login system Fix patch version bump bash id="c2" fix: resolve navbar bug on mobile bash id="c3" feat : redesign API structure or bash id="c4" BREAKING CHANGE: remove old auth system .releaserc.json json id="r1" { "branches": "main" , "plugins": "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", "@semantic-release/changelog", "@semantic-release/github", "@semantic-release/git", { "assets": "package.json", "CHANGELOG.md" , "message": "chore release : ${nextRelease.version} skip ci \n\n${nextRelease.notes}" } } --- 📜 4. Create CHANGELOG file bash id="ch1" touch CHANGELOG.md Start empty: md id="ch2" All notable changes will be documented here. --- 🚀 5. GitHub Actions workflow AUTO VERSION + CHANGELOG 📁 .github/workflows/release.yml yaml id="w1" name: Auto Version & Changelog on: push: branches: - main jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node uses: actions/setup-node@v4 with: node-version: 20 - name: Install dependencies run: npm install - name: Run semantic release env: GITHUB TOKEN: ${{ secrets.GITHUB TOKEN }} run: npx semantic-release When you push to main : Decide version bump: Generate changelog Create Git tag Create GitHub Release Update CHANGELOG.md md id="log1" GitHub will automatically create: plaintext id="rel1" v1.2.0 - Production Release Features: Fixes: Make sure this exists: plaintext id="sec1" GITHUB TOKEN auto provided by GitHub Actions No extra setup required. --- 🧪 10. Real workflow in action Developer flow: plaintext id="flow1" git commit -m "feat: add dashboard UI" git push origin main feat yaml id="npm1" yaml id="slack1" json id="branch1" "branches": "main", "next" --- 🟣 Changelog formatting customization You can group commits like: Features Fixes Performance Breaking changes --- ⚠️ 12. Common mistakes ❌ Not using conventional commits → versioning won’t work properly ❌ Pushing messy commit messages bash id="bad1" fix stuff update → release history breaks plaintext id="final1" Commit feat/fix/breaking ↓ GitHub Action triggers ↓ semantic-release analyzes commits ↓ bumps version automatically ↓ updates CHANGELOG.md ↓ creates git tag + GitHub release --- 🚀 What you just built REAL DEVOPS LEVEL You now have: 🤖 Automated versioning 📜 Auto changelog generation 🏷️ Git tags + GitHub releases 🚀 CI/CD-ready release pipeline