507 lines
13 KiB
JSON
507 lines
13 KiB
JSON
{
|
|
"nodes": [
|
|
{
|
|
"id": "3e2820cb-24a4-491b-8f8b-60f97b0748dc",
|
|
"name": "Backup Now - Manual Trigger",
|
|
"type": "n8n-nodes-base.manualTrigger",
|
|
"position": [
|
|
520,
|
|
320
|
|
],
|
|
"parameters": {},
|
|
"typeVersion": 1
|
|
},
|
|
{
|
|
"id": "bc5588e5-b67a-4713-b8e7-c21227048a2d",
|
|
"name": "n8n",
|
|
"type": "n8n-nodes-base.n8n",
|
|
"position": [
|
|
980,
|
|
520
|
|
],
|
|
"parameters": {
|
|
"filters": {
|
|
"tags": "={{ $('Globals').first().json.tags_to_match_for_backup }}"
|
|
},
|
|
"requestOptions": {}
|
|
},
|
|
"credentials": {
|
|
"n8nApi": {
|
|
"id": "L3X3qWRmwZRYCpV8",
|
|
"name": "Source n8n Account"
|
|
}
|
|
},
|
|
"typeVersion": 1
|
|
},
|
|
{
|
|
"id": "2a5af64d-b5c3-4180-bae5-9efeeaeba99d",
|
|
"name": "Globals",
|
|
"type": "n8n-nodes-base.set",
|
|
"position": [
|
|
740,
|
|
400
|
|
],
|
|
"parameters": {
|
|
"options": {},
|
|
"assignments": {
|
|
"assignments": [
|
|
{
|
|
"id": "150135fb-c0fb-444b-aeed-eac851af255d",
|
|
"name": "gitlab_owner",
|
|
"type": "string",
|
|
"value": "mygitlabownername"
|
|
},
|
|
{
|
|
"id": "8a9359c0-5a16-482b-8f3a-c8b20fbc13c0",
|
|
"name": "gitlab_project",
|
|
"type": "string",
|
|
"value": "n8n_workflow_backups"
|
|
},
|
|
{
|
|
"id": "00843c18-7d09-4d60-ab70-534ca0791504",
|
|
"name": "gitlab_workflow_path",
|
|
"type": "string",
|
|
"value": "workflow_definitions"
|
|
},
|
|
{
|
|
"id": "8fbcc201-dbff-440b-b440-42e8f1735548",
|
|
"name": "tags_to_match_for_backup",
|
|
"type": "string",
|
|
"value": "gitlab_backup_enabled"
|
|
},
|
|
{
|
|
"id": "e17051bc-d8b3-4cef-bad0-efe38a7be464",
|
|
"name": "execution_type",
|
|
"type": "string",
|
|
"value": "={{ ( $('Schedule Trigger').isExecuted) ? 'Scheduled' : 'Manual' }}"
|
|
},
|
|
{
|
|
"id": "8b90fba9-df11-4e07-a7ae-31405143e831",
|
|
"name": "execution_time",
|
|
"type": "string",
|
|
"value": "={{ $now }}"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"typeVersion": 3.4
|
|
},
|
|
{
|
|
"id": "b6b44b4b-e5a7-4ce6-9cff-e7a21679ad32",
|
|
"name": "Create New File(s)",
|
|
"type": "n8n-nodes-base.gitlab",
|
|
"position": [
|
|
2060,
|
|
540
|
|
],
|
|
"parameters": {
|
|
"owner": "={{ $('Globals').first().json.gitlab_owner }}",
|
|
"branch": "main",
|
|
"filePath": "={{ $('Globals').first().json.gitlab_workflow_path }}/{{ $('Derive Filename From Workflow Name').item.json.normalized_filename }}",
|
|
"resource": "file",
|
|
"repository": "={{ $('Globals').first().json.gitlab_project }}",
|
|
"fileContent": "={{ JSON.stringify($('n8n').item.json, null, 4) }}",
|
|
"commitMessage": "=(Initial) {{ $('Globals').first().json.execution_type }} Backup - {{ $('Globals').first().json.execution_time }}."
|
|
},
|
|
"credentials": {
|
|
"gitlabApi": {
|
|
"id": "Nv1DoplS64rrPZVm",
|
|
"name": "Target GitLab Account"
|
|
}
|
|
},
|
|
"typeVersion": 1
|
|
},
|
|
{
|
|
"id": "167ae6cd-b8dd-4e01-aca4-4888fcaf9958",
|
|
"name": "Edit Existing File(s)",
|
|
"type": "n8n-nodes-base.gitlab",
|
|
"position": [
|
|
2060,
|
|
340
|
|
],
|
|
"parameters": {
|
|
"owner": "={{ $('Globals').first().json.gitlab_owner }}",
|
|
"branch": "main",
|
|
"filePath": "={{ $('Globals').first().json.gitlab_workflow_path }}/{{ $('Derive Filename From Workflow Name').item.json.normalized_filename }}",
|
|
"resource": "file",
|
|
"operation": "edit",
|
|
"repository": "={{ $('Globals').first().json.gitlab_project }}",
|
|
"fileContent": "={{ JSON.stringify($('n8n').item.json, null, 4) }}",
|
|
"commitMessage": "={{ $('Globals').first().json.execution_type }} Backup - {{ $('Globals').first().json.execution_time }}."
|
|
},
|
|
"credentials": {
|
|
"gitlabApi": {
|
|
"id": "Nv1DoplS64rrPZVm",
|
|
"name": "Target GitLab Account"
|
|
}
|
|
},
|
|
"typeVersion": 1
|
|
},
|
|
{
|
|
"id": "a4437388-9143-4c91-841e-c062ab9af3c0",
|
|
"name": "Derive Filename From Workflow Name",
|
|
"type": "n8n-nodes-base.set",
|
|
"position": [
|
|
1160,
|
|
520
|
|
],
|
|
"parameters": {
|
|
"options": {},
|
|
"assignments": {
|
|
"assignments": [
|
|
{
|
|
"id": "d2110dc6-1f31-46b3-991e-556b2255d76e",
|
|
"name": "normalized_filename",
|
|
"type": "string",
|
|
"value": "={{ $json.name.replace(/[^a-zA-Z0-9]/g, '') }}.json"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"typeVersion": 3.4
|
|
},
|
|
{
|
|
"id": "cb0fca8f-dc43-4903-a8e1-5b7acf9157b1",
|
|
"name": "Fetch Existing File Content",
|
|
"type": "n8n-nodes-base.gitlab",
|
|
"position": [
|
|
1640,
|
|
340
|
|
],
|
|
"parameters": {
|
|
"owner": "={{ $('Globals').first().json.gitlab_owner }}",
|
|
"filePath": "={{ $('Globals').first().json.gitlab_workflow_path }}/{{ $('Derive Filename From Workflow Name').item.json.normalized_filename }}",
|
|
"resource": "file",
|
|
"operation": "get",
|
|
"repository": "={{ $('Globals').first().json.gitlab_project }}",
|
|
"asBinaryProperty": false,
|
|
"additionalParameters": {
|
|
"reference": "main"
|
|
}
|
|
},
|
|
"credentials": {
|
|
"gitlabApi": {
|
|
"id": "Nv1DoplS64rrPZVm",
|
|
"name": "Target GitLab Account"
|
|
}
|
|
},
|
|
"typeVersion": 1
|
|
},
|
|
{
|
|
"id": "816843c4-769c-4033-a38e-1c6ef5325e15",
|
|
"name": "Sticky Note",
|
|
"type": "n8n-nodes-base.stickyNote",
|
|
"position": [
|
|
940,
|
|
120
|
|
],
|
|
"parameters": {
|
|
"color": 5,
|
|
"width": 401,
|
|
"height": 246,
|
|
"content": "## Gather Gitlab Info"
|
|
},
|
|
"typeVersion": 1
|
|
},
|
|
{
|
|
"id": "19f3fe4d-acba-4e7b-b92c-ce9024a8f37d",
|
|
"name": "Sticky Note1",
|
|
"type": "n8n-nodes-base.stickyNote",
|
|
"position": [
|
|
940,
|
|
460
|
|
],
|
|
"parameters": {
|
|
"color": 5,
|
|
"width": 398,
|
|
"height": 240,
|
|
"content": "## Gather n8n Info"
|
|
},
|
|
"typeVersion": 1
|
|
},
|
|
{
|
|
"id": "418bef31-adf6-419b-87f1-faa2581e5766",
|
|
"name": "Sticky Note2",
|
|
"type": "n8n-nodes-base.stickyNote",
|
|
"position": [
|
|
1380,
|
|
280
|
|
],
|
|
"parameters": {
|
|
"width": 598,
|
|
"height": 384.41789416257484,
|
|
"content": "## Decide Whether to Create or Edit or Skip"
|
|
},
|
|
"typeVersion": 1
|
|
},
|
|
{
|
|
"id": "f3b98ded-c767-4822-bcf4-25931be03f48",
|
|
"name": "Skip Unchanged Files",
|
|
"type": "n8n-nodes-base.filter",
|
|
"position": [
|
|
1820,
|
|
340
|
|
],
|
|
"parameters": {
|
|
"options": {},
|
|
"conditions": {
|
|
"options": {
|
|
"leftValue": "",
|
|
"caseSensitive": true,
|
|
"typeValidation": "strict"
|
|
},
|
|
"combinator": "and",
|
|
"conditions": [
|
|
{
|
|
"id": "3298ab8b-9934-4ed7-9c38-03f325dc71e2",
|
|
"operator": {
|
|
"type": "string",
|
|
"operation": "notEquals"
|
|
},
|
|
"leftValue": "={{ JSON.stringify($('n8n').item.json, null, 4) }}",
|
|
"rightValue": "={{ $json.content.base64Decode() }}"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"typeVersion": 2
|
|
},
|
|
{
|
|
"id": "6bbf5146-7129-4ca8-8576-39d5cbe8e0b9",
|
|
"name": "Sticky Note3",
|
|
"type": "n8n-nodes-base.stickyNote",
|
|
"position": [
|
|
480,
|
|
220
|
|
],
|
|
"parameters": {
|
|
"color": 4,
|
|
"width": 402,
|
|
"height": 452,
|
|
"content": "## Start / Trigger & Configure"
|
|
},
|
|
"typeVersion": 1
|
|
},
|
|
{
|
|
"id": "0e5d9c9f-40b4-494d-8233-a2b4fea67d76",
|
|
"name": "Schedule Trigger",
|
|
"type": "n8n-nodes-base.scheduleTrigger",
|
|
"position": [
|
|
520,
|
|
520
|
|
],
|
|
"parameters": {
|
|
"rule": {
|
|
"interval": [
|
|
{
|
|
"field": "cronExpression",
|
|
"expression": "30 21 * * 6"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"typeVersion": 1.2
|
|
},
|
|
{
|
|
"id": "be08176e-3961-43d7-b182-89a4f45805f6",
|
|
"name": "Fetch List of Existing Files",
|
|
"type": "n8n-nodes-base.gitlab",
|
|
"position": [
|
|
980,
|
|
180
|
|
],
|
|
"parameters": {
|
|
"owner": "={{ $('Globals').first().json.gitlab_owner }}",
|
|
"filePath": "={{ $('Globals').first().json.gitlab_workflow_path }}",
|
|
"resource": "file",
|
|
"operation": "list",
|
|
"returnAll": true,
|
|
"repository": "={{ $('Globals').item.json.gitlab_project }}",
|
|
"additionalParameters": {
|
|
"ref": "main"
|
|
}
|
|
},
|
|
"credentials": {
|
|
"gitlabApi": {
|
|
"id": "Nv1DoplS64rrPZVm",
|
|
"name": "Target GitLab Account"
|
|
}
|
|
},
|
|
"typeVersion": 1
|
|
},
|
|
{
|
|
"id": "674cdaa8-f8fe-4f6d-8743-062d3fd1ff95",
|
|
"name": "Combine Gitlab Existing Files as Single List Item",
|
|
"type": "n8n-nodes-base.aggregate",
|
|
"position": [
|
|
1180,
|
|
180
|
|
],
|
|
"parameters": {
|
|
"options": {},
|
|
"fieldsToAggregate": {
|
|
"fieldToAggregate": [
|
|
{
|
|
"renameField": true,
|
|
"outputFieldName": "gitlab_existing_filenames",
|
|
"fieldToAggregate": "name"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"typeVersion": 1
|
|
},
|
|
{
|
|
"id": "463ae3fb-4d66-497d-81eb-7e55b5945d84",
|
|
"name": "File Exists in Gitlab?",
|
|
"type": "n8n-nodes-base.if",
|
|
"position": [
|
|
1440,
|
|
460
|
|
],
|
|
"parameters": {
|
|
"options": {},
|
|
"conditions": {
|
|
"options": {
|
|
"leftValue": "",
|
|
"caseSensitive": true,
|
|
"typeValidation": "strict"
|
|
},
|
|
"combinator": "and",
|
|
"conditions": [
|
|
{
|
|
"id": "0740c2be-ab9d-4249-af46-0d94f58c318f",
|
|
"operator": {
|
|
"type": "array",
|
|
"operation": "contains",
|
|
"rightType": "any"
|
|
},
|
|
"leftValue": "={{ $('Combine Gitlab Existing Files as Single List Item').first().json.gitlab_existing_filenames }}",
|
|
"rightValue": "={{ $('Derive Filename From Workflow Name').item.json.normalized_filename }}"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"typeVersion": 2
|
|
}
|
|
],
|
|
"connections": {
|
|
"n8n": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Derive Filename From Workflow Name",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Globals": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Fetch List of Existing Files",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Schedule Trigger": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Globals",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Skip Unchanged Files": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Edit Existing File(s)",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"File Exists in Gitlab?": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Fetch Existing File Content",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "Create New File(s)",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Backup Now - Manual Trigger": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Globals",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Fetch Existing File Content": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Skip Unchanged Files",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Fetch List of Existing Files": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Combine Gitlab Existing Files as Single List Item",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Derive Filename From Workflow Name": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "File Exists in Gitlab?",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Combine Gitlab Existing Files as Single List Item": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "n8n",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
}
|
|
}
|
|
} |