Cvičení – používání GitHub Scriptu v GitHub Actions
V této lekci se dozvíte více o tom, jak můžete pomocí GitHub Scriptu vylepšit pracovní postup.
Přidání problémů na panel projektu
Kromě použití octokit/rest.js k vytváření komentářů a otevírání žádostí o přijetí změn můžete ke správě projektů GitHub použít také octokit/rest.js. V následující ukázce kódu vytvoříte pracovní postup, který se spustí pokaždé, když někdo přidá do úložiště nový problém. Tím se úkol přidá do projektového panelu, což usnadňuje prioritizování úkolů.
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"
});
První část tohoto pracovního postupu vytvoří komentář při každém vytvoření nového problému, který je popsaný v předchozí lekci. V další části se vytvoří karta založená na tomto problému a přidá ji do panelu projektu.
Rozdělení pracovního postupu do kroků
Jednou z výhod použití akcí je, že úlohy můžete rozdělit do menších jednotek práce označovaných jako kroky. V předchozím ukázkovém pracovním postupu můžete pracovní postup oddělit do dvou kroků.
Jednou z výhod rozdělení aktuálního pracovního postupu do několika kroků je, že umožňuje použít logiku pomocí výrazů. Pomocí kroků můžete vytvořit pravidla, pokud jsou kroky povolené ke spuštění a můžou vám pomoct optimalizovat spuštění pracovního postupu.
Postup oddělení ukázkového pracovního postupu do kroků:
- Pojmenujte každý krok, abyste ho mohli sledovat na kartě Akce .
- Pomocí výrazů určete, jestli se má krok spustit (volitelné).
V tomto příkladu jsou dva úkoly v původním souboru pracovního postupu oddělené do jednotlivých kroků:
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"
});
Každý krok obsahuje popisný name prvek, který také usnadňuje jeho sledování na kartě Akce.
Tento Add issue to project board krok také obsahuje if příkaz, který určuje, že problém má být přidán do tabule projektu pouze pokud je označen bug.
Použití Node.js prostředí
GitHub Script vám také uděluje přístup k úplnému Node.js prostředí. I když nedoporučujeme používat GitHub Script k zápisu logiky pro složité akce, můžete ho použít k přidání dalších funkcí do octo/rest.js API.
Můžete například použít Node.js k zobrazení průvodce příspěvkem při každém otevření problému. Systém souborů Node.js můžete použít ke čtení souboru a jeho použití jako textu komentáře k problému. Pokud chcete získat přístup k souborům v úložišti, zahrňte actions/checkout akci jako první krok pracovního postupu.
Následující příklad provede následující změny souboru pracovního postupu:
- Přidá akci
action/checkoutpro čtení souboru s odpovědí podle šablony, který se nachází na.github/ISSUE_RESPONSES/comment.md. - Přidá JavaScript pro použití modulu systému souborů Node.js k umístění obsahu odpovědi šablony jako textu komentáře k problému.
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 vám pomohl vytvořit komplexní odpověď na nový problém. Tato odpověď je také založená na šabloně v úložišti, takže je snadné ji změnit. Nakonec jste také zahrnuli trigger pro přidání problému do panelu projektu, abyste ho mohli snadno určit pro budoucí práci.