
Built an n8n workflow that turns trash git commits ("fixed bug lol") into clean CHANGELOG.md files and auto-commits them back
Ello!
I absolutely hate writing changelogs. When I'm deep in a coding flow, my commit messages get incredibly lazy ("fixed bug", "optimized file lol", "finally working"). It’s fine for my own speed, but it sucks for anyone else trying to read the project history or see what actually changed
So I spent about 2 hours building an n8n setup to completely automate the boring part straight from a GitHub push webhook.
The whole workflow is open-source. You can grab the JSON blueprint from the repo, host it yourself, and build on top of it: [link!](https://github.com/engyossefyossry-crypto/git-log-humanizer)
🛠️ How it works under the hood:
The Ingestion: It catches the live GitHub push event and grabs the raw commit text array.
The Clean-up: Passes the commits to Llama 3.1 (via Groq) locked behind a strict JSON schema output parser. The model filters out the pure noise (like "finally working") and rewrites the actual technical fixes into clean, professional bullet points categorized by Features, Bug Fixes, and Performance.
The Auto-Commit: It compiles everything into markdown and uses the GitHub API node to automatically update `docs/CHANGELOG.md` in the repo.
The Logs: In parallel, it drops a clean summary into Discord/Gmail and logs the raw metrics to a database table for tracking engineering velocity.
📋 Two details I added to make developing this less annoying:
Local Sandbox Fallback: Testing webhook-driven pipelines usually means spamming your live git history with empty commits just to see if your nodes trigger. I put a small JS check in the ingestion node, if you run it manually in the n8n editor without a live payload, it swaps in a mock array of garbage commits so you can debug the whole canvas instantly without polluting your real GitHub repo.
Deterministic Parsing: Small models love wrapping JSON responses inside markdown code blocks (```json ... ```), which instantly breaks downstream JavaScript or database nodes. The structured output parser fixes this by forcing raw JSON straight out of the inference layer.
It's fully free-tier friendly and easy to configure. Check out the repo, hook up your own credentials, and let me know if you have any ideas to scale it or handle multi-repo setups!