Skip to main content

Automatisation de Dependabot avec GitHub Actions

Exemples d’utilisation de GitHub Actions pour automatiser les tâches courantes liées à Dependabot.

Qui peut utiliser cette fonctionnalité ?

Utilisateurs avec accès en écriture

Vous pouvez utiliser GitHub Actions pour effectuer des tâches automatisées lorsque Dependabot crée des pull requests afin de mettre à jour des dépendances. Vous trouverez peut-être cette option utile si vous souhaitez :

  • Assurez-vous que les demandes de tirage Dependabot (mises à jour de version et mises à jour de sécurité) sont créées avec les bonnes données pour vos processus de travail, y compris les étiquettes et les noms.

  • Déclencher des flux de travail pour envoyer des demandes de tirage (mises à jour de version et mises à jour de sécurité) Dependabot dans votre processus de révision ou pour fusionner automatiquement.

Remarque

Votre administrateur de site doit configurer les Dependabot updates pour votre instance GitHub Enterprise Server afin que vous puissiez utiliser cette fonctionnalité. Pour plus d’informations, consultez Activation de Dependabot pour votre entreprise.

Il se peut que vous ne puissiez pas activer ou désactiver Dependabot updates si le propriétaire de l'entreprise a défini une politique au niveau de l'entreprise. Pour plus d’informations, consultez « Application de stratégies de sécurité et d’analyse du code pour votre entreprise ».

À propos de Dependabot et de GitHub Actions

Important

Si Dependabot est activé pour un dépôt, il s’exécutera toujours sur GitHub Actions, en contournant à la fois les vérifications de stratégie Actions et la désactivation au niveau du dépôt ou de l’organisation. Cela garantit que les workflows de mises à jour de sécurité et de versions s’exécutent toujours lorsque Dependabot est activé.

Dependabot crée des pull requests pour maintenir vos dépendances à jour. Vous pouvez utiliser GitHub Actions pour effectuer des tâches automatisées lorsque ces pull requests sont créées. Par exemple, récupérer des artefacts supplémentaires, ajouter des étiquettes, exécuter des tests ou modifier la pull request d’une autre manière.

Dependabot est en mesure de déclencher des workflows GitHub Actions sur ses demandes de tirage requêtes et commentaires ; toutefois, certains événements sont traités différemment. Pour plus d’informations, consultez Résolution des problèmes de Dependabot sur GitHub Actions.

Voici plusieurs scénarios courants de pull requests pouvant être automatisés à l’aide de GitHub Actions.

Récupération des métadonnées d’une pull request

La plupart des automatisations nécessitent de connaître des informations sur le contenu de la pull request : quel est le nom de la dépendance, s’il s’agit d’une dépendance de production, et si la mise à jour est majeure, mineure ou corrective. Vous pouvez utiliser une action pour récupérer des informations sur les dépendances mises à jour par une pull request générée par Dependabot.

Exemple :

YAML
# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# documentation en ligne.
name: Dependabot fetch metadata
on: pull_request

permissions:
  pull-requests: write
  issues: write

jobs:
  dependabot:
    runs-on: ubuntu-latest
    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
    steps:
      - name: Dependabot metadata
        id: metadata
        uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
        with:
          github-token: "${{ secrets.GITHUB_TOKEN }}"
      # The following properties are now available:
      #  - steps.metadata.outputs.dependency-names
      #  - steps.metadata.outputs.dependency-type
      #  - steps.metadata.outputs.update-type

Pour plus d’informations, consultez le dépôt dependabot/fetch-metadata.

Ajout d’étiquettes à une pull request

Si vous disposez d’autres automatisations ou de workflows de tri basés sur les étiquettes GitHub, vous pouvez configurer une action pour attribuer des étiquettes en fonction des métadonnées fournies.

Exemple qui marque toutes les mises à jour de dépendances de production avec une étiquette :

YAML
# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# documentation en ligne.
name: Dependabot auto-label
on: pull_request

permissions:
  pull-requests: write
  issues: write

jobs:
  dependabot:
    runs-on: ubuntu-latest
    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
    steps:
      - name: Dependabot metadata
        id: metadata
        uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
        with:
          github-token: "${{ secrets.GITHUB_TOKEN }}"
      - name: Add a label for all production dependencies
        if: steps.metadata.outputs.dependency-type == 'direct:production'
        run: gh pr edit "$PR_URL" --add-label "production"
        env:
          PR_URL: ${{github.event.pull_request.html_url}}

Approbation automatique d’une pull request

Vous pouvez approuver automatiquement les pull requests Dependabot en utilisant GitHub CLI dans un workflow.

Exemple :

YAML
# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# documentation en ligne.
name: Dependabot auto-approve
on: pull_request

permissions:
  pull-requests: write

jobs:
  dependabot:
    runs-on: ubuntu-latest
    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
    steps:
      - name: Dependabot metadata
        id: metadata
        uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
        with:
          github-token: "${{ secrets.GITHUB_TOKEN }}"
      - name: Approve a PR
        run: gh pr review --approve "$PR_URL"
        env:
          PR_URL: ${{github.event.pull_request.html_url}}
          GH_TOKEN: ${{secrets.GITHUB_TOKEN}}

Activation de l’automerge sur une pull request

Si vous souhaitez permettre aux mainteneurs de marquer certaines pull requests pour un automerge, vous pouvez utiliser la fonctionnalité d’automerge de GitHub. Cela permet à la demande de tirage d’être fusionnée une fois que les tests et approbations requis par les règles de protection de branche sont réussis.

Pour plus d’informations, consultez « Fusion automatique d'une demande de tirage » et « Gestion d’une règle de protection de branche ».

Vous pouvez plutôt utiliser GitHub Actions et l’GitHub CLI. Voici un exemple qui effectue un automerge de toutes les mises à jour correctives vers my-dependency :

YAML
# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# documentation en ligne.
name: Dependabot auto-merge
on: pull_request

permissions:
  contents: write
  pull-requests: write

jobs:
  dependabot:
    runs-on: ubuntu-latest
    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
    steps:
      - name: Dependabot metadata
        id: metadata
        uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
        with:
          github-token: "${{ secrets.GITHUB_TOKEN }}"
      - name: Enable auto-merge for Dependabot PRs
        if: contains(steps.metadata.outputs.dependency-names, 'my-dependency') && steps.metadata.outputs.update-type == 'version-update:semver-patch'
        run: gh pr merge --auto --merge "$PR_URL"
        env:
          PR_URL: ${{github.event.pull_request.html_url}}
          GH_TOKEN: ${{secrets.GITHUB_TOKEN}}

Remarque

Si vous utilisez des vérifications d’état pour tester les demandes de tirage, vous devez activer Exiger la réussite des vérifications d’état avant de fusionner pour la branche cible des demandes de tirage Dependabot. Cette règle de protection de branche garantit que les demandes de tirage ne sont pas fusionnées tant que toutes les vérifications d’état requises ne sont pas réussies. Pour plus d’informations, consultez « Gestion d’une règle de protection de branche ».

Politiques Dependabot et GitHub Actions

Normalement, la possibilité d’exécuter un workflow dans un dépôt dépend des vérifications de stratégie de GitHub Actions et du fait que GitHub Actions soit activé au niveau de l’organisation ou du dépôt. Ces contrôles peuvent empêcher l’exécution de workflows, en particulier lorsque les actions externes sont bloquées ou que GitHub Actions est entièrement désactivé.

Cependant, lorsque Dependabot est activé pour un dépôt, ses workflows s’exécutent toujours sur GitHub Actions, en contournant à la fois les vérifications de stratégie Actions et la désactivation.

  • Les workflows Dependabot ne sont pas bloqués par la désactivation d’Actions ni par les restrictions de stratégie au niveau de l’entreprise.
  • Les actions référencées au sein de ces workflows sont également autorisées à s’exécuter, même si les actions externes sont interdites.

Analyse des échecs d’exécution de workflows

Si votre exécution de workflow échoue, vérifiez les éléments suivants :

  • Vous exécutez le workflow uniquement quand l’acteur approprié le déclenche.
  • Vous extrayez la ref correcte pour votre pull_request.
  • Vos secrets sont disponibles dans des secrets Dependabot plutôt qu’en tant que secrets GitHub Actions.
  • Vous disposez d’un GITHUB_TOKEN avec les autorisations appropriées.

Pour plus d’informations sur l’écriture et le débogage de GitHub Actions, consultez Écriture de workflows.

Pour plus de conseils afin de résoudre les problèmes liés aux workflows, consultez Résolution des problèmes de Dependabot sur GitHub Actions.