Exercice - Utilisation de GitHub Script dans GitHub Actions
Dans cette unité, vous allez en savoir plus sur la façon dont vous pouvez utiliser GitHub Script pour améliorer votre flux de travail.
Ajouter des problèmes à un tableau de projet
En plus d’utiliser octokit/rest.js pour créer des commentaires et ouvrir des demandes de tirage (pull request), vous pouvez utiliser octokit/rest.js pour gérer des projets GitHub. Dans l’exemple de code suivant, vous créez un flux de travail qui s’exécute chaque fois que tout le monde ajoute un nouveau problème au référentiel. Cela ajoute le problème à un tableau de projet, ce qui vous permet de trier plus facilement votre travail.
name: Learning GitHub Script
on:
issues:
types: [opened]
jobs:
comment:
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
script: |
github.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: "🎉 You've created this issue comment using GitHub Script!!!"
})
github.projects.createCard({
column_id: {{columnID}},
content_id: context.payload.issue.id,
content_type: "Issue"
});
La première section de ce flux de travail crée un commentaire chaque fois qu’un nouveau problème est créé, qui est abordé dans l’unité précédente. La section suivante crée une carte basée sur ce problème et l’ajoute au tableau de projet.
Séparer le workflow en étapes
L’un des avantages de l’utilisation d’actions est que vous pouvez séparer des travaux en unités de travail plus petites appelées étapes. Dans l’exemple de workflow précédent, vous pouvez le séparer en deux étapes.
L’un des avantages de diviser le flux de travail actuel en plusieurs étapes est qu’il vous permet d’utiliser des expressions pour appliquer la logique. Les étapes vous autorisent à créer des règles précisant quand les étapes sont autorisées à s’exécuter et vous aident à optimiser l’exécution de votre workflow.
Pour séparer l’exemple de workflow en étapes :
- Nommez chaque étape pour pouvoir le suivre à partir de l’onglet Actions .
- Utilisez des expressions pour déterminer si une étape doit s’exécuter (facultatif).
Dans cet exemple, les deux tâches du fichier de flux de travail d’origine sont séparées en étapes individuelles :
name: Learning GitHub Script
on:
issues:
types: [opened]
jobs:
comment:
runs-on: ubuntu-latest
steps:
- name: Comment on new issue
uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
script: |
github.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: "🎉 You've created this issue comment using GitHub Script!!!"
})
- name: Add issue to project board
if: contains(github.event.issue.labels.*.name, 'bug')
uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
script: |
github.projects.createCard({
column_id: {{columnID}},
content_id: context.payload.issue.id,
content_type: "Issue"
});
Chaque étape inclut un élément descriptif name
qui vous aide également à le suivre à partir de l’onglet Actions .
L’étape Add issue to project board
inclut également une if
instruction qui spécifie que le problème doit être ajouté au tableau de projet uniquement s’il est étiqueté bug
.
Utiliser l’environnement Node.js
GitHub Script vous permet également d’accéder à un environnement de Node.js complet. Même si nous vous déconseillons d’utiliser GitHub Script pour écrire la logique pour les actions complexes, vous pouvez l’utiliser pour ajouter d’autres fonctionnalités à l’API octo/rest.js.
Par exemple, vous pouvez utiliser Node.js pour afficher un guide de contribution chaque fois qu’un problème est ouvert. Vous pouvez utiliser le système de fichiers Node.js pour lire un fichier et l’utiliser comme corps du commentaire du problème. Pour accéder aux fichiers du dépôt, incluez l’action actions/checkout
comme première étape du workflow.
L’exemple suivant apporte les modifications suivantes au fichier de flux de travail :
- Ajoute l’action
action/checkout
pour lire le fichier de réponse basé sur un modèle situé à l’adresse.github/ISSUE_RESPONSES/comment.md
- Ajoute JavaScript pour utiliser le module Node.js File System afin de placer le contenu de notre réponse basée sur un modèle dans le corps du commentaire du problème
name: Learning GitHub Script
on:
issues:
types: [opened]
jobs:
comment:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v2
- name: Comment on new issue
uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
script: |
const fs = require('fs')
const issueBody = fs.readFileSync(".github/ISSUE_RESPONSES/comment.md", "utf8")
github.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: issueBody
})
- name: Add issue to project board
if: contains(github.event.issue.labels.*.name, 'bug')
uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
script: |
github.projects.createCard({
column_id: {{columnID}},
content_id: context.payload.issue.id,
content_type: "Issue"
});
GitHub Script vous a aidé à créer une réponse complète à un nouveau problème. Cette réponse est également basée sur un modèle dans le référentiel. Il est donc facile de changer. Enfin, vous avez également inclus un déclencheur pour ajouter le problème au tableau de projet afin de pouvoir facilement le trier pour les travaux futurs.