Auto-generate GitHub release notes and notify via Slack
Ready for 3.0Ready for 3.0. This template uses no nodes that n8n 3.0 removes. No removed nodes, versions or helpers found. Static check, last run 2026-10-19.
Nodes used (4)
- Edit Fields (Set)
n8n-nodes-base.set - HTTP Request
n8n-nodes-base.httpRequest - Code
n8n-nodes-base.code - n8n Form Trigger
n8n-nodes-base.formTrigger
What it does
Auto-Generate GitHub Release Notes and Notify via Slack (n8n Workflow) This n8n workflow automates the process of: - Generating structured GitHub release notes from merged pull requests since the last tag. - Creating a draft GitHub release using the latest tag and PR info. - Sending a formatted summary to a Slack channel. All of this is triggered manually via a form, where the user inputs the repository, owner and target branch. Who's It For This flow is perfect for: - Open-source maintainers looking to automate changelog management. - DevOps engineers handling release cycles. - Engineering teams maintaining structured, consistent GitHub releases. - Technical writers who prepare release notes. How It Works Node Summary: | Node No | Node Name | Description | |---------|------------------------------------|---------------------------------------------------------------| | 1 | GitHub Release Input Form | Takes user inputs (owner, repo, branch). | | 2 | Config | Extracts input and defines PR label grouping config. | | 3 | Get Latest Git Tag | Fetches latest Git tag (used as reference point). | | 4 | Get Commit Date of Latest Tag | Gets the exact timestamp of the latest tag's commit. | | 5 | Fetch All Merged PRs Since Last Tag | Queries GitHub for PRs merged after that timestamp. | | 6 | Group PRs & Generate Release Notes | Organizes PRs by label and generates markdown notes. | | 7 | GitHub Pre-release | Creates a draft GitHub release with those notes. | | 8 | Send Message to Slack | Sends the final release summary to Slack. | How to Set Up 1. Clone or import this workflow into your n8n instance. 2. Configure the following credentials: - GitHub OAuth or PAT (Personal Access Token) - Slack Webhook URL or OAuth credentials 3. Open the form node and fill in: - owner: GitHub username/org - repo: GitHub repository name - branch: Base branch (e.g., main) 4. Run the workflow manually and observe the release note being: - Created as a draft on GitHub - Sent to Slack Requirements | Requirement | Description | |-----------------|-----------------------------------------------------| | n8n version | Cloud or Self-Hosted | | GitHub Access | A token with repo and write:repohook permissions | | Slack Access | Webhook URL or Slack OAuth app | | Git Tags | Semantic versioning tags pushed to the repo | | Labels | PRs should be labeled (e.g., feature, bug, other) for grouping | How to Customize | Feature | How to Customize | |---------------------|---------------------------------------------------------------| | Label Grouping | Modify the config map in the Config node (step 2). | | PR Filtering | Adjust the search query in node 5 to fit your repo's conventions. | | Markdown Template | Tweak markdown generation logic in node 6. | | Slack Message Format| Customize the Slack text in node 8. | | Tag Format | Switch from semantic versioning if needed in node 3 logic. | | Release Type | Change draft: true to false in node 7 for immediate publishing. | Add‑ons You can extend the flow by: - Adding a cron scheduler for periodic releases. - Sending release notes via email (use the Email node). - Publishing directly to Jira or Confluence. - Posting GitHub release links to Discord. Use Case Examples | Scenario | Description | |---------------------------|---------------------------------------------------------------| | OSS Team Weekly Releases | Automatically publish weekly release notes summarizing merged PRs. | | Sprint Review Reports | Use it at the end of each sprint to generate change summaries. | | CI/CD Pipelines | Integrate with GitHub Actions or Jenkins for automated tagging + release. | Common Troubleshooting | Issue | Possible Cause | Solution | |----------------------------------------|-------------------------------------------|----------------------------------------------------------------------| | No data found for item-index: "1" | GitHub Search returned no PRs | Ensure PRs were merged after the last tag and branch name is correct | | Cannot