Exercice - Utilisation de GitHub Script dans GitHub Actions

Effectué

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.