1. Opening Problem Statement
Meet Sarah, a developer team lead responsible for keeping her team updated on the latest releases of several critical GitHub repositories like n8n-io/n8n and home-assistant/core. Sarah used to manually check each repo’s release page daily, copying release notes and posting updates on Slack. This tedious routine took an hour every morning and often led to delayed or missed announcements, causing confusion and wasted time for her team.
Imagine the cost when such delays result in missing crucial security updates or feature releases. Sarah’s daily manual check drained her productivity, introduced errors, and left her team less informed. Clearly, a smart, automated solution tailored to monitoring GitHub releases and notifying the team is what she needs.
2. What This Automation Does
This specific n8n workflow automates monitoring the latest GitHub releases for multiple repositories and sends notifications to a Slack channel only when new releases are detected. Here’s what happens when it runs every day:
- Fetches the latest release info from each specified GitHub repo via GitHub’s API.
- Checks if the release is new by comparing the publish date to the last 24 hours.
- Sends a formatted Slack message to a predefined channel with release name, description snippet, and URL.
- Supports multiple repos configured in one place, making maintenance easy.
- Runs daily automatically without any manual intervention.
- Ensures your team stays instantly informed about new releases, avoiding delays.
This workflow saves Sarah at least 5 hours a week and virtually eliminates human error in release tracking and team communications.
3. Prerequisites ⚙️
- n8n account to create and run the workflow. Self-hosting is optional but possible for enhanced control (see Hostinger guide).
- GitHub API access (no auth needed for public repos but optional for private repos).
- Slack account and a Slack workspace with permission to post messages in the target channel.
- Slack node credentials setup inside n8n to send messages.
4. Step-by-Step Guide to Build This Workflow
Step 1: Add a Daily Trigger node to schedule your workflow
Click + → Search and select Schedule Trigger. Configure it with an interval of 1 day to run the workflow every day automatically. This ensures your GitHub repos are checked daily without manual input.
You should see the node ready and showing the scheduled interval. Common mistake: forgetting to activate the workflow later so it runs.
Step 2: Create a Code node to configure your GitHub repos
Next, add a Code node, rename it to RepoConfig. Paste this JavaScript code to set your repos:
return [
{
"github-org": "n8n-io",
"github-repo": "n8n"
},
{
"github-org": "home-assistant",
"github-repo": "core"
}
];This outputs an array of objects with GitHub organization and repository names. Customize this list as needed to track your own repos.
Expected result: multiple repo entries flow through the workflow. Mistake: JSON syntax errors or typos in org/repo names.
Step 3: Add an HTTP Request node to fetch latest release from GitHub
Add an HTTP Request node, rename it Fetch Github Repo Releases. Configure as follows:
- Set method to GET.
- In the URL field, use the expression:
=https://api.github.com/repos/{{ $json["github-org"] }}/{{ $json["github-repo"] }}/releases/latest - This dynamically requests the latest release info for each repo from the previous Code node.
You should see data with fields like published_at, name, and url in the output. Watch out for API rate limits if you scale to many repos.
Step 4: Add an If node to check if the release is new
Add an If node named Wether Release is new. Configure the condition:
- Choose Boolean or DateTime check.
- Set condition to check if the
published_atdate of the release is after (more recent than) 24 hours ago. - Use expression in left value:
{{ $json.published_at.toDateTime() }} - Compare with the right value expression:
{{ DateTime.utc().minus(1, 'days') }}
This ensures only new releases from the last day pass through to notification. Mistake: wrong date formats causing failed comparisons.
Step 5: Add a Slack node to send notification messages
Add a Slack node named Send Message. Configure:
- Select Channel as the target.
- Choose your Slack channel, e.g.,
#dk-test. - Set message text using expressions to include the repo and release details, for example:
:tada: New release for *{{ $('RepoConfig').item.json["github-repo"] }}* - {{ $('Fetch Github Repo Releases').item.json["name"] }}
{{ $json.body.slice(0, 500) }}
{{ $('Fetch Github Repo Releases').item.json["url"] }}Expected outcome: Your Slack channel receives a nicely formatted message with new release info. Common mistake: invalid channel name or missing Slack credentials.
Step 6: Link the nodes as shown
Connect the nodes in this order for smooth flow:
- Daily Trigger → RepoConfig
- RepoConfig → Fetch Github Repo Releases
- Fetch Github Repo Releases → Wether Release is new
- Wether Release is new (True) → Send Message
This order ensures your repo list cycles daily, fetching and filtering new releases, then notifying Slack only when appropriate.
5. Customizations ✏️
- Add more repositories: In the RepoConfig Code node, add more JSON objects with “github-org” and “github-repo” fields to monitor additional repos.
- Change notification channel: In the Slack node, update the channelId value to your preferred Slack channel name or ID.
- Customize message content: Modify the Slack message text field to include more or less info, add emojis, or format differently using Markdown.
- Adjust release freshness window: In the If node, change the time comparison from 1 day to hours or weeks by editing
DateTime.utc().minus(1, 'days'). - Use GitHub authentication: If monitoring private repos, add GitHub personal access token headers in the HTTP request node for authenticated API calls.
6. Troubleshooting 🔧
Problem: “Failed to fetch releases or API rate limited”
Cause: Exceeding GitHub API’s unauthenticated rate limit or incorrect repository names.
Solution: Add authentication headers with a GitHub token in the HTTP Request node. Double-check the repo names in the Code node for typos.
Problem: “Slack message not sent or invalid channel error”
Cause: Incorrect Slack credentials or wrong channel name.
Solution: Reauthorize Slack credentials under n8n settings, verify the channel name exactly matches your Slack workspace channels, and ensure the bot has permission to post.
Problem: “Date comparison fails in If node”
Cause: Date formats not properly parsed or incompatible.
Solution: Use expression helper toDateTime() exactly as in the If node setup, ensuring published_at field is a valid date string.
7. Pre-Production Checklist ✅
- Verify your GitHub repositories are correctly listed and accessible.
- Test the HTTP Request node manually to confirm it fetches release data as expected.
- Check the If node conditions by simulating dates within and beyond the 24-hour window.
- Confirm Slack credentials and channel permissions are correctly configured.
- Run the workflow manually and check if Slack messages appear for new releases.
- Backup your workflow export for rollback if needed.
8. Deployment Guide
Activate the workflow by clicking Activate in n8n so it runs on schedule daily. For monitoring, check n8n’s execution logs for errors or missed runs.
Consider connecting alerting mechanisms for workflow failures if running critical production automations.
10. Conclusion
By following this guide, you’ve set up a powerful workflow that automates tracking GitHub repository releases and delivering timely Slack notifications. You’ve saved your team hours of manual checks each week and ensured instant communication of important updates.
Next, you might consider extending this automation to:
– Include automated changelog posting in team wikis
– Integrate with email to send release summaries
– Monitor additional repositories or other services like Docker Hub
With n8n and Slack, keeping your team informed has never been easier or more reliable!