Mobile Workflow
Shared 12/10/2025
0 views
Visual Workflow
JSON Code
{
"id": "Qld91RR9ETjytC3B",
"meta": {
"instanceId": "98cc8ae177aefd726e0f9b5e23e9a6afea5a5b35ac6df51ae7543219dd626303"
},
"name": "Mobile Workflow",
"tags": [],
"nodes": [
{
"id": "76041c04-8404-44c1-99e2-109019f73dd3",
"name": "Enviroments",
"type": "n8n-nodes-base.code",
"notes": "Burada proje ayrımı ve android-ios ayrımı yapılmalı",
"position": [
496,
16
],
"parameters": {
"jsCode": "var map = new Map()\nmap.set(\"CSA\",\"ciceksepeti-android\")\nmap.set(\"CSI\",\"ciceksepeti-ios\")\n\n\nfor (const item of $input.all()) {\n var split = item.json.key.split(\"-\")[0]\n item.json.repository = \"https://github.com/ciceksepetitech/\" + map.get(split)\n}\nreturn $input.all()"
},
"notesInFlow": true,
"typeVersion": 2
},
{
"id": "ae4d6ce1-9c22-4543-a02c-470394be141f",
"name": "Jira: Ready For In Review",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
1168,
240
],
"parameters": {
"url": "=https://jira.brighteventure.com/rest/api/2/issue/{{ $('If: On Build Success').first().json.issueKey}}/transitions",
"method": "POST",
"options": {},
"jsonBody": "{\"transition\": {\"id\": 1021 }}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "jiraSoftwareServerPatApi"
},
"credentials": {
"jiraSoftwareServerPatApi": {
"id": "Rel1LqHLhEhHeKj2",
"name": "jira token"
}
},
"typeVersion": 4.2
},
{
"id": "8f61888d-619b-4b5e-8a86-78f6277ef73c",
"name": "Cursor: Launch New Agent",
"type": "n8n-nodes-base.httpRequest",
"position": [
1392,
-64
],
"parameters": {
"url": "https://api.cursor.com/v0/agents",
"method": "POST",
"options": {},
"jsonBody": "={\n \"prompt\": {\n \"text\": \"Analiz dokümanı içeriği #BEGIN {{ encodeURIComponent($json.content)}} #END formatında gelmektedir. Bu içeriği analiz ederek kod geliştirmeni gerçekleştir. Tamamlandıktan sonra PR açıklaması için PR-DESCRIPTION.MD dosyasını oluştur veya mevcut içeriğini temizleyerek yeniden yaz. PR açıklamasına şunları ekle:\\n\\n1. Etkilenen modüller, ekranlar ve dosyalar\\n2. Test mühendisinin kontrol etmesi gereken noktalar (kod bilgisi olmayan birinin anlayabileceği şekilde, yalın ve açıklayıcı bir dille yaz)\\n3. Yapılan değişikliklerin özeti\\n\\nTest senaryolarını ve kontrol edilmesi gereken yerleri net ve anlaşılır bir şekilde belirt.\"\n },\n \"source\": {\n \"repository\": \"{{ $('Item').item.json.content.repository }}\",\n \"ref\": \"develop\"\n },\n \"target\": {\n \"autoCreatePr\": true,\n \"branchName\": \"cursor/{{ $('Item').item.json.content.key}}\"\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "HazWWyC59knCJDrE",
"name": "Mobile-Cursor-Account"
}
},
"typeVersion": 4.2
},
{
"id": "fa53698f-ed04-4ebd-a499-8b5c3814b655",
"name": "Jira: Get Assigned First Issue",
"type": "n8n-nodes-base.jira",
"notes": "Android ve ios ayrımı key'e göre yapılacak\n",
"position": [
48,
16
],
"parameters": {
"options": {
"jql": "(PROJECT = CSA or project = CSI ) AND assignee = ai.mobiledeveloper AND status = \"Ready for Development\"",
"fields": "*assignee"
},
"operation": "getAll",
"returnAll": true,
"jiraVersion": "serverPat"
},
"credentials": {
"jiraSoftwareServerPatApi": {
"id": "Rel1LqHLhEhHeKj2",
"name": "jira token"
}
},
"notesInFlow": true,
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "12028f3b-ce1c-47d1-9979-1cba9ea59063",
"name": "Jira: Cursor Remote Link",
"type": "n8n-nodes-base.httpRequest",
"position": [
1616,
-64
],
"parameters": {
"url": "=https://jira.brighteventure.com/rest/api/2/issue/{{$('Loop').item.json.key}}/remotelink",
"method": "POST",
"options": {},
"jsonBody": "={\n \"object\": {\n \"url\":\"{{$json.target.url}}\",\n \"title\": \"Cursor Agent\"\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "jiraSoftwareServerPatApi"
},
"credentials": {
"jiraSoftwareServerPatApi": {
"id": "Rel1LqHLhEhHeKj2",
"name": "jira token"
}
},
"typeVersion": 4.2
},
{
"id": "8e1c827a-41e6-4168-84de-3aa54dbd4ac0",
"name": "Code: Get Issue Key From Branch Name",
"type": "n8n-nodes-base.code",
"position": [
48,
336
],
"parameters": {
"jsCode": "for (const item of $input.all()) {\n\n const branchName = item.json.body.branchName;\n \n // Python'daki 'split(\"/\")[-1]' (son elemanı alma) işleminin \n // JavaScript'teki karşılığı 'split(\"/\").pop()' veya '.at(-1)'dir.\n const issueKey = branchName.split(\"/\").pop(); \n \n item.json.issueKey = issueKey;\n}\nreturn $input.all();"
},
"typeVersion": 2
},
{
"id": "8bd68f08-683c-4350-8396-701801cbaf95",
"name": "Github: Build Finished",
"type": "n8n-nodes-base.webhook",
"position": [
-176,
336
],
"webhookId": "02b8d91b-73ec-4f8c-8717-248573970bcb",
"parameters": {
"path": "02b8d91b-73ec-4f8c-8717-248573970bcb",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2.1
},
{
"id": "1d560238-98c6-48ba-b3b6-6d95c210a68c",
"name": "If: On Build Success",
"type": "n8n-nodes-base.if",
"position": [
272,
336
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "181eec34-ed92-4c30-a9a2-373243a57aa8",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.body.isSuccess }}",
"rightValue": "true"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "d96d1482-e504-4c62-a5d0-c3fa04c5408f",
"name": "Code: Find Pr",
"type": "n8n-nodes-base.code",
"position": [
720,
240
],
"parameters": {
"jsCode": "const projects_maps = new Map ([\n [\"CSA\", [\"enciyo\", \"tacttn\"]],\n [\"CSI\", [\"mgokhanyavuz\", \"cuneytf\"]]\n]);\n\n\n// 'import json' satırına gerek yoktur, JavaScript JSON'u \n// (JavaScript Object Notation) doğal olarak işler.\n\n// Değişken tanımlamak için 'const' (veya 'let') kullanılır.\n// Fonksiyon çağrıları (Assuming _(...) is a function) aynı kalır.\nconst branch_name = $('Code: Get Issue Key From Branch Name').first().json.body.branchName;\nconst all_pr = $('Github: Get All PR').all();\n\n// Python 'for pr in all_pr:' döngüsü, JS 'for...of' döngüsüne dönüşür.\nfor (const pr of all_pr) {\n \n // 'and' operatörü '&&' olur.\n // Eşitlik kontrolü için '==' yerine '===' (strict equality) tercih edilir.\n if (pr.json.user.login === \"cs-ai-mobile-developer\" && pr.json.head.ref === branch_name) {\n \n // .split() ve dizi index'leme [0] syntax'ı JS'te aynıdır.\n const prefix = branch_name.split(\"/\")[1].split(\"-\")[0];\n \n // Python list/dict (JS array/object) yapısı da aynıdır.\n // 'projects_maps[prefix]' kullanımı da birebir aynı çalışır.\n return [{\n \"content\": pr,\n \"reviewers\": projects_maps.get(prefix)\n }];\n }\n}\n\n// Python 'raise Exception(...)' ifadesinin karşılığı 'throw new Error(...)' şeklindedir.\nthrow new Error(\"Not Found Pr\");"
},
"typeVersion": 2
},
{
"id": "c3248d6f-69dd-45ba-8feb-8269713c4166",
"name": "Git: Update PR Reviewers",
"type": "n8n-nodes-base.httpRequest",
"position": [
944,
240
],
"parameters": {
"url": "={{$json.content.json.url}}/requested_reviewers",
"method": "POST",
"options": {},
"jsonBody": "={\"reviewers\": {{ $json.reviewers.toJsonString() }}}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "MG1Q1syQpKCJDF3t",
"name": "Mobile-Github-Account"
},
"githubOAuth2Api": {
"id": "22HGzWIKrSgqtYXP",
"name": "GitHub account 3"
}
},
"typeVersion": 4.2
},
{
"id": "d5804ae3-74e9-42f3-8677-0a0e1aa1e47e",
"name": "Github: Get All PR",
"type": "n8n-nodes-base.httpRequest",
"position": [
496,
240
],
"parameters": {
"url": "=https://api.github.com/repos/{{$json.body.repository}}/pulls",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "MG1Q1syQpKCJDF3t",
"name": "Mobile-Github-Account"
},
"githubOAuth2Api": {
"id": "22HGzWIKrSgqtYXP",
"name": "GitHub account 3"
}
},
"typeVersion": 4.2
},
{
"id": "57ba02b6-4a26-451b-a310-2995eaef67bc",
"name": "Get Remote Link1",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
496,
432
],
"parameters": {
"url": "=https://jira.brighteventure.com/rest/api/2/issue/{{$('Code: Get Issue Key From Branch Name').item.json.issueKey}}/remotelink ",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "jiraSoftwareServerPatApi"
},
"credentials": {
"jiraSoftwareServerPatApi": {
"id": "Rel1LqHLhEhHeKj2",
"name": "jira token"
}
},
"executeOnce": false,
"notesInFlow": false,
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "e2c4f12a-21aa-4714-a9cc-07b7ea187f87",
"name": "Code: Cursor Agent Id",
"type": "n8n-nodes-base.code",
"position": [
720,
432
],
"parameters": {
"jsCode": "for (const item of $input.all()) {\n if (item.json.object.title === \"Cursor Agent\") {\n const link = item.json.object.url;\n \n // Python'daki split kullanımı birebir aynıdır.\n // Array'in [1] index'ini alarak \"?id=\" sonrasını elde ederiz.\n const cursor_agent_id = link.split(\"?id=\")[1];\n \n item.json.cursor_agent_id = cursor_agent_id;\n \n // Python'da döngü içinde 'return' kullanmak, bulunan ilk elemanı döndürür.\n // JavaScript'te de aynı mantıkla fonksiyonun sonlanmasını sağlarız.\n return item;\n }\n}\n\n// Python'daki 'raise Exception(...)' ifadesinin JS karşılığı 'throw new Error(...)' şeklindedir.\nthrow new Error(\"Agent bulamadım\");"
},
"typeVersion": 2
},
{
"id": "6f41129a-7cd7-4bca-b91b-6d0d95510df0",
"name": "Unzip Logs",
"type": "n8n-nodes-base.compression",
"position": [
1168,
432
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "a17f5786-21e1-4dae-b876-6cddbafc0324",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1616,
432
],
"parameters": {
"text": "={{ $json.data}}\n---\nYukarıda hata kodlarını özetleyip cursora vermek istiyorum. \n",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "1b9d955c-228e-4c55-a328-5ff18b757de9",
"name": "Extract from File",
"type": "n8n-nodes-base.extractFromFile",
"position": [
1392,
432
],
"parameters": {
"options": {},
"operation": "text",
"binaryPropertyName": "file_0"
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "9c49481b-892d-4c0f-bebf-f0373c4ca4e6",
"name": "Cursor: Follow Up",
"type": "n8n-nodes-base.httpRequest",
"position": [
1968,
432
],
"parameters": {
"url": "=https://api.cursor.com/v0/agents/{{$('Code: Cursor Agent Id').item.json.cursor_agent_id}}/followup",
"method": "POST",
"options": {},
"jsonBody": "={\n \"prompt\": {\n \"text\": \"Sana vereceğim outputa göre fix girer misin {{encodeURIComponent($json.output)}}\"\n }\n}\n",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "HazWWyC59knCJDrE",
"name": "Mobile-Cursor-Account"
}
},
"typeVersion": 4.2
},
{
"id": "a9b507b1-3354-4b9f-9ea7-32be42995b74",
"name": "If",
"type": "n8n-nodes-base.if",
"position": [
48,
752
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "24563295-ab14-4ca2-9c1e-e1332b1d769b",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.body.action }}",
"rightValue": "=closed"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "a8022306-8429-46ff-8664-aad21db2e371",
"name": "Code: Is Approved",
"type": "n8n-nodes-base.code",
"position": [
496,
752
],
"parameters": {
"jsCode": "let approve_count = 0;\n\n// forEach döngüsü, koleksiyon üzerindeki her öğeyi işlemek için kullanılır.\n$input.all().forEach(item => {\n // === (strict equality) kullanıyoruz.\n if (item.json.state === \"APPROVED\") {\n approve_count += 1; // Sayacı artır.\n }\n});\n\n// Otomasyon platformunun beklediği JS nesnesini döndür.\nreturn {\n \"is_approved\": approve_count === 1\n};"
},
"typeVersion": 2
},
{
"id": "b4ae8fa8-fad5-4bc9-b7ad-02661f8cc7ad",
"name": "Git: Pull Request Reviews",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
272,
752
],
"parameters": {
"url": "={{ $json.body.pull_request.url }}/reviews",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "MG1Q1syQpKCJDF3t",
"name": "Mobile-Github-Account"
},
"githubOAuth2Api": {
"id": "22HGzWIKrSgqtYXP",
"name": "GitHub account 3"
}
},
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "519f3057-5384-451a-97de-3f8f5af6b930",
"name": "Get Issue Id",
"type": "n8n-nodes-base.code",
"position": [
720,
752
],
"parameters": {
"jsCode": "// Github: Pr On Closed'dan branch adını al.\nconst branchName = $('Github: Pr On Closed').first().json.body.pull_request.head.ref;\n\n// _input.all() koleksiyonu üzerinde döngü yap.\n// Bu senaryoda for...of döngüsü, Python'daki for döngüsünün en doğrudan karşılığıdır.\nfor (const item of $input.all()) {\n \n // branchName'i '/' karakterine göre böl ve son elemanı al.\n // Python'daki split(\"/\")[-1] işlemi, JS'te split(\"/\").pop() ile yapılır.\n const issueKey = branchName.split(\"/\").pop();\n \n // Oluşturulan issueKey'i öğeye ata.\n item.json.issueKey = issueKey;\n}\n\n// Koleksiyonu geri döndür.\nreturn $input.all();"
},
"typeVersion": 2
},
{
"id": "6c9b3209-b78e-4fa9-bbe3-aa9ae183e97f",
"name": "Git: Get PR Description File",
"type": "n8n-nodes-base.httpRequest",
"notes": "Sabit bir url var, bunu direkt böyle kullanabiliriz",
"onError": "continueRegularOutput",
"position": [
944,
752
],
"parameters": {
"url": "=https://api.github.com/repos/{{ $('Github: Pr On Closed').item.json.body.pull_request.head.repo.full_name }}/contents/PR-DESCRIPTION.MD?ref=cursor/{{ $json.issueKey }}",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "MG1Q1syQpKCJDF3t",
"name": "Mobile-Github-Account"
},
"githubOAuth2Api": {
"id": "22HGzWIKrSgqtYXP",
"name": "GitHub account 3"
}
},
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "9521132f-22c2-4498-8aca-8d3d44ea376e",
"name": "Jira: Send Comment",
"type": "n8n-nodes-base.httpRequest",
"notes": "PR-DESCRIPTION.MD dosyasının içeriğini ve linki kopyalayacağız, jira comment olarak atacağız",
"onError": "continueRegularOutput",
"position": [
1168,
752
],
"parameters": {
"url": "=https://jira.brighteventure.com/rest/api/2/issue/{{$('Get Issue Id').item.json.issueKey}}/comment",
"method": "POST",
"options": {},
"jsonBody": "={\"body\": \"Test notu: {{$json.html_url}}\"}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "jiraSoftwareServerPatApi"
},
"credentials": {
"jiraSoftwareServerPatApi": {
"id": "Rel1LqHLhEhHeKj2",
"name": "jira token"
}
},
"notesInFlow": true,
"typeVersion": 4.2
},
{
"id": "509d0338-d417-4be4-be79-6f81d233b1fb",
"name": "Jira: Ready For QA",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
1392,
752
],
"parameters": {
"url": "=https://jira.brighteventure.com/rest/api/2/issue/{{$('Get Issue Id').item.json.issueKey}}/transitions",
"method": "POST",
"options": {},
"jsonBody": "{\"transition\": {\"id\": 1031 }}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "jiraSoftwareServerPatApi"
},
"credentials": {
"jiraSoftwareServerPatApi": {
"id": "Rel1LqHLhEhHeKj2",
"name": "jira token"
}
},
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "3002b266-a662-4a05-a606-432849db8bfd",
"name": "Github: Pr On Closed",
"type": "n8n-nodes-base.webhook",
"position": [
-176,
752
],
"webhookId": "f2d5735c-8d39-44d9-9893-afb4708e866c",
"parameters": {
"path": "2a954f2f-216f-48fe-8c29-9974fb8f3802",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2.1
},
{
"id": "9b3211aa-c483-4a56-87e0-6ff93ae0dbd8",
"name": "Jira: On Assigne",
"type": "n8n-nodes-base.webhook",
"position": [
-176,
16
],
"webhookId": "c43ab272-80b5-4296-8d8b-5295587182b6",
"parameters": {
"path": "c43ab272-80b5-4296-8d8b-5295587182b6",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2.1
},
{
"id": "441250ed-8257-4726-843e-99a7de6d6bcb",
"name": "Jira: In Development",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
1840,
16
],
"parameters": {
"url": "=https://jira.brighteventure.com/rest/api/2/issue/{{$('Loop').item.json.key}}/transitions",
"method": "POST",
"options": {},
"jsonBody": "{\"transition\": {\"id\": 1051 }}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "jiraSoftwareServerPatApi"
},
"credentials": {
"jiraSoftwareServerPatApi": {
"id": "Rel1LqHLhEhHeKj2",
"name": "jira token"
}
},
"typeVersion": 4.2
},
{
"id": "6c75d64a-13b3-4685-9854-e8ecf1cc7a57",
"name": "Loop",
"type": "n8n-nodes-base.splitInBatches",
"position": [
720,
16
],
"parameters": {
"options": {},
"batchSize": "=1"
},
"typeVersion": 3
},
{
"id": "e4299064-17e7-4405-b3cc-d0dff56e3c46",
"name": "OpenRouter Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
1696,
656
],
"parameters": {
"model": "deepseek/deepseek-chat-v3.1:free",
"options": {}
},
"credentials": {
"openRouterApi": {
"id": "YHBH2G6458hGwF0q",
"name": "Mobile-Openrouter"
}
},
"typeVersion": 1
},
{
"id": "0b939cc4-08ff-4c69-a227-d1f73b17068e",
"name": "Item",
"type": "n8n-nodes-base.set",
"position": [
944,
-64
],
"parameters": {
"values": {
"string": [
{
"name": "=content",
"value": "={{ $json }}"
}
]
},
"options": {},
"keepOnlySet": true
},
"typeVersion": 2
},
{
"id": "c9c815b0-f3eb-406a-adb0-bcc239cab989",
"name": "Git: Download Action Logs",
"type": "n8n-nodes-base.httpRequest",
"position": [
944,
432
],
"parameters": {
"url": "=https://api.github.com/repos/{{$('Github: Build Finished').item.json.body.repository}}/actions/runs/{{$('Github: Build Finished').item.json.body.actionRunId}}/logs",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "MG1Q1syQpKCJDF3t",
"name": "Mobile-Github-Account"
},
"githubOAuth2Api": {
"id": "22HGzWIKrSgqtYXP",
"name": "GitHub account 3"
}
},
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "2b23fec5-03c6-47b1-91be-8297f2c3e7bd",
"name": "Get Confluence Content From Jira",
"type": "n8n-nodes-base.executeWorkflow",
"position": [
1168,
-64
],
"parameters": {
"options": {},
"workflowId": {
"__rl": true,
"mode": "list",
"value": "ZJJod2sWj5YD59Lz",
"cachedResultName": "Sub: Get Confluence Content From Jira"
},
"workflowInputs": {
"value": {
"key": "={{ $json.content.key }}"
},
"schema": [
{
"id": "key",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "key",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"key"
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
}
},
"typeVersion": 1.2
},
{
"id": "c2e100d2-d02e-462c-9639-779b67766354",
"name": "If: Has task",
"type": "n8n-nodes-base.if",
"position": [
272,
16
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "542ff52f-173d-4d1f-a85f-a2d2e8b1aa14",
"operator": {
"type": "object",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{$json }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
}
],
"active": true,
"pinData": {
"Jira: On Assigne": [
{
"json": {
"body": {},
"query": {},
"params": {},
"headers": {
"host": "ciceksepeti.app.n8n.cloud",
"accept": "*/*",
"cf-ray": "9a188d6ef675b66a-IST",
"cdn-loop": "cloudflare; loops=1; subreqs=1",
"cf-ew-via": "15",
"cf-worker": "n8n.cloud",
"x-real-ip": "95.70.244.200",
"cf-visitor": "{\"scheme\":\"https\"}",
"user-agent": "PostmanRuntime/7.50.0",
"cf-ipcountry": "TR",
"x-is-trusted": "yes",
"postman-token": "ad2930ea-530c-4214-a715-370ac8992f77",
"content-length": "0",
"accept-encoding": "gzip, br",
"x-forwarded-for": "95.70.244.200, 172.69.199.188",
"cf-connecting-ip": "95.70.244.200",
"x-forwarded-host": "ciceksepeti.app.n8n.cloud",
"x-forwarded-port": "443",
"x-forwarded-proto": "https",
"x-forwarded-server": "traefik-prod-users-gwc-38-6f9f659dd9-jgqnt"
},
"webhookUrl": "https://ciceksepeti.app.n8n.cloud/webhook/c43ab272-80b5-4296-8d8b-5295587182b6",
"executionMode": "production"
}
}
],
"Github: Build Finished": [
{
"json": {
"body": {
"isSuccess": true,
"branchName": "cursor/CSA-2177",
"repository": "ciceksepetitech/ciceksepeti-android",
"actionRunId": "19423056599"
},
"query": {},
"params": {},
"headers": {
"host": "ciceksepeti.app.n8n.cloud",
"accept": "*/*",
"cf-ray": "99fdde7a25cf5292-IAD",
"cdn-loop": "cloudflare; loops=1; subreqs=1",
"cf-ew-via": "15",
"cf-worker": "n8n.cloud",
"x-real-ip": "4.152.229.160",
"cf-visitor": "{\"scheme\":\"https\"}",
"user-agent": "curl/8.5.0",
"cf-ipcountry": "US",
"content-type": "application/json",
"x-is-trusted": "yes",
"content-length": "155",
"accept-encoding": "gzip, br",
"x-forwarded-for": "4.152.229.160, 162.158.79.18",
"cf-connecting-ip": "4.152.229.160",
"x-forwarded-host": "ciceksepeti.app.n8n.cloud",
"x-forwarded-port": "443",
"x-forwarded-proto": "https",
"x-forwarded-server": "traefik-prod-users-gwc-38-6f9f659dd9-865tl",
"ngrok-skip-browser-warning": "true"
},
"webhookUrl": "https://ciceksepeti.app.n8n.cloud/webhook/02b8d91b-73ec-4f8c-8717-248573970bcb",
"executionMode": "production"
}
}
]
},
"settings": {
"callerPolicy": "workflowsFromSameOwner",
"executionOrder": "v1",
"saveExecutionProgress": true,
"timeSavedPerExecution": 1
},
"versionId": "7ba0c75c-d096-4e4c-832a-2bcf2d70197f",
"connections": {
"If": {
"main": [
[
{
"node": "Git: Pull Request Reviews",
"type": "main",
"index": 0
}
]
]
},
"Item": {
"main": [
[
{
"node": "Get Confluence Content From Jira",
"type": "main",
"index": 0
}
]
]
},
"Loop": {
"main": [
[],
[
{
"node": "Item",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Cursor: Follow Up",
"type": "main",
"index": 0
}
]
]
},
"Unzip Logs": {
"main": [
[
{
"node": "Extract from File",
"type": "main",
"index": 0
}
]
]
},
"Enviroments": {
"main": [
[
{
"node": "Loop",
"type": "main",
"index": 0
}
]
]
},
"Get Issue Id": {
"main": [
[
{
"node": "Git: Get PR Description File",
"type": "main",
"index": 0
}
]
]
},
"If: Has task": {
"main": [
[
{
"node": "Enviroments",
"type": "main",
"index": 0
}
]
]
},
"Code: Find Pr": {
"main": [
[
{
"node": "Git: Update PR Reviewers",
"type": "main",
"index": 0
}
]
]
},
"Get Remote Link1": {
"main": [
[
{
"node": "Code: Cursor Agent Id",
"type": "main",
"index": 0
}
]
]
},
"Jira: On Assigne": {
"main": [
[
{
"node": "Jira: Get Assigned First Issue",
"type": "main",
"index": 0
}
]
]
},
"Code: Is Approved": {
"main": [
[
{
"node": "Get Issue Id",
"type": "main",
"index": 0
}
]
]
},
"Extract from File": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Github: Get All PR": {
"main": [
[
{
"node": "Code: Find Pr",
"type": "main",
"index": 0
}
]
]
},
"Jira: Send Comment": {
"main": [
[
{
"node": "Jira: Ready For QA",
"type": "main",
"index": 0
}
]
]
},
"Github: Pr On Closed": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"If: On Build Success": {
"main": [
[
{
"node": "Github: Get All PR",
"type": "main",
"index": 0
}
],
[
{
"node": "Get Remote Link1",
"type": "main",
"index": 0
}
]
]
},
"Jira: In Development": {
"main": [
[
{
"node": "Loop",
"type": "main",
"index": 0
}
]
]
},
"Code: Cursor Agent Id": {
"main": [
[
{
"node": "Git: Download Action Logs",
"type": "main",
"index": 0
}
]
]
},
"OpenRouter Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Github: Build Finished": {
"main": [
[
{
"node": "Code: Get Issue Key From Branch Name",
"type": "main",
"index": 0
}
]
]
},
"Cursor: Launch New Agent": {
"main": [
[
{
"node": "Jira: Cursor Remote Link",
"type": "main",
"index": 0
}
]
]
},
"Git: Update PR Reviewers": {
"main": [
[
{
"node": "Jira: Ready For In Review",
"type": "main",
"index": 0
}
]
]
},
"Jira: Cursor Remote Link": {
"main": [
[
{
"node": "Jira: In Development",
"type": "main",
"index": 0
}
]
]
},
"Git: Download Action Logs": {
"main": [
[
{
"node": "Unzip Logs",
"type": "main",
"index": 0
}
]
]
},
"Git: Pull Request Reviews": {
"main": [
[
{
"node": "Code: Is Approved",
"type": "main",
"index": 0
}
]
]
},
"Git: Get PR Description File": {
"main": [
[
{
"node": "Jira: Send Comment",
"type": "main",
"index": 0
}
]
]
},
"Jira: Get Assigned First Issue": {
"main": [
[
{
"node": "If: Has task",
"type": "main",
"index": 0
}
]
]
},
"Get Confluence Content From Jira": {
"main": [
[
{
"node": "Cursor: Launch New Agent",
"type": "main",
"index": 0
}
]
]
},
"Code: Get Issue Key From Branch Name": {
"main": [
[
{
"node": "If: On Build Success",
"type": "main",
"index": 0
}
]
]
}
}
}