github_repo_workflows_sync
Ceci est unAIworkflow d'automatisation du domainecontenant 25 nœuds.Utilise principalement des nœuds comme If, N8n, Set, Code, Filter, combinant la technologie d'intelligence artificielle pour une automatisation intelligente. Synchronisation bidirectionnelle des workflows GitHub avec n8n et contrôle de version
- •Personal Access Token GitHub
Nœuds utilisés (25)
Catégorie
{
"id": "zlH1bFBsYAWpBVVw",
"meta": {
"instanceId": "c63eb69e3ae130557a7966f936bb2cc113f6e64ff70b2268c8cd506848caf9d5",
"templateCredsSetupCompleted": true
},
"name": "github_repo_workflows_sync",
"tags": [
{
"id": "oiAlopPbS90SR7YK",
"name": "github",
"createdAt": "2025-06-20T15:54:28.386Z",
"updatedAt": "2025-06-20T15:54:28.386Z"
}
],
"nodes": [
{
"id": "ffc98138-8afa-4cd6-8ba4-b235cc18c739",
"name": "Créer un nouveau workflow dans n8n",
"type": "n8n-nodes-base.n8n",
"position": [
1740,
780
],
"parameters": {
"operation": "create",
"requestOptions": {},
"workflowObject": "={{ $json.toJsonString() }}"
},
"typeVersion": 1
},
{
"id": "d4891039-f8d2-465b-bbb6-098050f9e06c",
"name": "Déclencheur planifié",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-260,
280
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
1
]
}
]
}
},
"typeVersion": 1.2
},
{
"id": "174b78dc-e584-4fc1-82a2-0e58b4a98b36",
"name": "Lister les fichiers du dépôt",
"type": "n8n-nodes-base.github",
"position": [
360,
400
],
"webhookId": "0614066f-212d-4f9e-9da2-fa4a80b44baf",
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ $json.github_account_name }}"
},
"filePath": "=/{{ $json.repo_workflows_path }}",
"resource": "file",
"operation": "list",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ $json.github_repo_name }}"
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "3dcf4423-8024-4797-adee-71912ba87c2b",
"name": "GitHub",
"type": "n8n-nodes-base.github",
"position": [
800,
400
],
"webhookId": "71ad7d84-99cd-4fbd-a365-52537e69525b",
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ $('Set GitHub Details').item.json.github_account_name }}"
},
"filePath": "={{ $json.path }}",
"resource": "file",
"operation": "get",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ $('Set GitHub Details').item.json.github_repo_name }}"
},
"asBinaryProperty": false,
"additionalParameters": {}
},
"typeVersion": 1.1
},
{
"id": "315a2e65-1c4d-46b4-b17d-b949c776c116",
"name": "n8n",
"type": "n8n-nodes-base.n8n",
"position": [
580,
200
],
"parameters": {
"filters": {},
"requestOptions": {}
},
"typeVersion": 1
},
{
"id": "404e87cf-e561-4807-865a-26a6109c228f",
"name": "Téléverser un fichier",
"type": "n8n-nodes-base.github",
"position": [
2400,
-80
],
"webhookId": "ce4b561b-acb9-4cd8-b76f-4928dada9674",
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ $('Set GitHub Details').item.json.github_account_name }}"
},
"filePath": "={{ $('Set GitHub Details').item.json.repo_workflows_path }}/{{ $node['Edit for Upload'].json.fileName }}",
"resource": "file",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ $('Set GitHub Details').item.json.github_repo_name }}"
},
"fileContent": "={{ $('To base64').item.json.data }}",
"commitMessage": "=n8n_backup_sync-{{ $node['Edit for Upload'].json.commitDate }}",
"additionalParameters": {
"branch": {
"branch": "main"
}
}
},
"typeVersion": 1
},
{
"id": "aee4f541-7ff4-441d-9c6b-1545676be55a",
"name": "Fichier Json",
"type": "n8n-nodes-base.convertToFile",
"position": [
1740,
-80
],
"parameters": {
"mode": "each",
"options": {
"format": true
},
"operation": "toJson"
},
"typeVersion": 1.1
},
{
"id": "9047c039-ef8e-4fb2-b58c-3056f02366c7",
"name": "Vers base64",
"type": "n8n-nodes-base.extractFromFile",
"position": [
1960,
-80
],
"parameters": {
"options": {},
"operation": "binaryToPropery"
},
"typeVersion": 1
},
{
"id": "e5208d64-7f41-4be4-ad09-313aeb5fa89d",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
1620,
180
],
"parameters": {
"color": 3,
"width": 340,
"height": 400,
"content": "## CHECK WHICH IS NEWER\n\n**IF TRUE** github workflow is the most recent, n8n to be updated\n\n**IF FALSE** n8n workflow is the most recent, github to be updated\n\n"
},
"typeVersion": 1
},
{
"id": "138bd609-541a-46d6-aa1e-792e85a58c05",
"name": "Mettre à jour le fichier",
"type": "n8n-nodes-base.github",
"position": [
3220,
560
],
"webhookId": "27218087-8df7-474d-a39f-70cfa9c34ec8",
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ $('Set GitHub Details').item.json.github_account_name }}"
},
"filePath": "={{ $('Set GitHub Details').item.json.repo_workflows_path }}/{{ $node['Edit for Update'].json.fileName }}",
"resource": "file",
"operation": "edit",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ $('Set GitHub Details').item.json.github_repo_name }}"
},
"fileContent": "={{ $('To base').item.json.data }}",
"commitMessage": "=n8n_backup_sync-{{ $('Edit for Update').item.json.commitDate }}"
},
"typeVersion": 1
},
{
"id": "72bd601d-fdce-4643-a26d-23e95f278110",
"name": "Fichier Json 1",
"type": "n8n-nodes-base.convertToFile",
"position": [
2560,
560
],
"parameters": {
"mode": "each",
"options": {
"format": true
},
"operation": "toJson"
},
"typeVersion": 1.1
},
{
"id": "3974d157-1135-4068-bc3e-b295917cd49b",
"name": "Vers base",
"type": "n8n-nodes-base.extractFromFile",
"position": [
2780,
560
],
"parameters": {
"options": {},
"operation": "binaryToPropery"
},
"typeVersion": 1
},
{
"id": "eee2bfd1-e0e3-4db5-b4da-1bbc189f45e7",
"name": "n8n vs GitHub",
"type": "n8n-nodes-base.compareDatasets",
"position": [
1260,
280
],
"parameters": {
"options": {},
"mergeByFields": {
"values": [
{
"field1": "id",
"field2": "id"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "a94d4e6e-a250-4fe8-a092-a9e1697745c5",
"name": "Mettre à jour le workflow dans n8n",
"type": "n8n-nodes-base.n8n",
"position": [
2340,
300
],
"parameters": {
"operation": "update",
"workflowId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.dataset.id }}"
},
"requestOptions": {},
"workflowObject": "={{ $json.dataset.toJsonString() }}"
},
"typeVersion": 1
},
{
"id": "09d43ee5-7a21-47cd-8bec-45ae16e8422f",
"name": "Code - InputB",
"type": "n8n-nodes-base.code",
"position": [
2120,
300
],
"parameters": {
"language": "python",
"pythonCode": "# Get the desired workflow name\nworkflow_id = _('If n8n before GitHub').first().json['same']['id']\n\n# Get all decoded workflow items\nall_decoded = _('Decode to json').all()\n\n# Filter for the matching one\nmatched = [\n item.json \n for item in all_decoded \n if item.json.get('id') == workflow_id\n]\n\n# If there's a match, return it (or empty if none)\nif matched:\n return [{'json': {'dataset': matched[0]}}]\nelse:\n return []\n"
},
"typeVersion": 2
},
{
"id": "d3be821f-a331-4dc7-993d-6af348fb1fb2",
"name": "Code - InputA",
"type": "n8n-nodes-base.code",
"position": [
2120,
560
],
"parameters": {
"language": "python",
"pythonCode": "# Get the desired workflow name\nworkflow_id = _('If n8n before GitHub').first().json['same']['id']\n\n# Get all decoded workflow items\nall_decoded = _('n8n').all()\n\n# Filter for the matching one\nmatched = [\n item.json \n for item in all_decoded \n if item.json.get('id') == workflow_id\n]\n\n# If there's a match, return it (or empty if none)\nif matched:\n return [{'json': {'dataset': matched[0]}}]\nelse:\n return []\n"
},
"typeVersion": 2
},
{
"id": "2a173594-512b-4308-b685-540bac3e2338",
"name": "Modifier les champs",
"type": "n8n-nodes-base.set",
"position": [
2340,
560
],
"parameters": {
"mode": "raw",
"options": {},
"jsonOutput": "={{ $json.dataset }}"
},
"typeVersion": 3.4
},
{
"id": "7a43de98-2d25-4d0f-9b7c-47258dc7b405",
"name": "Modifier pour téléversement",
"type": "n8n-nodes-base.set",
"position": [
2180,
-80
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "fe4a36ef-9f04-40e3-99bd-cc517a49b440",
"name": "commitDate",
"type": "string",
"value": "={{ $now.format('dd-MM-yyyy/H:mm') }}"
},
{
"id": "b0fe1bcc-e79c-4a6b-b8b4-44222c8bf4e8",
"name": "fileName",
"type": "string",
"value": "={{$('n8n vs GitHub').item.json.name\n.trim().replace(/\\s+/g, '-').toLowerCase()\n}}.json"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "911736bd-1c6d-4b49-ade2-52d95f075a7f",
"name": "Modifier pour mise à jour",
"type": "n8n-nodes-base.set",
"position": [
3000,
560
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "fe4a36ef-9f04-40e3-99bd-cc517a49b440",
"name": "commitDate",
"type": "string",
"value": "={{ $now.format('dd-MM-yyyy/H:mm') }}"
},
{
"id": "b0fe1bcc-e79c-4a6b-b8b4-44222c8bf4e8",
"name": "fileName",
"type": "string",
"value": "={{\n$('Code - InputA').item.json.dataset.name.trim().replace(/\\s+/g, '-').toLowerCase()\n}}.json"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "1193d962-fb0d-4b9e-b94c-04c8942860e4",
"name": "Note adhésive 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1620,
-200
],
"parameters": {
"width": 1000,
"height": 320,
"content": "## IF ONLY IN N8N\nUpdate GitHub with the relevant workflows"
},
"typeVersion": 1
},
{
"id": "e48eda08-7f73-46d6-ba81-f9e4b008fec3",
"name": "Note adhésive 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1620,
640
],
"parameters": {
"color": 6,
"width": 340,
"height": 340,
"content": "## IF ONLY IN GITHUB\nCreate new workflow in n8n"
},
"typeVersion": 1
},
{
"id": "c1909c33-d3f0-4d24-b4d7-fdf1e8074398",
"name": "Si n8n avant GitHub",
"type": "n8n-nodes-base.if",
"position": [
1740,
400
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "8ccf743b-3a66-44c0-a30b-72a1d4bcf60b",
"operator": {
"type": "dateTime",
"operation": "before"
},
"leftValue": "={{ $json.different.updatedAt.inputA }}",
"rightValue": "={{ $json.different.updatedAt.inputB }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "fd1022a0-4f67-4603-bf94-68415776c587",
"name": "Décoder en json",
"type": "n8n-nodes-base.set",
"position": [
1020,
400
],
"parameters": {
"mode": "raw",
"options": {},
"jsonOutput": "={{ $json.content.base64Decode() }}"
},
"typeVersion": 3.4
},
{
"id": "102aadd9-ace3-4fc6-a9a9-ca546362373e",
"name": "Filtrer",
"type": "n8n-nodes-base.filter",
"position": [
580,
400
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "b9ed0bad-4ebe-4378-807e-1a6082c4461d",
"operator": {
"type": "string",
"operation": "notContains"
},
"leftValue": "={{ $json.name }}",
"rightValue": "placeholder"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "0ddf93a8-4db3-4826-a658-8fb4aedb31ce",
"name": "Définir les détails de GitHub",
"type": "n8n-nodes-base.set",
"position": [
-40,
280
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "850e7497-0f2f-470e-a5a2-a85a0c12aaa2",
"name": "github_account_name",
"type": "string",
"value": ""
},
{
"id": "5c2be15a-cb93-4fe4-a512-03a1880b8713",
"name": "github_repo_name",
"type": "string",
"value": ""
},
{
"id": "f4f1f0c3-7a89-427c-942f-d0e74ba4583f",
"name": "repo_workflows_path",
"type": "string",
"value": ""
}
]
}
},
"typeVersion": 3.4
}
],
"active": true,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "f8dfa54c-eb76-40f0-80d8-18cdab254091",
"connections": {
"315a2e65-1c4d-46b4-b17d-b949c776c116": {
"main": [
[
{
"node": "eee2bfd1-e0e3-4db5-b4da-1bbc189f45e7",
"type": "main",
"index": 0
}
]
]
},
"102aadd9-ace3-4fc6-a9a9-ca546362373e": {
"main": [
[
{
"node": "3dcf4423-8024-4797-adee-71912ba87c2b",
"type": "main",
"index": 0
}
]
]
},
"3dcf4423-8024-4797-adee-71912ba87c2b": {
"main": [
[
{
"node": "fd1022a0-4f67-4603-bf94-68415776c587",
"type": "main",
"index": 0
}
]
]
},
"3974d157-1135-4068-bc3e-b295917cd49b": {
"main": [
[
{
"node": "911736bd-1c6d-4b49-ade2-52d95f075a7f",
"type": "main",
"index": 0
}
]
]
},
"aee4f541-7ff4-441d-9c6b-1545676be55a": {
"main": [
[
{
"node": "9047c039-ef8e-4fb2-b58c-3056f02366c7",
"type": "main",
"index": 0
}
]
]
},
"9047c039-ef8e-4fb2-b58c-3056f02366c7": {
"main": [
[
{
"node": "7a43de98-2d25-4d0f-9b7c-47258dc7b405",
"type": "main",
"index": 0
}
]
]
},
"72bd601d-fdce-4643-a26d-23e95f278110": {
"main": [
[
{
"node": "3974d157-1135-4068-bc3e-b295917cd49b",
"type": "main",
"index": 0
}
]
]
},
"2a173594-512b-4308-b685-540bac3e2338": {
"main": [
[
{
"node": "72bd601d-fdce-4643-a26d-23e95f278110",
"type": "main",
"index": 0
}
]
]
},
"d3be821f-a331-4dc7-993d-6af348fb1fb2": {
"main": [
[
{
"node": "2a173594-512b-4308-b685-540bac3e2338",
"type": "main",
"index": 0
}
]
]
},
"09d43ee5-7a21-47cd-8bec-45ae16e8422f": {
"main": [
[
{
"node": "a94d4e6e-a250-4fe8-a092-a9e1697745c5",
"type": "main",
"index": 0
}
]
]
},
"eee2bfd1-e0e3-4db5-b4da-1bbc189f45e7": {
"main": [
[
{
"node": "aee4f541-7ff4-441d-9c6b-1545676be55a",
"type": "main",
"index": 0
}
],
[],
[
{
"node": "c1909c33-d3f0-4d24-b4d7-fdf1e8074398",
"type": "main",
"index": 0
}
],
[
{
"node": "ffc98138-8afa-4cd6-8ba4-b235cc18c739",
"type": "main",
"index": 0
}
]
]
},
"fd1022a0-4f67-4603-bf94-68415776c587": {
"main": [
[
{
"node": "eee2bfd1-e0e3-4db5-b4da-1bbc189f45e7",
"type": "main",
"index": 1
}
]
]
},
"911736bd-1c6d-4b49-ade2-52d95f075a7f": {
"main": [
[
{
"node": "138bd609-541a-46d6-aa1e-792e85a58c05",
"type": "main",
"index": 0
}
]
]
},
"7a43de98-2d25-4d0f-9b7c-47258dc7b405": {
"main": [
[
{
"node": "404e87cf-e561-4807-865a-26a6109c228f",
"type": "main",
"index": 0
}
]
]
},
"d4891039-f8d2-465b-bbb6-098050f9e06c": {
"main": [
[
{
"node": "0ddf93a8-4db3-4826-a658-8fb4aedb31ce",
"type": "main",
"index": 0
}
]
]
},
"0ddf93a8-4db3-4826-a658-8fb4aedb31ce": {
"main": [
[
{
"node": "315a2e65-1c4d-46b4-b17d-b949c776c116",
"type": "main",
"index": 0
},
{
"node": "174b78dc-e584-4fc1-82a2-0e58b4a98b36",
"type": "main",
"index": 0
}
]
]
},
"c1909c33-d3f0-4d24-b4d7-fdf1e8074398": {
"main": [
[
{
"node": "09d43ee5-7a21-47cd-8bec-45ae16e8422f",
"type": "main",
"index": 0
}
],
[
{
"node": "d3be821f-a331-4dc7-993d-6af348fb1fb2",
"type": "main",
"index": 0
}
]
]
},
"174b78dc-e584-4fc1-82a2-0e58b4a98b36": {
"main": [
[
{
"node": "102aadd9-ace3-4fc6-a9a9-ca546362373e",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Avancé - Intelligence Artificielle
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Partager ce workflow