Übung: Verwenden von GitHub Script in GitHub Actions

Abgeschlossen

In dieser Lerneinheit erfahren Sie mehr darüber, wie Sie das GitHub-Skript verwenden können, um Ihren Workflow zu verbessern.

Hinzufügen von Issues zu einem Projektboard

Zusätzlich zur Verwendung von „octokit/rest.js“ zum Erstellen von Kommentaren und Öffnen von Pull Requests können Sie „octokit/rest.js“ auch für die Verwaltung von GitHub-Projekten nutzen. Im folgenden Codebeispiel erstellen Sie einen Workflow, der ausgeführt wird, wenn dem Repository ein neues Issue hinzugefügt wird. Dadurch wird das Issue einem Projektboard hinzufügt, was Ihnen das Selektieren Ihrer Arbeit erleichtert.

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"
            });

Im ersten Abschnitt dieses Workflows wird immer dann ein Kommentar erstellt, wenn ein neues Issue erstellt wird, wie in der vorherigen Lerneinheit erläutert. Im nächsten Abschnitt wird basierend auf diesem Issue eine Karte erstellt und dem Projektboard hinzufügt.

Aufteilen des Workflows in Schritte

Ein Vorteil der Verwendung von Aktionen besteht in der Aufteilung von Aufträgen in kleinere Arbeitseinheiten, die als Schritte bezeichnet werden. Den vorherigen Beispielworkflow können Sie in zwei Schritte unterteilen.

Ein Vorteil beim Aufteilen des aktuellen Workflows in mehrere Schritte besteht darin, Ausdrücke zum Anwenden von Logik verwenden zu können. Mithilfe von Schritten können Sie Regeln für deren Ausführung erstellen und die Workflowausführung optimieren.

Gehen Sie wie folgt vor, um den Beispielworkflow in Schritte aufzuteilen:

  • Benennen Sie jeden Schritt, damit Sie ihn über die Registerkarte „Actions“ nachverfolgen können.
  • Verwenden Sie Ausdrücke, um zu bestimmen, ob ein Schritt ausgeführt werden soll (optional).

In diesem Beispiel wurden die beiden Aufgaben in der ursprünglichen Workflowdatei in einzelne Schritte aufgeteilt.

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"
            });

Jeder Schritt umfasst ein beschreibendes name-Element, mit dem Sie ihn auch über die Actions-Registerkarte nachverfolgen können.

Der Schritt Add issue to project board enthält auch eine if-Anweisung, die angibt, dass das Issue dem Projektboard nur dann hinzugefügt werden soll, wenn es mit bug gekennzeichnet ist.

Nutzen der Node.js-Umgebung

Das GitHub-Skript gewährt Ihnen auch Zugriff auf eine vollständige Node.js-Umgebung. Obwohl GitHub Script nicht zum Schreiben der Logik für komplexe Aktionen empfohlen wird, können Sie es verwenden, um der octo/rest.js-API zusätzliche Funktionen hinzuzufügen.

Ein Beispiel wäre die Verwendung von Node.js zum Anzeigen eines Beitragsleitfadens, wenn ein Issue geöffnet wird. Sie können das Node.js-Dateisystem verwenden, um eine Datei zu lesen und als Text des Issuekommentars zu verwenden. Um auf Dateien im Repository zuzugreifen, schließen Sie die actions/checkout-Aktion als ersten Schritt in den Workflow ein.

In diesem Beispiel werden die folgenden Änderungen an der Workflowdatei vorgenommen:

  • Die action/checkout-Aktion wird hinzugefügt, um die Vorlagenantwortdatei unter .github/ISSUE_COMMENT/comment.md zu lesen.
  • JavaScript wird hinzugefügt, um mit dem Node.js-Dateisystemmodul den Inhalt der Vorlagenantwort als Text des Issuekommentars zu platzieren.
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"
            });

Mit GitHub Script können Sie eine umfassende Antwort auf ein neues Issue erstellen, das geöffnet wird. Diese Antwort basiert auch auf einer Vorlage im Repository, sodass sie in Zukunft einfach geändert werden kann. Schließlich haben Sie auch einen Trigger hinzugefügt, um das Issue dem Projektboard hinzuzufügen, damit es für zukünftige Arbeiten einfach ausgewählt werden kann.