{"name":"Backup workflows to git repository","nodes":[{"id":"b09ae4c6-ad75-4b3b-a78a-4cc2d48b2d24","name":"GitHub","type":"n8n-nodes-base.github","position":[-40,-20],"parameters":{"owner":"={{$node[\"Globals\"].json[\"repo\"][\"owner\"]}}","filePath":"={{$node[\"Globals\"].json[\"repo\"][\"path\"]}}{{$json[\"name\"]}}.json","resource":"file","operation":"get","repository":"={{$node[\"Globals\"].json[\"repo\"][\"name\"]}}","asBinaryProperty":false,"additionalParameters":{}},"credentials":{"githubApi":{"id":"lSdxakI6ik5M2np2","name":"Shashikanth | GitHub account"}},"typeVersion":1,"continueOnFail":true,"alwaysOutputData":true,"notes":"This github node performs automated tasks as part of the workflow."},{"id":"639582ef-f13e-4844-bd10-647718079121","name":"Globals","type":"n8n-nodes-base.set","position":[-740,-100],"parameters":{"values":{"string":[{"name":"repo.owner","value":"shashikanth171"},{"name":"repo.name","value":"n8n-backup"},{"name":"repo.path","value":"workflows/"}]},"options":{}},"typeVersion":1,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"9df89713-220e-43b9-b234-b8f5612629cf","name":"n8n","type":"n8n-nodes-base.n8n","position":[-500,-100],"parameters":{"filters":{},"requestOptions":{}},"credentials":{"n8nApi":{"id":"RgwFr3HsPUEjFJNO","name":"n8n account"}},"typeVersion":1,"notes":"This n8n node performs automated tasks as part of the workflow."},{"id":"43a60315-d381-4ac4-be4c-f6a158651a00","name":"Loop Over Items","type":"n8n-nodes-base.splitInBatches","position":[-280,-100],"parameters":{"options":{}},"executeOnce":false,"typeVersion":3,"notes":"This splitInBatches node performs automated tasks as part of the workflow."},{"id":"41a7da89-1c8c-4100-8c30-d0788962efc1","name":"If Node","type":"n8n-nodes-base.if","position":[160,-20],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"16a9182d-059d-4774-ba95-654fb4293fdb","operator":{"type":"string","operation":"notExists","singleValue":true},"leftValue":"={{ $json.error }}","rightValue":""}]}},"typeVersion":2.2,"notes":"This if node performs automated tasks as part of the workflow."},{"id":"ab9246eb-a253-4d76-b33b-5f8f12342542","name":"If1","type":"n8n-nodes-base.if","position":[1040,260],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"e0c66624-429a-4f1f-bf7b-1cc1b32bad7b","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.content }}","rightValue":"={{ $('Loop Over Items').item.json.toJsonString() }}"}]}},"typeVersion":2.2,"notes":"This if node performs automated tasks as part of the workflow."},{"id":"72e4a5a4-6dfe-4b5c-b57b-7c1c9625e967","name":"Code","type":"n8n-nodes-base.code","position":[720,-40],"parameters":{"jsCode":"let items = $input.all()\n\nfor (item of items) {\n    item.json.content = Buffer.from(item.json.content, 'base64').toString('utf8')\n}\n\nreturn items;\n"},"typeVersion":2,"notes":"This code node performs automated tasks as part of the workflow."},{"id":"68f14ac5-14d6-432e-9e6b-25df610eadac","name":"Create new file and commit","type":"n8n-nodes-base.github","position":[340,140],"parameters":{"owner":"={{$node[\"Globals\"].json[\"repo\"][\"owner\"]}}","filePath":"={{$node[\"Globals\"].json[\"repo\"][\"path\"]}}{{ $('Loop Over Items').item.json.name }}.json","resource":"file","repository":"={{$node[\"Globals\"].json[\"repo\"][\"name\"]}}","fileContent":"={{ $('Loop Over Items').item.json.toJsonString()  }}","commitMessage":"=[N8N Backup] {{ $('Loop Over Items').item.json.name }}.json"},"credentials":{"githubApi":{"id":"lSdxakI6ik5M2np2","name":"Shashikanth | GitHub account"}},"typeVersion":1,"notes":"This github node performs automated tasks as part of the workflow."},{"id":"e50f00a3-292c-4285-b767-8d6ee4606575","name":"Update file content and commit","type":"n8n-nodes-base.github","position":[1400,460],"parameters":{"owner":"={{$node[\"Globals\"].json[\"repo\"][\"owner\"]}}","filePath":"={{$node[\"Globals\"].json[\"repo\"][\"path\"]}}{{ $('Loop Over Items').item.json.name }}.json","resource":"file","operation":"edit","repository":"={{$node[\"Globals\"].json[\"repo\"][\"name\"]}}","fileContent":"={{ $('Loop Over Items').item.json.toJsonString()  }}","commitMessage":"=[N8N Backup] {{ $('Loop Over Items').item.json.name }}.json"},"credentials":{"githubApi":{"id":"lSdxakI6ik5M2np2","name":"Shashikanth | GitHub account"}},"typeVersion":1,"notes":"This github node performs automated tasks as part of the workflow."},{"id":"4b2d375c-a339-404c-babd-555bd2fc4091","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[-960,-100],"parameters":{"rule":{"interval":[{"field":"minutes"}]}},"typeVersion":1.2,"notes":"This scheduleTrigger node performs automated tasks as part of the workflow."},{"id":"ea026e96-0db1-41fd-b003-2f2bf4662696","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[1560,480],"parameters":{"height":80,"content":"Workflow changes committed to the repository"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"9c402daa-6d03-485d-b8a0-58f1b65d396d","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[1180,260],"parameters":{"height":80,"content":"Check if there are any changes in the workflow"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"1d9216d9-bf8d-4945-8a58-22fb1ffc9be8","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[460,160],"parameters":{"height":80,"content":"Create a new file for the workflow"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"60a3953b-d9f1-4afd-b299-e314116b96c6","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[160,-120],"parameters":{"height":80,"content":"Check if file exists in the repository"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"6df689fb-cb49-4634-9d1e-59648a1e7219","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[660,-140],"parameters":{"height":80,"content":"Convert the file contents to JSON string"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"f2340ad0-71a1-4c74-8d90-bcb974b8b305","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-560,-200],"parameters":{"height":80,"content":"Get all workflows"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"617bea19-341a-4e9d-b6fd-6b417e58d756","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[-820,40],"parameters":{"height":80,"content":"Set variables"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"error-c5c07d26","name":"Error Handler","type":"n8n-nodes-base.stopAndError","typeVersion":1,"position":[1000,400],"parameters":{"message":"Workflow execution error","options":{}}}],"connections":{},"settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"description":"Automated workflow: Backup workflows to git repository. This workflow integrates 8 different services: stickyNote, code, scheduleTrigger, n8n, set. It contains 17 nodes and follows best practices for error handling and security.","meta":{"instanceId":"workflow-784f7a4d","versionId":"1.0.0","createdAt":"2025-09-29T07:07:42.629835","updatedAt":"2025-09-29T07:07:42.629847","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"notes":"Excellent quality workflow: Backup workflows to git repository. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}