Oefening: GitHub Script gebruiken in GitHub Actions
In deze les leert u meer over hoe u GitHub Script kunt gebruiken om uw werkstroom te verbeteren.
Problemen toevoegen aan een projectbord
Naast het gebruik van octokit/rest.js om opmerkingen te maken en pull-aanvragen te openen, kunt u ook octokit/rest.js gebruiken om GitHub Projects te beheren. In het volgende codevoorbeeld maakt u een werkstroom die wordt uitgevoerd wanneer iemand een nieuw probleem toevoegt aan de opslagplaats. Hiermee voegt u het probleem toe aan een projectbord, waardoor u gemakkelijker uw werk kunt classificeren.
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"
});
In de eerste sectie van deze werkstroom wordt een opmerking gemaakt wanneer er een nieuw probleem wordt gemaakt, dat wordt behandeld in de vorige les. In de volgende sectie wordt een kaart gemaakt op basis van dit probleem en wordt deze toegevoegd aan het projectbord.
Werkstroom in stappen scheiden
Een voordeel van het gebruik van acties is dat u taken kunt scheiden in kleinere werkeenheden die stappen worden genoemd. In de voorgaande voorbeeldwerkstroom kunt u de werkstroom in twee stappen scheiden.
Een voordeel van het verbreken van de huidige werkstroom in meerdere stappen is dat u hiermee expressies kunt gebruiken om logica toe te passen. Met behulp van stappen kunt u regels maken wanneer stappen mogen worden uitgevoerd en kunt u helpen uw werkstroomuitvoering te optimaliseren.
Ga als volgt te werk om de voorbeeldwerkstroom te scheiden in stappen:
- Geef elke stap een naam zodat u deze kunt bijhouden op het tabblad Acties .
- Gebruik expressies om te bepalen of een stap moet worden uitgevoerd (optioneel).
In dit voorbeeld worden de twee taken in het oorspronkelijke werkstroombestand onderverdeeld in afzonderlijke stappen:
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"
});
Elke stap bevat een beschrijvend name element waarmee u het kunt bijhouden vanaf het tabblad Acties .
De Add issue to project board stap bevat ook een if instructie die aangeeft dat de kwestie alleen aan het projectbord moet worden toegevoegd als het het label bug heeft.
De Node.js-omgeving gebruiken
GitHub Script biedt u ook toegang tot een volledige Node.js-omgeving. Hoewel we het gebruik van GitHub Script niet aanbevelen om de logica voor complexe acties te schrijven, kunt u deze gebruiken om meer functionaliteit toe te voegen aan de octo/rest.js-API.
U kunt bijvoorbeeld Node.js gebruiken om een bijdragehandleiding weer te geven wanneer een probleem wordt geopend. U kunt het Node.js bestandssysteem gebruiken om een bestand te lezen en te gebruiken als hoofdtekst van de opmerking bij het probleem. Als u toegang wilt krijgen tot bestanden in de opslagplaats, neemt u de actions/checkout actie op als de eerste stap in de werkstroom.
In het volgende voorbeeld worden de volgende wijzigingen aangebracht in het werkstroombestand:
- Hiermee voegt u de
action/checkoutactie toe om het sjabloonantwoordbestand te lezen dat zich bevindt op.github/ISSUE_RESPONSES/comment.md - Voegt JavaScript toe om de module Node.js Bestandssysteem te gebruiken om de inhoud van het sjabloonantwoord te plaatsen als de hoofdtekst van de opmerking bij het probleem
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 heeft u geholpen bij het maken van een uitgebreid antwoord op een nieuw probleem. Dit antwoord is ook gebaseerd op een sjabloon in de opslagplaats, dus het is eenvoudig te wijzigen. Ten slotte hebt u ook een trigger opgenomen om het probleem toe te voegen aan het projectbord, zodat u het eenvoudig kunt classificeren voor toekomstig werk.