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:
- π§ Conventional commits (rules for commit messages)
- π€ Semantic versioning automation
- π Auto-generated CHANGELOG
- π GitHub Actions workflow
π§ 0. What weβre building
```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
π§ 2. Use Conventional Commits (VERY important)
Your commits MUST follow this format:
β Examples
Feature (minor version bump)
```bash id="c1"
feat: add user login system
### Fix (patch version bump)
```bash id="c2"
fix: resolve navbar bug on mobile
Breaking change (major version bump)
```bash id="c3"
feat!: redesign API structure
or
```bash id="c4"
BREAKING CHANGE: remove old auth system
βοΈ 3. Create semantic-release config
π .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"
Changelog
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
π§ 6. What this does automatically
When you push to main:
It will:
- Analyze commits
-
Decide version bump:
- fix β 1.0.1
- feat β 1.1.0
- breaking β 2.0.0
Generate changelog
Create Git tag
Create GitHub Release
Update
CHANGELOG.md
π 7. Example auto-generated changelog
```md id="log1"
1.2.0 (2026-05-23)
Features
- add user authentication system
- add dashboard analytics
Bug Fixes
- fix navbar alignment on mobile
- fix API timeout issue ```
π·οΈ 8. Example GitHub releases
GitHub will automatically create:
```plaintext id="rel1"
v1.2.0 - Production Release
Features:
- user auth system
- analytics dashboard
Fixes:
- mobile navbar bug ```
π 9. GitHub Secrets needed
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
GitHub automatically:
- Detects commit type (
feat) - Bumps version β minor update
- Updates CHANGELOG.md
- Creates git tag (v1.3.0)
- Publishes GitHub release
π₯ 11. Pro upgrades (used in companies)
π’ Auto publish npm package
```yaml id="npm1"
- run: npm publish ```
π‘ Slack release notification
```yaml id="slack1"
- name: Notify Slack run: curl -X POST $SLACK_WEBHOOK ```
π΅ Multi-branch releases
```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
β Forgetting fetch-depth: 0
β release history breaks
π§ Final architecture
```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
Top comments (0)