GitHub is de thuisbasis van je code. Maar de workflows eromheen — PR reviews coördineren, issues naar Jira synchen, deployment notificaties sturen — kosten vaak meer tijd dan het programmeren zelf. Met n8n automatiseer je deze processen en verbind je GitHub met de rest van je toolchain.
Wat je leert:
- GitHub node en GitHub Trigger node configureren
- Webhook events: push, pull_request, issues, releases
- 7 kant-en-klare workflows voor development teams
- CI/CD pipeline bouwen: GitHub → n8n → Deploy
- Workflow versioning met GitHub (backup & restore)
GitHub Nodes in n8n
n8n biedt twee GitHub-gerelateerde nodes:
GitHub Node
Voert acties uit op GitHub: repositories, issues, PRs, releases, en meer.
Operaties: Create Issue, Get PR, List Commits, Create Release, Get File, etc.
GitHub Trigger Node
Luistert naar GitHub webhook events en start je workflow automatisch.
Events: push, pull_request, issues, release, fork, star, etc.
Authenticatie Instellen
// GitHub Personal Access Token (PAT) aanmaken: // 1. GitHub → Settings → Developer settings → Personal access tokens // 2. Kies "Fine-grained tokens" (aanbevolen) of "Classic" // 3. Selecteer permissions: // - repo: Full control (voor private repos) // - admin:repo_hook (voor webhooks) // - read:org (voor organisatie-repos) // 4. Kopieer de token // In n8n: // Settings → Credentials → Add Credential → GitHub API // Plak je Personal Access Token
Workflow 1: PR Review Notificaties
Stuur automatisch een Slack bericht wanneer iemand een PR opent, en tag de relevante reviewer.
// PR → Slack Notificatie Workflow
GitHub Trigger (event: pull_request)
Events: opened, ready_for_review
↓
Code Node (format message)
const pr = $json.body.pull_request;
const author = pr.user.login;
const title = pr.title;
const url = pr.html_url;
const additions = pr.additions;
const deletions = pr.deletions;
const files = pr.changed_files;
// Reviewer mapping
const reviewerMap = {
'frontend': '<@U123>', // Slack user IDs
'backend': '<@U456>',
'devops': '<@U789>'
};
// Detecteer type PR op basis van labels of branch
const branch = pr.head.ref;
let team = 'backend';
if (branch.includes('fe/') || branch.includes('ui/')) team = 'frontend';
if (branch.includes('infra/') || branch.includes('deploy')) team = 'devops';
return {
text: `*Nieuwe PR:* <${url}|${title}>\n` +
`Auteur: ${author} | ${files} bestanden | ` +
`+${additions} -${deletions}\n` +
`Review nodig: ${reviewerMap[team]}`,
channel: '#code-reviews'
};
↓
Slack Node (post message)
Workflow 2: Issue → Jira/Trello Sync
// GitHub Issue → Project Management Sync
GitHub Trigger (event: issues)
Events: opened, labeled, closed
↓
Switch Node (op actie)
├── opened → HTTP Request: Create Jira Ticket
│ POST https://jouw-org.atlassian.net/rest/api/3/issue
│ Body: {
│ "fields": {
│ "project": { "key": "DEV" },
│ "summary": {{ $json.body.issue.title }},
│ "description": {{ $json.body.issue.body }},
│ "issuetype": { "name": "Bug" }
│ }
│ }
│
├── labeled ("priority:high") → Slack Alert #urgent
│
└── closed → HTTP Request: Transition Jira Ticket to Done
Workflow 3: Automatische Release Notes
// Release Tag → Generate Changelog → Post Everywhere
GitHub Trigger (event: release)
Event: published
↓
GitHub Node (List Commits since last release)
Operation: List Commits
Repository: owner/repo
Since: {{ $json.body.release.created_at }}
↓
AI Chain → Claude/OpenAI
"Genereer release notes uit deze commits.
Groepeer in: Features, Fixes, Breaking Changes.
Schrijf in het Nederlands.
Commits: {{ $json.commits }}"
↓
// Parallel publiceren:
├── GitHub Node: Update Release Body
├── Slack Node: Post in #releases
├── Email Node: Stuur naar klanten-mailinglist
└── HTTP Request: Update Changelog op website
Workflow 4: CI/CD Pipeline met n8n
Gebruik n8n als orchestrator voor je deployment pipeline — flexibeler dan GitHub Actions voor complexe multi-service deployments.
// CI/CD Pipeline Workflow
GitHub Trigger (event: push, branch: main)
↓
// Stap 1: Tests draaien
HTTP Request → SSH command (of Execute Command node)
ssh deploy@server "cd /app && git pull && npm test"
↓
IF Node (tests geslaagd?)
├── Ja:
│ // Stap 2: Build & Deploy
│ HTTP Request → SSH
│ "cd /app && npm run build && pm2 restart all"
│ ↓
│ // Stap 3: Health check
│ Wait Node (10 seconden)
│ ↓
│ HTTP Request → GET https://app.example.com/health
│ ↓
│ IF Node (status 200?)
│ ├── Ja → Slack: "Deployment gelukt! v{{ version }}"
│ └── Nee → Slack: "ROLLBACK NODIG!" + email alert
│
└── Nee:
Slack Alert: "Tests gefaald op main branch!"
GitHub Node: Create Issue ("CI failure: {{ $json.error }}")
Workflow 5: Repository Monitoring Dashboard
// Dagelijks Repository Health Check
Schedule Trigger (08:00, maandag-vrijdag)
↓
GitHub Node (haal stats op)
// Per repository:
- Open PRs count
- Open Issues count
- Last commit date
- Open dependabot alerts
↓
Code Node (genereer rapport)
const repos = items;
const stale = repos.filter(r => {
const daysSinceCommit = Math.floor(
(Date.now() - new Date(r.json.lastCommit)) / 86400000
);
return daysSinceCommit > 14;
});
return {
totalOpenPRs: repos.reduce((s, r) => s + r.json.openPRs, 0),
totalOpenIssues: repos.reduce((s, r) => s + r.json.openIssues, 0),
staleRepos: stale.map(r => r.json.name),
securityAlerts: repos.reduce((s, r) => s + r.json.alerts, 0)
};
↓
Slack Node (#dev-dashboard)
"📊 *Daily Repo Report*
Open PRs: {{ totalOpenPRs }}
Open Issues: {{ totalOpenIssues }}
Security Alerts: {{ securityAlerts }}
Stale repos: {{ staleRepos.join(', ') }}"
Workflow 6: Workflow Versioning via GitHub
Sla je n8n workflows op in Git voor versiebeheer. Dit is essentieel voor teams die workflows in productie draaien.
// n8n Workflow → GitHub Backup (dagelijks)
Schedule Trigger (02:00, dagelijks)
↓
HTTP Request → n8n API
GET /api/v1/workflows
Headers: { "X-N8N-API-KEY": "{{ $credentials.n8nApiKey }}" }
↓
Loop Over Items (per workflow)
↓
Code Node (format voor Git)
const workflow = $json;
const filename = `workflows/${workflow.name.replace(/\s+/g, '-')}.json`;
return {
path: filename,
content: JSON.stringify(workflow, null, 2)
};
↓
GitHub Node (Create or Update File)
Repository: org/n8n-workflows
Path: {{ $json.path }}
Content: {{ $json.content }}
Message: "Auto-backup: {{ $json.path }} - {{ $now.format('yyyy-MM-dd HH:mm') }}"
Workflow 7: PR Auto-Labeling
// Automatisch labels toewijzen aan PRs op basis van gewijzigde bestanden
GitHub Trigger (event: pull_request, action: opened)
↓
GitHub Node (Get PR Files)
GET /repos/{owner}/{repo}/pulls/{pr_number}/files
↓
Code Node (bepaal labels)
const files = items.map(i => i.json.filename);
const labels = new Set();
files.forEach(f => {
if (f.startsWith('src/frontend/') || f.endsWith('.tsx')) labels.add('frontend');
if (f.startsWith('src/api/') || f.endsWith('.py')) labels.add('backend');
if (f.includes('test') || f.includes('spec')) labels.add('tests');
if (f.includes('Dockerfile') || f.includes('.yml')) labels.add('devops');
if (f.includes('docs/') || f.endsWith('.md')) labels.add('documentation');
});
// Size labels
const totalChanges = items.reduce((s, i) =>
s + i.json.additions + i.json.deletions, 0);
if (totalChanges < 10) labels.add('size/XS');
else if (totalChanges < 100) labels.add('size/S');
else if (totalChanges < 500) labels.add('size/M');
else labels.add('size/L');
return { labels: [...labels] };
↓
HTTP Request → GitHub API
POST /repos/{owner}/{repo}/issues/{pr_number}/labels
Body: { "labels": {{ $json.labels }} }
GitHub Trigger Events Overzicht
| Event | Wanneer | Typische actie |
|---|---|---|
| push | Code gepusht naar een branch | CI/CD triggeren, tests draaien |
| pull_request | PR geopend, gesloten, gemerged | Review notificatie, auto-labeling |
| issues | Issue aangemaakt of gewijzigd | Sync naar Jira/Trello |
| release | Nieuwe release gepubliceerd | Changelog genereren, notificaties |
| star / fork | Iemand start of forkt je repo | Groei tracking, community engagement |
| workflow_run | GitHub Actions workflow voltooid | Resultaat verwerken in n8n |
n8n vs GitHub Actions: Wanneer Wat?
| Criterium | GitHub Actions | n8n + GitHub |
|---|---|---|
| CI/CD (build + test) | Beter — native integratie | Goed als orchestrator |
| Cross-platform integratie | Beperkt tot GitHub ecosystem | 400+ integraties |
| Visueel bouwen | YAML bestanden | Visuele editor |
| AI/LLM integratie | Beperkt | Native LangChain + agents |
Ons advies: gebruik GitHub Actions voor build en test pipelines, en n8n voor alles eromheen — notificaties, cross-platform sync, AI-gebaseerde analyse, en complexe multi-service orchestratie.
Conclusie
GitHub + n8n is de perfecte combinatie voor development teams die meer willen dan standaard CI/CD. Van intelligente PR-routing tot geautomatiseerde release notes met AI — de mogelijkheden zijn eindeloos.
Aan de Slag
- 1. Maak een GitHub PAT aan met de juiste permissions
- 2. Configureer de GitHub credential in n8n
- 3. Begin met een simpele PR → Slack notificatie
- 4. Bouw uit naar CI/CD en issue tracking