{"workflow":{"id":1942,"name":"Push and update files in GitHub","views":7175,"recentViews":0,"totalViews":7175,"createdAt":"2023-08-29T07:37:20.522Z","description":"This workflow performs various Git operations. It starts with a manual trigger, sets the local repository path, decodes a file and then updates a file's content, adds, commits, and pushes changes to a GitHub repository, and finally pulls changes.\n\nThe upper branch of the workflow retrieves a specific file (\"README.md\") from a GitHub repository (\"git_push_article\") owned by \"teds-tech-talks.\" It then decodes the file's binary data into readable text using a code node. The decoded content is used to update the file by adding a timestamp and data. Finally, the modified file is pushed back to the repository using a GitHub node, completing the process of editing and updating the file directly via the workflow.\n\nThis bottom branch of the workflow makes changes to a local Git repository. It starts by updating the \"README.md\" file with a timestamp and some content. Then, it adds the modified files, commits the changes with a message, and pushes them to a remote GitHub repository owned by \"teds-tech-talks.\" Additionally, the workflow allows pulling changes from the remote repository into the local repository. The goal is to demonstrate how to perform various Git operations using n8n nodes, including adding, committing, pushing, and pulling changes.","workflow":{"id":"kdqqvoh5qZaYawq1","meta":{"instanceId":"fb924c73af8f703905bc09c9ee8076f48c17b596ed05b18c0ff86915ef8a7c4a"},"name":"Work with GitHub | examples","tags":[{"id":"y9tvM3hISJKT2jeo","name":"Ted's Tech Talks","createdAt":"2023-08-15T22:12:34.260Z","updatedAt":"2023-08-15T22:12:34.260Z"}],"nodes":[{"id":"b3f0b4a9-34ea-4630-8756-eb43f8ecb4ff","name":"When clicking \"Execute Workflow\"","type":"n8n-nodes-base.manualTrigger","position":[220,640],"parameters":{},"typeVersion":1},{"id":"f5cb92f3-c3df-4640-90c1-870c9f27d085","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[830,402],"parameters":{"width":865.0290253216738,"height":244.559082047148,"content":"## Push a single file via GitHub node directly to the remote GitHub repo"},"typeVersion":1},{"id":"54f7a07c-8d85-4c69-81c9-a95449958eb4","name":"GitHub push edited file","type":"n8n-nodes-base.github","position":[1200,480],"parameters":{"owner":{"__rl":true,"mode":"list","value":"teds-tech-talks","cachedResultUrl":"https://github.com/teds-tech-talks","cachedResultName":"teds-tech-talks"},"filePath":"README.md","resource":"file","operation":"edit","repository":{"__rl":true,"mode":"list","value":"git_push_article","cachedResultUrl":"https://github.com/teds-tech-talks/git_push_article","cachedResultName":"git_push_article"},"fileContent":"={{ $json.data }}\n## Updated at:\n{{ $now.toISO() }}","commitMessage":"updated from n8n via GitHub node","authentication":"oAuth2"},"credentials":{"githubOAuth2Api":{"id":"credential-id","name":"githubOAuth2Api Credential"}},"typeVersion":1},{"id":"2b625156-17a5-4245-9ee8-604a631d65fe","name":"Update README and add new file","type":"n8n-nodes-base.executeCommand","position":[1040,800],"parameters":{"command":"=echo '' >> {{ $('config').item.json.localrepo }}/README.md\necho '## Updated at:' >> {{ $('config').item.json.localrepo }}/README.md\necho '{{ $now.toISO() }}' >> {{ $('config').item.json.localrepo }}/README.md\necho 'Check new file' >> {{ $('config').item.json.localrepo }}/README.md\necho '' >> {{ $('config').item.json.localrepo }}/README.md\n\necho '# This is a new file' >> {{ $('config').item.json.localrepo }}/new_{{ $now.toFormat('yyyyddMM-hhmmss') }}.md"},"typeVersion":1},{"id":"99bf3b00-7e51-49b6-a602-8769012d9270","name":"Add files","type":"n8n-nodes-base.git","position":[1200,800],"parameters":{"operation":"add","pathsToAdd":".","repositoryPath":"={{ $('config').item.json.localrepo }}"},"typeVersion":1},{"id":"f0e220c5-d717-471f-8b0c-cca3a06ff7f6","name":"Commit","type":"n8n-nodes-base.git","position":[1360,800],"parameters":{"message":"updated from n8n via Git node","options":{},"operation":"commit","repositoryPath":"={{ $('config').item.json.localrepo }}"},"typeVersion":1},{"id":"7ef8674e-3c1f-4903-aa3e-28af69d80264","name":"Push","type":"n8n-nodes-base.git","position":[1520,800],"parameters":{"options":{"targetRepository":"https://github.com/teds-tech-talks/git_push_article.git"},"operation":"push","authentication":"gitPassword","repositoryPath":"={{ $('config').item.json.localrepo }}"},"credentials":{"gitPassword":{"id":"credential-id","name":"gitPassword Credential"}},"typeVersion":1},{"id":"f27bb600-4352-47db-aeeb-7688fa6c72c1","name":"config","type":"n8n-nodes-base.set","position":[520,640],"parameters":{"values":{"string":[{"name":"localrepo","value":"/path/to/git/repo"}]},"options":{}},"typeVersion":2},{"id":"512f0333-358d-43e6-a03f-b13792969d04","name":"Pull","type":"n8n-nodes-base.git","position":[880,800],"parameters":{"operation":"pull","repositoryPath":"={{ $('config').item.json.localrepo }}"},"typeVersion":1},{"id":"2830b321-5b58-4080-9a53-ddc703a80ec9","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[827.4395480225996,720],"parameters":{"width":870.5619913953059,"height":251.5433184970501,"content":"## Push all changes via Git node"},"typeVersion":1},{"id":"da8b52dd-4245-4adb-aff8-63f19a002d16","name":"GitHub get file","type":"n8n-nodes-base.github","position":[880,480],"parameters":{"owner":{"__rl":true,"mode":"list","value":"teds-tech-talks","cachedResultUrl":"https://github.com/teds-tech-talks","cachedResultName":"teds-tech-talks"},"filePath":"README.md","resource":"file","operation":"get","repository":{"__rl":true,"mode":"list","value":"git_push_article","cachedResultUrl":"https://github.com/teds-tech-talks/git_push_article","cachedResultName":"git_push_article"},"authentication":"oAuth2","additionalParameters":{}},"credentials":{"githubOAuth2Api":{"id":"credential-id","name":"githubOAuth2Api Credential"}},"typeVersion":1},{"id":"e4eb2f71-5b66-4ab7-bb1a-b48ef25728e1","name":"Decode file","type":"n8n-nodes-base.code","position":[1040,480],"parameters":{"jsCode":"var text = Buffer.from($input.first().binary.data.data, 'base64').toString('utf8');\nreturn {\"data\": text};"},"typeVersion":2},{"id":"ec27d375-b994-415c-be53-5715df83585c","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[400.9808509052974,440],"parameters":{"width":373.9894195663518,"height":383.3156992772523,"content":"## Please update the path to the local repository and connect this node to the upper or lower parts of the workflow"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"4bf99f5b-96e7-4f12-a14d-187a0b39a07e","connections":{"Pull":{"main":[[{"node":"Update README and add new file","type":"main","index":0}]]},"Commit":{"main":[[{"node":"Push","type":"main","index":0}]]},"Add files":{"main":[[{"node":"Commit","type":"main","index":0}]]},"Decode file":{"main":[[{"node":"GitHub push edited file","type":"main","index":0}]]},"GitHub get file":{"main":[[{"node":"Decode file","type":"main","index":0}]]},"Update README and add new file":{"main":[[{"node":"Add files","type":"main","index":0}]]},"When clicking \"Execute Workflow\"":{"main":[[{"node":"config","type":"main","index":0}]]}}},"lastUpdatedBy":16,"workflowInfo":null,"status":"published","readyToDemo":null,"user":{"name":"n8n Team","username":"n8n-team","bio":"Meet the official n8n team. We specialize in building workflows that transform intricate tasks into seamless operations.","verified":true,"links":[""],"avatar":"https://gravatar.com/avatar/b3d1a47322f05a8be3d2e7bad6a80c29161bd58b91e4762cbb3ac25e5d0db5a8?r=pg&d=retro&size=200"},"nodes":[{"id":16,"icon":"file:github.svg","name":"n8n-nodes-base.github","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.github/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/github/"}]},"categories":["Development"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"GitHub"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMC4wMTY1IDBDOC45NDc5MSAwIDAgOS4wMTM4OCAwIDIwLjE2NTNDMCAyOS4wNzkyIDUuNzMzMjQgMzYuNjI0NiAxMy42ODY4IDM5LjI5NTJDMTQuNjgxMiAzOS40OTYgMTUuMDQ1NCAzOC44NjEzIDE1LjA0NTQgMzguMzI3NEMxNS4wNDU0IDM3Ljg1OTkgMTUuMDEyNiAzNi4yNTc1IDE1LjAxMjYgMzQuNTg3OUM5LjQ0NDUgMzUuNzkgOC4yODQ5OCAzMi4xODQxIDguMjg0OTggMzIuMTg0MUM3LjM5MDE1IDI5Ljg0NyA2LjA2NDI5IDI5LjI0NjMgNi4wNjQyOSAyOS4yNDYzQzQuMjQxODUgMjguMDExIDYuMTk3MDQgMjguMDExIDYuMTk3MDQgMjguMDExQzguMjE4NjEgMjguMTQ0NiA5LjI3OTM4IDMwLjA4MSA5LjI3OTM4IDMwLjA4MUMxMS4wNjg2IDMzLjE1MjIgMTMuOTUxOCAzMi4yODQ0IDE1LjExMTggMzEuNzUwMkMxNS4yNzczIDMwLjQ0ODEgMTUuODA3OSAyOS41NDY3IDE2LjM3MTMgMjkuMDQ2QzExLjkzMDMgMjguNTc4NSA3LjI1NzgxIDI2Ljg0MjUgNy4yNTc4MSAxOS4wOTY3QzcuMjU3ODEgMTYuODkzMiA4LjA1MjY3IDE1LjA5MDUgOS4zMTIxNiAxMy42ODg0QzkuMTEzNDQgMTMuMTg3NyA4LjQxNzMyIDExLjExNzQgOS41MTEyOCA4LjM0NjQ0QzkuNTExMjggOC4zNDY0NCAxMS4yMDE0IDcuODEyMTcgMTUuMDEyMiAxMC40MTY0QzE2LjY0MzggOS45NzQ5NSAxOC4zMjYzIDkuNzUwNCAyMC4wMTY1IDkuNzQ4NTFDMjEuNzA2NyA5Ljc0ODUxIDIzLjQyOTUgOS45ODI0NiAyNS4wMjA1IDEwLjQxNjRDMjguODMxNyA3LjgxMjE3IDMwLjUyMTggOC4zNDY0NCAzMC41MjE4IDguMzQ2NDRDMzEuNjE1OCAxMS4xMTc0IDMwLjkxOTIgMTMuMTg3NyAzMC43MjA1IDEzLjY4ODRDMzIuMDEzMiAxNS4wOTA1IDMyLjc3NTMgMTYuODkzMiAzMi43NzUzIDE5LjA5NjdDMzIuNzc1MyAyNi44NDI1IDI4LjEwMjggMjguNTQ0OSAyMy42Mjg3IDI5LjA0NkMyNC4zNTggMjkuNjgwMiAyNC45ODczIDMwLjg4MiAyNC45ODczIDMyLjc4NTFDMjQuOTg3MyAzNS40ODkzIDI0Ljk1NDUgMzcuNjU5NiAyNC45NTQ1IDM4LjMyN0MyNC45NTQ1IDM4Ljg2MTMgMjUuMzE5MiAzOS40OTYgMjYuMzEzMiAzOS4yOTU2QzM0LjI2NjcgMzYuNjI0MiAzOS45OTk5IDI5LjA3OTIgMzkuOTk5OSAyMC4xNjUzQzQwLjAzMjcgOS4wMTM4OCAzMS4wNTIgMCAyMC4wMTY1IDBaIiBmaWxsPSIjMjQyOTJGIi8+Cjwvc3ZnPgo="},"displayName":"GitHub","typeVersion":1,"nodeCategories":[{"id":5,"name":"Development"}]},{"id":492,"icon":"file:git.svg","name":"n8n-nodes-base.git","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.git/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/git/"}]},"categories":["Core Nodes","Development"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":["Helpers"]}},"group":"[\"transform\"]","defaults":{"name":"Git"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5NyIgaGVpZ2h0PSI5NyI+PHBhdGggZmlsbD0iI0YwNTEzMyIgZD0iTTkyLjcxIDQ0LjQwOCA1Mi41OTEgNC4yOTFhNS45MiA1LjkyIDAgMCAwLTguMzY5IDBsLTguMzMgOC4zMzJMNDYuNDU5IDIzLjE5YTcuMDIgNy4wMiAwIDAgMSA3LjIyOSAxLjY4NSA3LjAzIDcuMDMgMCAwIDEgMS42NyA3LjI3NWwxMC4xODYgMTAuMTg1YTcuMDMgNy4wMyAwIDAgMSA3LjI3NSAxLjY3MSA3LjA0MyA3LjA0MyAwIDAgMS05Ljk2MSA5Ljk1OCA3LjA0IDcuMDQgMCAwIDEtMS41MzEtNy42NThsLTkuNS05LjQ5OXYyNC45OTdhNy4wNDIgNy4wNDIgMCAxIDEtOC4wOTYgMTEuMjkxIDcuMDQyIDcuMDQyIDAgMCAxIDIuMzA3LTExLjQ5NnYtMjUuMjNhNy4wNCA3LjA0IDAgMCAxLTMuODIzLTkuMjM1TDMxLjc5OCAxNi43MTUgNC4yODggNDQuMjIyYTUuOTIgNS45MiAwIDAgMCAwIDguMzcxbDQwLjEyMSA0MC4xMThhNS45MiA1LjkyIDAgMCAwIDguMzY5IDBMOTIuNzEgNTIuNzc5YTUuOTIgNS45MiAwIDAgMCAwLTguMzcxIi8+PC9zdmc+"},"displayName":"Git","typeVersion":1,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":16,"name":"DevOps"}],"image":[]}}