{
  "nodes": [
    {
      "id": "74922542-1a88-41fd-83ca-9ff2b1599b50",
      "name": "Sticky \u2022 Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -272,
        16
      ],
      "parameters": {
        "color": 3,
        "width": 520,
        "height": 872,
        "content": "## Overview\n**Purpose:** Auto-check your n8n version and deploy an update via Coolify if a newer release is available.\n\n**Pipeline:** Manual/Schedule \u2192 HTTP n8n settings \u2192 HTTP GitHub latest \u2192 Merge (SQL) \u2192 Set (normalize) \u2192 IF compare \u2192 Deploy or No-Op.\n\n**Before running:**\n- Replace the n8n URL in the *N8N Settings* node.\n- Replace the Coolify API URL (domain + UUID) and add a valid Bearer YOUR_TOKEN_HERE credential in *Deploy* node.\n- Adjust the schedule interval if needed."
      },
      "typeVersion": 1
    },
    {
      "id": "34b0fe1d-6b44-4847-a4fe-16a23730cdd0",
      "name": "Sticky \u2022 Manual Trigger",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        256,
        304
      ],
      "parameters": {
        "color": "blue",
        "width": 384,
        "height": 220,
        "content": "## Manual Trigger\nClick **Execute workflow** to run tests immediately.\nNo configuration required."
      },
      "typeVersion": 1
    },
    {
      "id": "c2f1cd58-bf94-4be0-a938-5b758c966798",
      "name": "Sticky \u2022 Schedule",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        256,
        16
      ],
      "parameters": {
        "color": "blue",
        "width": 376,
        "height": 272,
        "content": "## Schedule Trigger\nRuns the check on a timer.\n- Open **Rule \u2192 Interval** and set how often to run (e.g., every 6h).\n- Keep both HTTP nodes connected so data reaches the Merge."
      },
      "typeVersion": 1
    },
    {
      "id": "00114438-dacd-43a4-b344-ea20ec8fab78",
      "name": "Sticky \u2022 N8N Settings",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        656,
        0
      ],
      "parameters": {
        "color": 5,
        "width": 468,
        "height": 344,
        "content": "## N8N Settings (HTTP Request)\nFetch your instance settings.\n- **Set URL:** `https://<your-n8n-domain>/rest/settings`\n- Output must include `data.versionCli`.\n- No auth needed for default public settings; add auth only if your instance requires it."
      },
      "typeVersion": 1
    },
    {
      "id": "165a79fe-1a72-4308-9595-8b253ac213f5",
      "name": "Sticky \u2022 GitHub Latest",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        608,
        560
      ],
      "parameters": {
        "color": 5,
        "width": 516,
        "height": 324,
        "content": "## GitHub Latest (HTTP Request)\nGets latest n8n release.\n- **URL:** `https://api.github.com/repos/n8n-io/n8n/releases/latest`\n- Field used later: **`name`** (e.g., `n8n@1.60.0`).\n- Keep method GET and no auth."
      },
      "typeVersion": 1
    },
    {
      "id": "29a1e319-7c3f-4442-8563-9ae0dc6dd2f3",
      "name": "Sticky \u2022 Merge SQL",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1136,
        32
      ],
      "parameters": {
        "color": "orange",
        "width": 328,
        "height": 528,
        "content": "## Merge (SQL)\nReduces inputs to 2 fields.\nUse this query:\n```sql\nSELECT input1.data->versionCli AS versionCli,\n       input2.name             AS name\nFROM input1\nLEFT JOIN input2 ON 1=1;\n```\n- Requires exactly 1 item per input.\n- Output keys: `versionCli`, `name`."
      },
      "typeVersion": 1
    },
    {
      "id": "80a0247d-df92-416a-8737-2d7319af0cef",
      "name": "Sticky \u2022 Set",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1520,
        144
      ],
      "parameters": {
        "color": "orange",
        "width": 356,
        "height": 420,
        "content": "## Set (Normalize)\nCreate clean variables for comparison:\n- `actualn8nversion = $json.versionCli`\n- `newn8nversion = $json.name.split('@')[1]`\nBoth as **string**."
      },
      "typeVersion": 1
    },
    {
      "id": "7f5d83a6-5510-414f-9ccb-c3e31bd4b748",
      "name": "Sticky \u2022 IF",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1888,
        144
      ],
      "parameters": {
        "color": "red",
        "width": 420,
        "height": 420,
        "content": "## IF (Compare)\nCondition: `actualn8nversion !== newn8nversion`.\n- True \u2192 deploy update.\n- False \u2192 do nothing.\nKeep **caseSensitive** and **strict type** enabled."
      },
      "typeVersion": 1
    },
    {
      "id": "86697e08-a3a2-49ee-af28-8540e7f9983e",
      "name": "Sticky \u2022 Deploy",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2384,
        112
      ],
      "parameters": {
        "color": "purple",
        "width": 460,
        "height": 348,
        "content": "## Deploy (HTTP Request)\nTriggers Coolify deploy.\n- **URL:** `https://<your-coolify-domain>/api/v1/services/<APP_UUID>/restart?latest=true`\n- **Auth:** *HTTP Bearer* credential with a valid API token.\n- Optional: set timeout/retries in **Options**.\nReplace domain and UUID."
      },
      "typeVersion": 1
    },
    {
      "id": "f8ae7d2b-4458-4686-b7e5-7737c5d7b95a",
      "name": "Schedule every time you want start the update check",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        496,
        160
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "cb7eadb0-7fa3-479c-9fd4-4ef804844999",
      "name": "No Operation, do nothing",
      "type": "n8n-nodes-base.noOp",
      "position": [
        2448,
        496
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "3217fe2c-eae5-4499-9008-33d4cd7b0f09",
      "name": "If the 2 versions is not the same make an update of image",
      "type": "n8n-nodes-base.if",
      "position": [
        2064,
        368
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "c8ee8d9d-1227-4738-a315-478475601721",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.actualn8nversion }}",
              "rightValue": "={{ $json.newn8nversion }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "81a3cf57-6269-4237-8671-0a1e5f46c15d",
      "name": "CALL COOLIFY OR SIMILAR SERVICE FOR UPDATE IMAGE",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2448,
        288
      ],
      "parameters": {
        "url": "https://app.coolify.io/api/v1/services/your-services-uuid/restart?latest=true",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "3675b8ea-b9d3-4383-9422-d4335f7bc5f4",
      "name": "Rename variable and unify format",
      "type": "n8n-nodes-base.set",
      "position": [
        1680,
        368
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a7787c92-705f-445f-8eee-a36c3555203c",
              "name": "actualn8nversion",
              "type": "string",
              "value": "={{ $json.versionCli }}"
            },
            {
              "id": "7e6dc6fa-44be-4e52-bf5c-1ebf4262f18a",
              "name": "newn8nversion",
              "type": "string",
              "value": "={{ $json.name.split(\"@\")[1] }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "16bd29a3-b38a-42ec-97e7-533e145eae65",
      "name": "Merge bot data and pass just what we need",
      "type": "n8n-nodes-base.merge",
      "position": [
        1200,
        368
      ],
      "parameters": {
        "mode": "combineBySql",
        "query": "SELECT\n  input1.data->versionCli AS versionCli,\n  input2.name AS name\nFROM input1\nLEFT JOIN input2 ON 1=1;",
        "options": {
          "emptyQueryResult": "success"
        }
      },
      "typeVersion": 3.2
    },
    {
      "id": "50112ebc-7fda-4cb9-94a1-4d7cd924e657",
      "name": "When clicking \u2018Execute workflow",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        496,
        384
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "6d60b6eb-9827-4d46-b4ee-27aedefc7801",
      "name": "CALL YOUR N8N INSTANCE and retrieve the version",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        976,
        176
      ],
      "parameters": {
        "url": "https://yourn8ndomain/rest/settings",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "59b20003-8247-43e1-aa68-7435055aa6e9",
      "name": "CALL GITHUB and retrieve the last n8n image stable version",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        960,
        704
      ],
      "parameters": {
        "url": "https://api.github.com/repos/n8n-io/n8n/releases/latest",
        "options": {}
      },
      "typeVersion": 4.2
    }
  ],
  "connections": {
    "Rename variable and unify format": {
      "main": [
        [
          {
            "node": "If the 2 versions is not the same make an update of image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow": {
      "main": [
        [
          {
            "node": "CALL GITHUB and retrieve the last n8n image stable version",
            "type": "main",
            "index": 0
          },
          {
            "node": "CALL YOUR N8N INSTANCE and retrieve the version",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge bot data and pass just what we need": {
      "main": [
        [
          {
            "node": "Rename variable and unify format",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CALL YOUR N8N INSTANCE and retrieve the version": {
      "main": [
        [
          {
            "node": "Merge bot data and pass just what we need",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule every time you want start the update check": {
      "main": [
        [
          {
            "node": "CALL YOUR N8N INSTANCE and retrieve the version",
            "type": "main",
            "index": 0
          },
          {
            "node": "CALL GITHUB and retrieve the last n8n image stable version",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If the 2 versions is not the same make an update of image": {
      "main": [
        [
          {
            "node": "CALL COOLIFY OR SIMILAR SERVICE FOR UPDATE IMAGE",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CALL GITHUB and retrieve the last n8n image stable version": {
      "main": [
        [
          {
            "node": "Merge bot data and pass just what we need",
            "type": "main",
            "index": 1
          }
        ]
      ]
    }
  }
}