Auto-Generate GitHub Release Notes and Notify via Slack
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.
Related Templates
Generate Product Ad Copy & CTAs with GPT-4 for Slack and Airtable
⚡ AI Copywriter Pro: Instant Ad Copy & CTA Generator Transform product details into compelling marketing copy in second...
Instagram Full Profile Scraper with Apify and Google Sheets
📸 Instagram Full Profile Scraper with Apify and Google Sheets This n8n workflow automates the process of scraping ful...
Compare Lists and Identify Common Items & Differences Using Custom Keys
This workflow compares two lists of objects (List A and List B) using a user-specified key (e.g. email, id, domain) and ...
🔒 Please log in to import templates to n8n and favorite templates
Workflow Visualization
Loading...
Preparing workflow renderer
Comments (0)
Login to post comments