Übung: Verwenden von GitHub Script in GitHub Actions
In dieser Lektion erfahren Sie mehr darüber, wie Sie 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 jeder dem Repository ein neues Problem hinzufügt. Dies fügt das Problem zu einem Projekt board hinzu, was es Ihnen erleichtert, Ihre Arbeit zu triagen.
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"
});
Der erste Abschnitt dieses Workflows erstellt einen Kommentar, wenn ein neues Problem erstellt wird, das in der vorherigen Einheit behandelt wird. 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 darin, dass Sie Aufträge in kleinere Arbeitseinheiten unterteilen können, die als Schritte bezeichnet werden. Den vorherigen Beispielworkflow können Sie in zwei Schritte unterteilen.
Ein Vorteil des Aufteilens des aktuellen Workflows in mehrere Schritte besteht darin, dass Sie Ausdrücke zum Anwenden von Logik verwenden 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 "Aktionen" nachverfolgen können.
- Verwenden Sie Ausdrücke, um zu bestimmen, ob ein Schritt ausgeführt werden soll (optional).
In diesem Beispiel werden die beiden Aufgaben in der ursprünglichen Workflowdatei in einzelne Schritte unterteilt:
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 enthält ein beschreibendes name Element, mit dem Sie es auch über die Registerkarte "Aktionen " nachverfolgen können.
Der Add issue to project board Schritt enthält auch eine if Anweisung, die angibt, dass das Problem nur dann dem Projekt board hinzugefügt werden soll, wenn es mit der Bezeichnung versehen bugist.
Nutzen der Node.js-Umgebung
GitHub Script gewährt Ihnen auch Zugriff auf eine vollständige Node.js Umgebung. Obwohl wir nicht empfehlen, GitHub Script zum Schreiben der Logik für komplexe Aktionen zu verwenden, können Sie sie verwenden, um der octo/rest.js-API weitere Funktionen hinzuzufügen.
Sie können beispielsweise Node.js verwenden, um bei jedem Öffnen eines Problems einen Beitragsleitfaden anzuzeigen. Sie können das Node.js Dateisystem verwenden, um eine Datei zu lesen und als Textkörper des Problemkommentars zu verwenden. Um auf Dateien im Repository zuzugreifen, schließen Sie die actions/checkout-Aktion als ersten Schritt in den Workflow ein.
Im folgenden Beispiel werden die folgenden Änderungen an der Workflowdatei vorgenommen:
- Fügt die
action/checkoutAktion zum Lesen der vorlagenbasierten Antwortdatei hinzu, die sich in.github/ISSUE_RESPONSES/comment.md - 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"
});
GitHub Script hat Ihnen geholfen, eine umfassende Antwort auf ein neues Problem zu erstellen. Diese Antwort basiert auch auf einer Vorlage im Repository, sodass es einfach zu ändern ist. 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.