{"id":"x0albhzs79R3Tmfm","meta":{"instanceId":"8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177","templateCredsSetupCompleted":true},"name":"Documentation Sync Workflow","tags":[],"nodes":[{"id":"e6f72597-24f7-46f9-bf57-df361d91d2c0","name":"Listen for PR Events","type":"n8n-nodes-base.githubTrigger","position":[-2064,176],"webhookId":"262ba0f4-0671-4950-9ce2-e5316717edab","parameters":{"owner":{"__rl":true,"mode":"url","value":"https://github.com/anuj658/n8n-project/tree/anuj"},"events":["pull_request"],"options":{},"repository":{"__rl":true,"mode":"list","value":"n8n-project","cachedResultUrl":"https://github.com/anuj658/n8n-project","cachedResultName":"n8n-project"},"authentication":"oAuth2"},"credentials":{"githubOAuth2Api":{"id":"xqrQrEJwugKxUIab","name":"GitHub account-anuj"}},"typeVersion":1},{"id":"155ef9cd-fe67-4af8-90b7-8cd33ab904af","name":"📋 Workflow Overview","type":"n8n-nodes-base.stickyNote","position":[-2384,80],"parameters":{"width":250,"height":300,"content":"🚀 WORKFLOW START\n\nThis workflow monitors GitHub pull requests and automatically syncs documentation to Confluence when changes are merged to the main branch.\n\n• Triggers on PR events\n• Validates PR is merged to main\n• Detects doc changes\n• Updates Confluence\n• Notifies team via Slack"},"typeVersion":1},{"id":"17016417-98fe-437d-bc8a-0dc47f78f737","name":"Is PR Merged to Main?","type":"n8n-nodes-base.if","position":[-1840,176],"parameters":{"conditions":{"string":[{"value1":"={{$json[\"body\"][\"pull_request\"][\"base\"][\"ref\"]}}","value2":"main","operation":"contains"},{"value1":"={{$json[\"body\"][\"pull_request\"][\"merged\"]}}","value2":"false"}]}},"typeVersion":1},{"id":"58d77011-30ef-4083-8039-8ad7c19b400f","name":"🔍 Validation Gate","type":"n8n-nodes-base.stickyNote","position":[-1952,352],"parameters":{"width":280,"height":280,"content":"✅ VALIDATION GATE\n\nChecks if the pull request:\n✓ Is targeting the 'main' branch\n✓ Has been merged (merged = true)\n\nOnly proceeds if BOTH conditions are met. This prevents syncing of unmerged or draft PRs."},"typeVersion":1},{"id":"ecd617ef-c912-463c-b33f-a5d4754465ef","name":"Fetch README Content","type":"n8n-nodes-base.github","position":[-1616,176],"webhookId":"51b734f8-e1cd-4bd0-8996-6b8e38f1cee0","parameters":{"owner":{"__rl":true,"mode":"url","value":"https://github.com/anuj658/n8n-project"},"filePath":"README.md","resource":"file","operation":"get","repository":{"__rl":true,"mode":"list","value":"n8n-project","cachedResultUrl":"https://github.com/anuj658/n8n-project","cachedResultName":"n8n-project"},"authentication":"oAuth2","additionalParameters":{}},"credentials":{"githubOAuth2Api":{"id":"xqrQrEJwugKxUIab","name":"GitHub account-anuj"}},"typeVersion":1.1},{"id":"cf09bbcd-f959-4ae1-8c1e-7c902072910f","name":"📥 File Retrieval","type":"n8n-nodes-base.stickyNote","position":[-1712,-128],"parameters":{"width":280,"height":280,"content":"📥 GITHUB FILE RETRIEVAL\n\nFetches the README.md file from the repository to:\n• Extract documentation content\n• Pass to change detection\n• Provide context for AI summarization\n\nUses GitHub OAuth2 for authentication"},"typeVersion":1},{"id":"456cf796-a361-4d82-afea-9bc66fe7f429","name":"Are Docs Modified?","type":"n8n-nodes-base.if","position":[-1392,176],"parameters":{"conditions":{"string":[{"value1":"={{JSON.stringify($json)}}","value2":"docs","operation":"contains"},{"value1":"={{JSON.stringify($json)}}","value2":"README","operation":"contains"},{"value1":"={{JSON.stringify($json)}}","value2":"openapi","operation":"contains"}]}},"typeVersion":1},{"id":"1f990ead-3f32-48c7-bbd7-a9cf5b9af9f9","name":"🔎 Doc Detection","type":"n8n-nodes-base.stickyNote","position":[-1504,352],"parameters":{"width":280,"height":320,"content":"🔎 DOCUMENTATION DETECTION\n\nScans the PR payload for keywords:\n✓ 'docs' folder changes\n✓ 'README' file modifications\n✓ 'openapi' spec updates\n\nIf ANY documentation changes detected:\n→ Routes to AI summarization\n→ Updates Confluence\n→ Notifies team\n\nOtherwise: Workflow ends"},"typeVersion":1},{"id":"622f0344-42a4-477c-ae9a-0a7c5b4c7355","name":"AI Summarizer Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[-1168,-80],"parameters":{"text":"Summarize the changes in the documentation briefly in 2-3 sentences.","options":{},"promptType":"define"},"typeVersion":2.2},{"id":"2c845de1-a35c-4f32-b112-74fb4e677880","name":"🤖 AI Agent","type":"n8n-nodes-base.stickyNote","position":[-1200,-384],"parameters":{"width":280,"height":280,"content":"🤖 AI SUMMARIZATION\n\nUses Azure OpenAI to:\n• Analyze doc changes\n• Generate concise summary\n• 2-3 sentence summary format\n\nOutput used for:\n→ Confluence update descriptions\n→ Slack notification message"},"typeVersion":1},{"id":"41f13861-a2bf-4c35-b1ea-82f2e275768f","name":"Azure OpenAI Model","type":"@n8n/n8n-nodes-langchain.lmChatAzureOpenAi","position":[-864,240],"parameters":{"model":"gpt-4o-mini","options":{}},"credentials":{"azureOpenAiApi":{"id":"C3WzT18XqF8OdVM6","name":"Azure Open AI account"}},"typeVersion":1},{"id":"f7559c04-28b2-4e3c-bb7d-06436e8524fd","name":"⚙️ LLM Config","type":"n8n-nodes-base.stickyNote","position":[-736,208],"parameters":{"width":280,"height":280,"content":"⚙️ LLM CONFIGURATION\n\nModel: GPT-4o Mini\nProvider: Azure OpenAI\n\nFeatures:\n• Fast processing\n• Cost-efficient\n• Context-aware summarization\n\nConnected to AI Agent for intelligent analysis"},"typeVersion":1},{"id":"9f005c0f-1416-4166-9d83-a26b658f0b84","name":"Alert Docs Team (Slack)","type":"n8n-nodes-base.slack","position":[-1056,320],"parameters":{"text":"📢 *Docs Auto-Synced!*\n📦 Repo: {{$json[\"body\"][\"repository\"][\"full_name\"]}}\n🌿 Branch: {{$json[\"body\"][\"pull_request\"][\"base\"][\"ref\"]}}\n👤 Author: {{$json[\"body\"][\"pull_request\"][\"user\"][\"login\"]}}\n📝 Title: {{$json[\"body\"][\"pull_request\"][\"title\"]}}\n🔗 PR: {{$json[\"body\"][\"pull_request\"][\"html_url\"]}}","channel":"#documentation-updates","attachments":[],"otherOptions":{}},"credentials":{"slackApi":{"id":null,"name":"Slack Token"}},"typeVersion":1},{"id":"205d8659-f97b-4310-ac09-0174da664684","name":"📢 Slack Alert","type":"n8n-nodes-base.stickyNote","position":[-992,512],"parameters":{"width":280,"height":300,"content":"📢 SLACK NOTIFICATION\n\nSends message to #documentation-updates with:\n✓ Auto-sync confirmation\n✓ Repository name\n✓ Target branch\n✓ Author name\n✓ PR title\n✓ PR link\n\nKeeps team informed of doc updates in real-time"},"typeVersion":1},{"id":"8e8c820c-ad01-40e9-b269-e1fa4f1ffc4f","name":"Post AI Summary to Slack","type":"n8n-nodes-base.slack","position":[-816,16],"webhookId":"3bd11cca-5947-4933-ab7d-9bdaadb693b5","parameters":{"text":"🔔 Documentation changes detected:\n{{$json}}","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C09GNB90TED","cachedResultName":"general-information"},"otherOptions":{}},"credentials":{"slackApi":{"id":"rNqvWj9TfChPVRYY","name":"Slack account vivek"}},"typeVersion":2.3},{"id":"31816220-f24d-47b2-ae2f-737e1157ed0e","name":"📤 Summary Post","type":"n8n-nodes-base.stickyNote","position":[-816,-272],"parameters":{"width":280,"height":280,"content":"📤 AI SUMMARY TO SLACK\n\nChannel: general-information\n\nPosts AI-generated summary to:\n• Keep team informed\n• Share key changes\n• Link to PR details\n• Enable quick reviews"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"bc63ac13-fb64-4148-99ea-e6e60d9c6d96","connections":{"Are Docs Modified?":{"main":[[{"node":"AI Summarizer Agent","type":"main","index":0}],[{"node":"Alert Docs Team (Slack)","type":"main","index":0}]]},"Azure OpenAI Model":{"ai_languageModel":[[{"node":"AI Summarizer Agent","type":"ai_languageModel","index":0}]]},"AI Summarizer Agent":{"main":[[{"node":"Post AI Summary to Slack","type":"main","index":0}]]},"Fetch README Content":{"main":[[{"node":"Are Docs Modified?","type":"main","index":0}]]},"Listen for PR Events":{"main":[[{"node":"Is PR Merged to Main?","type":"main","index":0}]]},"Is PR Merged to Main?":{"main":[[{"node":"Fetch README Content","type":"main","index":0}]]}}}