Auto-Generate GitHub Release Notes and Notify via Slack

Go to Workflow
0 views
Built by WeblineIndia WeblineIndia
Created on June 05, 2026

Description

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

Clone or import this workflow into your n8n instance.
Configure the following credentials:
GitHub OAuth or PAT (Personal Access Token)
Slack Webhook URL or OAuth credentials
Open the form node and fill in:
owner: GitHub username/org
repo: GitHub repository name
branch: Base branch (e.g., main)
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:repo_hook 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 access $node in code | Wrong script execution context | Ensure JavaScript is selected and variables are accessed properly |
| draft must be boolean | Draft field passed as string | Use true (not "true") in JSON input of HTTP node |
| PR labels not grouped | PRs have no matching labels | Update your label config map or ensure labels exist on PRs |
| Empty Slack message | Slack node not receiving data | Ensure $json.release_notes is being passed correctly |

Need Help?

Need help setting this up for your team or extending it for more features (e.g., JIRA, auto-tagging, changelog export)?
We're here to help you customize, debug and scale this flow.

Feel free to reach out WeblineIndia if you need:
One-on-one setup assistance.
Custom n8n nodes or scripts.
Advanced GitHub/Slack integrations.

Nodes Used (2)

Code
n8n-nodes-base.code
HTTP Request
n8n-nodes-base.httpRequest