À propos de Dependabot et de GitHub Actions
Dependabot crée des demandes de tirage (pull request) pour maintenir vos dépendances à jour et vous pouvez utiliser GitHub Actions pour effectuer des tâches automatisées quand ces demandes de tirage sont créées. Par exemple, extraire des artefacts supplémentaires, ajouter des étiquettes, exécuter des tests ou modifier la demande de tirage.
Réponse aux événements
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 les workflows lancés par Dependabot (github.actor == 'dependabot[bot]'
) en utilisant les événements pull_request
, pull_request_review
, pull_request_review_comment
, push
, create
, deployment
et deployment_status
, les restrictions suivantes s’appliquent :
GITHUB_TOKEN
dispose d’autorisations en lecture seule par défaut.- Les secrets sont remplis à partir des secrets Dependabot. Les secrets GitHub Actions ne sont pas disponibles.
Pour les workflows lancés par Dependabot (github.actor == 'dependabot[bot]'
) en utilisant l’événement pull_request_target
, si la référence de base de la demande de tirage a été créée par Dependabot (github.actor == 'dependabot[bot]'
), le GITHUB_TOKEN
est en lecture seule et les secrets ne sont pas disponibles.
Pour plus d’informations, consultez « Maintien de la sécurité de votre instance GitHub Actions et vos workflows : Prévention des demandes pwn ».
Réexécution manuelle d’un workflow
Vous pouvez également réexécuter manuellement un workflow Dependabot ayant échoué ; il s’exécute alors avec un jeton de lecture-écriture et un accès en lecture-écriture aux secrets. Avant de réexécuter manuellement un workflow ayant échoué, vous devez toujours vérifier la dépendance mise à jour pour vous assurer que la modification n’introduit aucun comportement malveillant ou inattendu.
Automatisations Dependabot courantes
Voici plusieurs scénarios courants qui peuvent être automatisés avec GitHub Actions.
Extraire des métadonnées sur une demande de tirage
Pour une automatisation de grande envergure, il est nécessaire de connaître certaines informations sur le contenu de la demande de tirage : le nom de la dépendance, s’il s’agit ou non d’une dépendance de production et s’il s’agit d’une mise à jour principale, mineure ou corrective.
L’action dependabot/fetch-metadata
fournit toutes ces informations pour vous :
name: Dependabot fetch metadata
on: pull_request
permissions:
pull-requests: write
issues: write
repository-projects: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v1
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
.
Étiqueter une demande de tirage
Si vous avez d’autres workflows d’automatisation ou de triage basés sur des étiquettes GitHub, vous pouvez configurer une action pour affecter des étiquettes en fonction des métadonnées fournies.
Par exemple, si vous souhaitez marquer toutes les mises à jour de dépendance de production avec une étiquette :
name: Dependabot auto-label
on: pull_request
permissions:
pull-requests: write
issues: write
repository-projects: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v1
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}}
Approuver une demande de tirage
Si vous souhaitez approuver automatiquement les demandes de tirage Dependabot, vous pouvez utiliser l’GitHub CLI dans un workflow :
name: Dependabot auto-approve
on: pull_request
permissions:
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v1
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}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
Activer la fusion automatique sur une demande de tirage
Si vous souhaitez autoriser les responsables de la maintenance à marquer certaines demandes de tirage pour la fusion automatique, vous pouvez utiliser la fonctionnalité de fusion automatique 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 ».
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 ».
Vous pouvez plutôt utiliser GitHub Actions et l’GitHub CLI. Voici un exemple qui fusionne automatiquement toutes les mises à jour correctives dans my-dependency
:
name: Dependabot auto-merge
on: pull_request
permissions:
contents: write
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v1
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}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
Résolution des problèmes liés aux exécutions de workflow ayant échoué
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 votrepull_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 « Découvrir GitHub Actions ».