Générateur de notes de version

Intermédiaire

Ceci est unDevOps, AI Summarizationworkflow d'automatisation du domainecontenant 10 nœuds.Utilise principalement des nœuds comme Code, Jira, Merge, EmailSend, GithubTrigger. Génération et envoi par e-mail de notes de publication professionnelles en utilisant GitHub, JIRA et Google Gemini

Prérequis
  • Personal Access Token GitHub
  • Clé API Google Gemini
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "Your_ID",
  "meta": {
    "instanceId": "Your_ID",
    "templateCredsSetupCompleted": true
  },
  "name": "Release-note-generator",
  "tags": [],
  "nodes": [
    {
      "id": "Your_ID",
      "name": "Github Trigger",
      "type": "n8n-nodes-base.githubTrigger",
      "position": [
        -440,
        -80
      ],
      "webhookId": "Your_ID",
      "parameters": {
        "owner": {
          "__rl": true,
          "mode": "name"
        },
        "events": [
          "push"
        ],
        "options": {
          "insecureSSL": false
        },
        "repository": {
          "__rl": true,
          "mode": "list",
          "cachedResultUrl": "Your_Github_URL",
          "cachedResultName": "Your_Repository_Name"
        }
      },
      "credentials": {
        "githubApi": {
          "id": "Your_ID",
          "name": "GitHub account"
        }
      },
      "notesInFlow": false,
      "typeVersion": 1
    },
    {
      "id": "Your_ID",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        -220,
        -80
      ],
      "parameters": {
        "jsCode": "const inputData = $input.all();\nconst commits = inputData[0].json.body.commits;\n\nreturn commits.map(commit => {\n  const message = commit.message;\n  const timestamp = commit.timestamp;\n\n  // Match something like \"ABC-123\", case-insensitive, from the beginning\n  const match = message.match(/([A-Z]+-\\d+)/i);\n\n  const jiraId = match ? match[0].toUpperCase() : null;\n\n  return {\n    json: {\n      message,\n      timestamp,\n      jira_id: jiraId\n    }\n  };\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "Your_ID",
      "name": "Basic LLM Chaîne",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        480,
        -160
      ],
      "parameters": {
        "text": "=",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "type": "HumanMessagePromptTemplate",
              "message": "=You are a professional technical release manager generating production release notes for CxOs and clients.\n\nGenerate a complete release note in **HTML format**, not plain text. The content is based on the following JIRA items, each having `jira_id`, `jira_summary`, `jira_description`, and `message`.\n\nOutput structure (as HTML):\n\n1. Title and Metadata\n   - H2 tag: \"Production Deployment – [Release Date]\"\n   - Bold lines: Version, Environment, Deployment Date\n\n2. Overview\n   - Short paragraph explaining the goal of this deployment\n\n3. Key Changes\n   - Bullet list (<ul>) with one <li> per JIRA item\n   - For each bullet: Summarize `jira_description` + `message` into a business-friendly sentence\n\nRules:\n- Output as clean HTML only\n- Do not wrap in a JSON object or Markdown\n- Use simple inline styles for readability\n\nHere is the input data:\n{{ JSON.stringify($json.items, null, 2) }}\n"
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "Your_ID",
      "name": "Modèle de chat Google Gemini",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        480,
        40
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.5-pro"
      },
      "credentials": {
        "googlePalmApi": {
          "id": "Your_ID",
          "name": "Google Gemini(PaLM) Api account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "Your_ID",
      "name": "Send email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        860,
        -160
      ],
      "webhookId": "Your_ID",
      "parameters": {
        "html": "={{ $json.output.releasenote }}",
        "options": {},
        "subject": "Your_company_name | Location, Country \nYou’re receiving this email because you are subscribed to release notifications.",
        "toEmail": "Your_receiver_email",
        "fromEmail": "Your_sender_email"
      },
      "credentials": {
        "smtp": {
          "id": "Your_ID",
          "name": "SMTP account"
        }
      },
      "typeVersion": 2.1,
      "alwaysOutputData": false
    },
    {
      "id": "Your_ID",
      "name": "Get an issue",
      "type": "n8n-nodes-base.jira",
      "position": [
        -20,
        -320
      ],
      "parameters": {
        "issueKey": "={{ $json.jira_id }}",
        "operation": "get",
        "additionalFields": {}
      },
      "credentials": {
        "jiraSoftwareCloudApi": {
          "id": "Your_ID",
          "name": "Jira SW Cloud account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "Your_ID",
      "name": "Code2",
      "type": "n8n-nodes-base.code",
      "position": [
        140,
        -320
      ],
      "parameters": {
        "jsCode": "// Get all incoming items from the JIRA node.\nconst allItems = $input.all();\n\n// Use .map() to loop through each item and transform it.\nreturn allItems.map(item => {\n  // The full JIRA issue data for the current item in the loop\n  const issue = item.json;\n\n  // Extract the specific fields you need for this issue.\n  // Use optional chaining (?.) to prevent errors if a field is missing.\n  const jiraId = issue.key; // The JIRA ID (e.g., \"MS-6\")\n  const summary = issue.fields?.summary;\n  const description = issue.fields?.description;\n\n  // Return a new, clean object for this specific issue.\n  return {\n    json: {\n      jira_id: jiraId, // Added as requested\n      jira_summary: summary,\n      jira_description: description\n    }\n  };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "Your_ID",
      "name": "Fusionner",
      "type": "n8n-nodes-base.merge",
      "position": [
        60,
        20
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3.2
    },
    {
      "id": "Your_ID",
      "name": "Code3",
      "type": "n8n-nodes-base.code",
      "position": [
        260,
        20
      ],
      "parameters": {
        "jsCode": "// This will take all input items from previous loop and combine into one array\nreturn [{\n  json: {\n    items: items.map(i => i.json)\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "Your_ID",
      "name": "Structured Output Parser1",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        640,
        40
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"releasenote\": {\n\t\t\t\"type\": \"string\"\n\t\t}\n\t}\n}"
      },
      "typeVersion": 1.3
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "errorWorkflow": "Your_ID",
    "executionOrder": "v1",
    "saveManualExecutions": true,
    "saveExecutionProgress": true,
    "timeSavedPerExecution": 1,
    "saveDataErrorExecution": "all",
    "saveDataSuccessExecution": "all"
  },
  "versionId": "Your_ID",
  "connections": {
    "Your_ID": {
      "ai_outputParser": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Your_ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Basic LLM Chain": {
      "main": [
        [
          {
            "node": "Your_ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Intermédiaire - DevOps, Résumé IA

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Workflows recommandés

En direct - Automatisation de la création et de la publication de vidéos virales AI avec Gemini et Creatomate
Utiliser Gemini et Creatomate pour automatiser la création de vidéos IA et leur publication multiplateforme
Set
Code
Wait
+
Set
Code
Wait
47 NœudsIntuz
Création de contenu
Génération automatisée de prospects IA LinkedIn pour les emplois avec Apify, Apollo.io et Google Gemini
Automatisation de la génération de prospects d'offres d'emploi LinkedIn : Apify, Apollo.io et Google Gemini
If
Code
Limit
+
If
Code
Limit
47 NœudsIntuz
Génération de leads
Renseignements sur la cybersécurité : résumé quotidien et tendances populaires générés avec Gemini AI
Renseignements en cybersécurité : créer un résumé quotidien et des sujets tendance avec l'IA Gemini
Set
Code
Merge
+
Set
Code
Merge
39 NœudsTom
Résumé IA
Automatisation du développement commercial avec les signaux des postes LinkedIn, Apify, Apollo.io et Google Gemini
Basé sur les signaux d'offres LinkedIn, utiliser Apify et Google Gemini pour générer des prospections de vente personnalisées
If
Code
Limit
+
If
Code
Limit
47 NœudsIntuz
Mon workflow 19
Automatisation des mises à jour GitHub PR et JIRA via des commandes de validation Git
If
Code
Jira
+
If
Code
Jira
21 NœudsIntuz
DevOps
01 Analyser la performance des publicités Facebook avec un acheteur d'espace médias IA et envoyer les informations dans Google Sheets
Analyser les publicités Facebook et envoyer les insights dans Google Sheets avec Gemini AI
If
Set
Code
+
If
Set
Code
34 NœudsJJ Tham
Étude de marché
Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds10
Catégorie2
Types de nœuds8
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Auteur
Intuz

Intuz

@intuz

A boutique tech consulting company, helping businesses with custom AI/ML, Workflow Automations, and software development.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34