{ "name": "Genome: ingest MANUALE (scratch)", "nodes": [ { "parameters": {}, "type": "n8n-nodes-base.manualTrigger", "typeVersion": 1, "position": [ 0, 0 ], "id": "2101e704-6275-419d-9963-29a142e5811c", "name": "Esegui manualmente" }, { "parameters": { "authentication": "privateKey", "command": "ssh vm101 'pi ingest genome-test raw/articles/il-grano-saraceno.md'" }, "type": "n8n-nodes-base.ssh", "typeVersion": 1, "position": [ 224, 0 ], "id": "8ade2def-2d53-4860-88a5-2ca734c6e54a", "name": "SSH: pi ingest (manuale)", "credentials": { "sshPrivateKey": { "id": "GJQjKzte7Hjdfz89", "name": "n8n container -> n8n-runner@nexus" } } }, { "parameters": { "mode": "runOnceForEachItem", "jsCode": "// ultima riga JSON di run-ingest.sh (ha 'run_id=' davanti)\nconst out = ($json.stdout || '').trim();\nconst line = out.split('\\n').filter(l => l.trim().startsWith('{')).pop();\nif (!line) return { status: 'error', reason: 'nessuna riga JSON run-ingest', raw: out };\ntry { return JSON.parse(line); } catch (e) { return { status: 'error', reason: 'JSON non parsabile', raw: line }; }" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 448, 0 ], "id": "d84cdeaf-612a-454c-8b4d-31824ae6d71e", "name": "Parse ingest" }, { "parameters": { "mode": "runOnceForEachItem", "jsCode": "const d=$json;let n;\nif (d.status==='ok'){\n n={title:`Ingest ${d.slug}: PR aperta`,priority:'default',tags:'inbox_tray',\n body:`\\u2705 ${d.slug}: PR aperta (lint ${d.lint_clean?'clean':'KO'}${d.conflict?', CONFLITTO':''})\\n\\n\\ud83d\\udd17 ${d.pr_url}`};\n} else if (d.status==='pr_failed'){\n n={title:`Ingest ${d.slug}: PR FALLITA`,priority:'high',tags:'warning',\n body:`\\u26a0\\ufe0f ${d.slug}: semantic/lint ok ma PR non aperta.\\n\\n${(d.detail||'').split('\\n')[0]}`};\n} else {\n n={title:'Ingest: ERRORE',priority:'high',tags:'rotating_light',\n body:`\\u274c ${d.reason||'errore'}\\n\\n${(d.raw||'').slice(0,300)}`};\n}\nreturn n;" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 672, 0 ], "id": "eadd9275-b38c-416b-b15e-0999f70a05fb", "name": "Build ntfy" }, { "parameters": { "method": "POST", "url": "http://ntfy/homelab-genome", "authentication": "genericCredentialType", "genericAuthType": "httpBearerAuth", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "Title", "value": "={{ $json.title }}" }, { "name": "Priority", "value": "={{ $json.priority }}" }, { "name": "Tags", "value": "={{ $json.tags }}" } ] }, "sendBody": true, "contentType": "raw", "rawContentType": "Raw / Text", "body": "={{ $json.body }}", "options": {} }, "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.4, "position": [ 880, 0 ], "id": "63ab577b-893a-4b3d-8f13-b377be778099", "name": "ntfy: send notification", "credentials": { "httpHeaderAuth": { "id": "TBPXSWOF63k9mvm8", "name": "ntfy-token" }, "httpBearerAuth": { "id": "nCv4CUN7Ef086Ewj", "name": "Bearer Auth account" } } } ], "pinData": {}, "connections": { "Esegui manualmente": { "main": [ [ { "node": "SSH: pi ingest (manuale)", "type": "main", "index": 0 } ] ] }, "SSH: pi ingest (manuale)": { "main": [ [ { "node": "Parse ingest", "type": "main", "index": 0 } ] ] }, "Parse ingest": { "main": [ [ { "node": "Build ntfy", "type": "main", "index": 0 } ] ] }, "Build ntfy": { "main": [ [ { "node": "ntfy: send notification", "type": "main", "index": 0 } ] ] } }, "active": false, "settings": { "executionOrder": "v1", "binaryMode": "separate" }, "versionId": "df06ce3b-1ea8-43be-91ff-02c77972cfe2", "meta": { "instanceId": "96b2f0ec76a4400bbd481c617b24b3b87024cc7a913efacccaf9fc85722e7417" }, "id": "RNoSaRLYG9vcMn6M", "tags": [] }