Aller au contenu

N8N Export GitHub

Le workflow N8N Export GitHub exporte automatiquement les workflows N8N modifiés vers un repository GitHub dédié. Il permet le versioning, la restauration facile, et garde un historique des modifications.

FonctionDescription
Export incrémentalSeuls les workflows modifiés sont exportés
Filtrage intelligentComparaison des timestamps updatedAt
Manifest automatiqueMétadonnées de tous les workflows
Extraction credentialsListe les credentials utilisées (sans secrets)
Notification TelegramRésumé des fichiers créés/modifiés
Triggers multiplesSchedule, manuel, ou webhook
stacks_vps_n8n_exports/
├── README.md # Auto-généré avec stats
├── manifest.json # Métadonnées + updatedAt
├── credentials-manifest.json # Liste credentials (sans secrets)
└── workflows/
├── orchestrateur-telegram.json
├── notification-hub.json
└── *.json

ProblèmeSans exportAvec export
Perte de workflowsCorruption DB N8N = tout perduRestauration depuis GitHub
Pas d’historiqueImpossible de revenir en arrièreGit history complet
Synchro équipeExport manuel par emailRepository partagé
DocumentationWorkflows non documentésREADME auto-généré
ApprocheAvantageInconvénient
Export completSimpleCommits inutiles, gros diffs
Export incrémentalCommits pertinents, historique propreComplexité filtrage

Triggers (Schedule/Manual/Webhook)
Get Manifest from GitHub
List All Workflows (N8N API)
Filter Modified (by updatedAt)
├── No changes → "No changes" notification
Loop: Get full workflow data
Generate Files (JSON + README + Manifest)
Loop: Push to GitHub
├── Create (if new)
└── Update (if exists, with SHA)
Telegram Notification
TriggerFréquenceUsage
ScheduleDimanche 4hBackup hebdomadaire
ManualOn-demandTests et debug
WebhookOn-demandIntégration Claude Code

Déclenchement via webhook :

Fenêtre de terminal
source /home/guillaume/stacks_vps/n8n-exports/.env
curl -s -X POST "$WEBHOOK_URL" \
-H "X-Export-Token: $X_EXPORT_TOKEN"

Filter Modified (Code) :

const manifestNode = $('Get Manifest').first();
let existingMap = new Map();
if (manifestNode.json.content) {
const manifest = JSON.parse(
Buffer.from(manifestNode.json.content, 'base64').toString('utf8')
);
existingMap = new Map(
manifest.workflows.map(w => [w.id, w.updatedAt])
);
}
const workflows = $input.all();
const modified = workflows.filter(wf => {
const prevUpdatedAt = existingMap.get(wf.json.id);
return !prevUpdatedAt || prevUpdatedAt !== wf.json.updatedAt;
});
if (modified.length === 0) {
return [{ json: { noChanges: true } }];
}
return modified;

manifest.json :

{
"exported_at": "2026-01-20T04:00:00.000Z",
"workflow_count": 25,
"active_count": 18,
"inactive_count": 7,
"workflows": [
{
"id": "abc123",
"name": "Orchestrateur Telegram",
"active": true,
"updatedAt": "2026-01-19T15:30:00.000Z"
}
]
}

credentials-manifest.json :

{
"exported_at": "2026-01-20T04:00:00.000Z",
"credentials": [
{ "id": "1", "name": "Telegram Bot", "type": "telegramApi" },
{ "id": "2", "name": "GitHub PAT", "type": "gitHubApi" }
]
}
*N8N WORKFLOWS EXPORT*
28/01/2026 04:00
*Created (1):*
- new-workflow
*Updated (3):*
- orchestrateur-telegram
- notification-hub
- manifest
Unchanged: 21
[View on GitHub](https://github.com/...)
CredentialTypeUsage
n8n accountn8n APIList/Get workflows
PAT (classic)GitHub APIGet/Create/Edit files
Telegram BotTelegram APINotifications

LimiteImpactMitigation
Pas de restore automatiqueImport manuel dans N8NScript de restore prévu
Credentials non exportésRecréer manuellement après restoreSeulement les noms sont sauvés
Historique Git uniquementPas de rollback en un clicInterface GitHub pour diff

Si besoin de restore automatique :

  • Créer un workflow de restore depuis GitHub
  • Sélection du workflow et de la version
  • Import via API N8N

Si plusieurs instances N8N :

  • Adapter le manifest par instance
  • Sync bidirectionnelle entre instances
  • Gestion des conflits

Si volume de workflows augmente :

  • Export par catégorie (actifs uniquement)
  • Compression des anciens exports
  • Retention policy Git
Fenêtre de terminal
# Voir les exports récents
ls -la n8n-exports/workflows/
# Voir les modifications locales
cd n8n-exports && git status
# Comparer avec une version précédente
git diff HEAD~1 workflows/orchestrateur-telegram.json
# Restaurer un workflow
# 1. Copier le JSON depuis GitHub
# 2. N8N → Import workflow → Paste JSON
ProblèmeVérification
Pas d’exportWorkflow actif ? Cron correct ?
401 GitHubPAT valide ? Permissions repo ?
”No changes” constantmanifest.json corrompu ? Supprimer et re-run
Fichiers en doubleVérifier le filtrage par updatedAt