Workflow n8n

Automatiser la création d'issues GitLab à partir des dernières versions sur GitHub avec n8n

Ce workflow a pour objectif d'automatiser la création d'issues sur GitLab en fonction des dernières versions publiées sur GitHub. Dans un contexte où le suivi des versions et la gestion des problèmes sont cruciaux pour les équipes de développement, ce workflow permet de gagner du temps et d'améliorer l'efficacité. Le processus commence par un déclencheur Cron qui active le workflow à intervalles réguliers. Ensuite, le noeud 'Get latest release' récupère les dernières versions d'un dépôt GitHub spécifié. Les informations obtenues sont ensuite analysées grâce au noeud 'No issue for release?', qui vérifie s'il existe déjà une issue correspondante sur GitLab. Si aucune issue n'est trouvée, le noeud 'Create issue' est utilisé pour créer une nouvelle issue sur GitLab avec les détails de la version, tels que le titre, le corps et les labels appropriés. Le noeud 'List issues' permet de lister les issues existantes pour s'assurer qu'il n'y a pas de doublons. Ce workflow offre une solution efficace pour maintenir la traçabilité des versions et des problèmes, réduisant ainsi le risque d'erreurs et de pertes de temps dans le processus de développement. Tags clés : automatisation, GitLab, GitHub.

Catégorie: Scheduled · Tags: automatisation, GitLab, GitHub, développement, workflow0

Vue d'ensemble du workflow n8n

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "nodes": [
    {
      "name": "Get latest release",
      "type": "n8n-nodes-base.github",
      "position": [
        540,
        340
      ],
      "parameters": {
        "limit": 1,
        "resource": "release",
        "operation": "getAll"
      },
      "typeVersion": 1
    },
    {
      "name": "Cron",
      "type": "n8n-nodes-base.cron",
      "position": [
        240,
        500
      ],
      "parameters": {
        "triggerTimes": {
          "item": [
            {
              "mode": "everyWeek"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        740,
        420
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "name": "No issue for release?",
      "type": "n8n-nodes-base.function",
      "position": [
        920,
        420
      ],
      "parameters": {
        "functionCode": "const _ = require('lodash')\n\n// differentiate merged inputs (didnt find a way to get both inputs into one function invocation)\nconst releases = _.filter(items, i => _.has(i, 'json.assets'))\nif (releases.length != 1) throw new Error(`Invalid release count: ${releases.length}`)\nconst release = releases[0]\nconst issues = _.without(items, release)\n//console.log({release,issues})\n\n// check if there's an issue for the release\nconst matchingIssue = _.find(issues, i => i.json.title.includes(release.json.tag_name))\n//console.log({release,issues,matchingIssue})\n\nif (matchingIssue)\n  return []\nelse\n  return [release]"
      },
      "executeOnce": false,
      "typeVersion": 1
    },
    {
      "name": "Create issue",
      "type": "n8n-nodes-base.gitlab",
      "position": [
        1100,
        420
      ],
      "parameters": {
        "body": "={{$json[\"url\"]}}\n\n{{$json[\"body\"]}}",
        "owner": "txlab",
        "title": "=Upstream release: {{$json[\"tag_name\"]}}",
        "labels": [],
        "repository": "docker-linkcheck",
        "assignee_ids": []
      },
      "typeVersion": 1
    },
    {
      "name": "List issues",
      "type": "n8n-nodes-base.gitlab",
      "position": [
        540,
        500
      ],
      "parameters": {
        "owner": "txlab",
        "resource": "repository",
        "repository": "docker-linkcheck",
        "getRepositoryIssuesFilters": {}
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Cron": {
      "main": [
        [
          {
            "node": "Get latest release",
            "type": "main",
            "index": 0
          },
          {
            "node": "List issues",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "No release for issue?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start": {
      "main": [
        [
          {
            "node": "Get latest release",
            "type": "main",
            "index": 0
          },
          {
            "node": "List issues",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "List issues": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Get latest release": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "No release for issue?": {
      "main": [
        [
          {
            "node": "Create issue",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Pour qui est ce workflow ?

Ce workflow s'adresse principalement aux équipes de développement logiciel et aux gestionnaires de projets qui utilisent GitHub et GitLab pour le suivi des versions et la gestion des problèmes. Il est particulièrement utile pour les entreprises de taille moyenne à grande qui cherchent à optimiser leur processus de développement et à réduire les tâches manuelles.

Problème résolu

Ce workflow résout le problème de la gestion manuelle des issues liées aux nouvelles versions publiées sur GitHub. En automatisant ce processus, il élimine les frustrations liées à la création d'issues en double et réduit le risque d'oubli de signaler des problèmes. Les utilisateurs peuvent ainsi se concentrer sur le développement plutôt que sur la gestion administrative, ce qui améliore la productivité et l'efficacité de l'équipe.

Étapes du workflow

Étape 1 : Le workflow est déclenché par un cron qui s'exécute à des intervalles définis. Étape 2 : Le noeud 'Get latest release' interroge GitHub pour obtenir les dernières versions d'un dépôt. Étape 3 : Les informations récupérées sont analysées par le noeud 'No issue for release?' pour vérifier l'existence d'une issue correspondante sur GitLab. Étape 4 : Si aucune issue n'est trouvée, le noeud 'Create issue' crée une nouvelle issue sur GitLab avec les détails appropriés. Étape 5 : Le noeud 'List issues' permet de s'assurer qu'il n'y a pas de doublons dans les issues existantes.

Guide de personnalisation du workflow n8n

Pour personnaliser ce workflow, vous devez modifier le noeud 'Get latest release' en spécifiant le dépôt GitHub dont vous souhaitez suivre les versions. Dans le noeud 'Create issue', vous pouvez adapter le corps et le titre de l'issue en fonction de vos besoins. Assurez-vous également de configurer correctement les paramètres d'authentification pour GitHub et GitLab. Vous pouvez également ajuster la fréquence du déclencheur Cron selon vos préférences. Enfin, si vous souhaitez intégrer d'autres outils, explorez les possibilités d'ajout de nouveaux noeuds pour enrichir le workflow.