Workflow: Restore your credentials from GitHub
Integrations: extractFromFile, github, httpRequest, if, manualTrigger, n8n, set, splitOut, stickyNote

{"id": "7zRCNv7B5WFRg7ux", "meta": {"instanceId": "e634e668fe1fc93a75c4f2a7fc0dad807ca318b79654157eadb9578496acbc76"}, "name": "Restore your credentials from GitHub", "tags": [{"id": "2RWIfLUVCa0bnmGX", "name": "N8n", "createdAt": "2025-03-06T09:58:39.214Z", "updatedAt": "2025-03-06T09:58:39.214Z"}], "nodes": [{"id": "f8aff38c-3e40-4820-b8f5-50e3e1f878c8", "name": "When clicking \u2018Test workflow\u2019", "type": "n8n-nodes-base.manualTrigger", "position": [-640, -120], "parameters": {}, "typeVersion": 1}, {"id": "f838e0c6-36aa-4c0b-bdd2-ef096ffd3d1d", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [-1020, -140], "parameters": {"width": 320, "height": 420, "content": "## Restore from GitHub \nThis workflow will restore all instance credentials from GitHub backups.\n\n\n### Setup\nOpen `Globals` node and update the values below \ud83d\udc47\n\n- **repo.owner:** your Github username\n- **repo.name:** the name of your repository\n- **repo.path:** the folder to use within the repository.\n\n\nIf your username was `john-doe` and your repository was called `n8n-backups` and you wanted the credentials to go into a `credentials` folder you would set:\n\n- repo.owner - john-doe\n- repo.name - n8n-backups\n- repo.path - credentials/\n"}, "typeVersion": 1}, {"id": "8f59b7b0-ea9d-4209-8c6b-d48fe9d8cf7b", "name": "Globals", "type": "n8n-nodes-base.set", "position": [-380, -120], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "6cf546c5-5737-4dbd-851b-17d68e0a3780", "name": "repo.owner", "type": "string", "value": "BeyondspaceStudio"}, {"id": "452efa28-2dc6-4ea3-a7a2-c35d100d0382", "name": "repo.name", "type": "string", "value": "n8n-backup"}, {"id": "81c4dc54-86bf-4432-a23f-22c7ea831e74", "name": "repo.path", "type": "string", "value": "credentials"}]}}, "typeVersion": 3.4}, {"id": "d72bf1a6-f3a0-4dc0-afc0-e39c7e8b16f3", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [-440, -240], "parameters": {"color": 4, "width": 150, "height": 80, "content": "## Edit this node \ud83d\udc47"}, "typeVersion": 1}, {"id": "4eeb0ed5-7e90-4f09-8296-04c0349de49b", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [100, 20], "parameters": {"color": 4, "content": "## Skip credential\n- The empty json files\n- The n8n account api\n- ...edit this node at will"}, "typeVersion": 1}, {"id": "40856ade-3ff7-43ef-8c45-ec5a126a5787", "name": "Get all files in given path", "type": "n8n-nodes-base.httpRequest", "position": [-160, -120], "parameters": {"url": "=https://api.github.com/repos/{{ $json.repo.owner }}/{{ $json.repo.name }}/contents/{{ $json.repo.path }}", "options": {}, "authentication": "predefinedCredentialType", "nodeCredentialType": "githubApi"}, "credentials": {"githubApi": {"id": "3FYHiPFtycAFT8V0", "name": "GitHub account"}}, "typeVersion": 4.2}, {"id": "4284aadd-4840-4754-9416-6bb74a1df192", "name": "Split the result", "type": "n8n-nodes-base.splitOut", "position": [-600, 200], "parameters": {"options": {}, "fieldToSplitOut": "path"}, "typeVersion": 1}, {"id": "48a04e72-5f9e-4dc3-863d-a8bb30f1c8c2", "name": "Get file content from GitHub", "type": "n8n-nodes-base.github", "position": [-360, 200], "parameters": {"owner": {"__rl": true, "mode": "name", "value": "BeyondspaceStudio"}, "filePath": "={{ $('Get all files in given path').item.json.path }}", "resource": "file", "operation": "get", "repository": {"__rl": true, "mode": "name", "value": "n8n-backup"}, "additionalParameters": {}}, "credentials": {"githubApi": {"id": "3FYHiPFtycAFT8V0", "name": "GitHub account"}}, "typeVersion": 1, "alwaysOutputData": true}, {"id": "507c8514-6acf-4568-83cc-bb07f06e6a96", "name": "Convert files to JSON", "type": "n8n-nodes-base.extractFromFile", "position": [-140, 200], "parameters": {"options": {}, "operation": "fromJson"}, "typeVersion": 1}, {"id": "084e7306-4c7b-4a9b-8f3e-f844ab340f6a", "name": "Restore n8n Credentials", "type": "n8n-nodes-base.n8n", "position": [380, 200], "parameters": {"data": "={{ JSON.stringify($json.data.data) }}", "name": "={{ $json.data.name }}", "resource": "credential", "requestOptions": {}, "credentialTypeName": "={{ $json.data.type }}"}, "credentials": {"n8nApi": {"id": "dzYjDgtEXtpRPKhe", "name": "n8n account"}}, "typeVersion": 1}, {"id": "f8267df1-eb0a-491e-bed4-01480583a535", "name": "Check for skipped Credentials", "type": "n8n-nodes-base.if", "position": [100, 200], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "or", "conditions": [{"id": "ad031296-4ac0-4087-bc35-7975a2cc25e6", "operator": {"type": "object", "operation": "empty", "singleValue": true}, "leftValue": "={{ $json.data }}", "rightValue": ""}, {"id": "ca912a57-6a4b-4b9a-be0e-37b69d3e4917", "operator": {"type": "string", "operation": "contains"}, "leftValue": "={{ $json.data.name }}", "rightValue": "n8n account"}]}}, "typeVersion": 2.2}], "active": false, "pinData": {}, "settings": {"executionOrder": "v1"}, "versionId": "8a89a054-697f-4705-89a8-5d3288936206", "connections": {"Globals": {"main": [[{"node": "Get all files in given path", "type": "main", "index": 0}]]}, "Split the result": {"main": [[{"node": "Get file content from GitHub", "type": "main", "index": 0}]]}, "Convert files to JSON": {"main": [[{"node": "Check for skipped Credentials", "type": "main", "index": 0}]]}, "Get all files in given path": {"main": [[{"node": "Split the result", "type": "main", "index": 0}]]}, "Get file content from GitHub": {"main": [[{"node": "Convert files to JSON", "type": "main", "index": 0}]]}, "Check for skipped Credentials": {"main": [[], [{"node": "Restore n8n Credentials", "type": "main", "index": 0}]]}, "When clicking \u2018Test workflow\u2019": {"main": [[{"node": "Globals", "type": "main", "index": 0}]]}}}