Ćwiczenie — korzystanie z akcji GitHub Script w funkcji GitHub Actions
W tej lekcji dowiesz się więcej na temat sposobu używania skryptu GitHub do ulepszania przepływu pracy.
Dodawanie problemów do tablicy projektu
Oprócz używania biblioteki octokit/rest.js do tworzenia komentarzy i otwierania żądań ściągnięcia można również użyć biblioteki octokit/rest.js do zarządzania projektami GitHub. W poniższym przykładzie kodu utworzysz przepływ pracy uruchamiany za każdym razem, gdy każda osoba doda nowy problem do repozytorium. Spowoduje to dodanie zadania do tablicy projektu, co ułatwia zarządzanie pracą.
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"
});
Pierwsza sekcja tego przepływu pracy tworzy komentarz za każdym razem, gdy zostanie utworzone nowe zgłoszenie, które zostało omówione w poprzedniej jednostce. W następnej sekcji zostanie utworzona karta oparta na tym problemie i doda ją do tablicy projektu.
Rozdziel przepływ pracy na kroki
Jedną z zalet korzystania z akcji jest możliwość oddzielenia zadań od mniejszych jednostek pracy nazywanych krokami. W poprzednim przykładowym przepływie pracy można podzielić przepływ pracy na dwa kroki.
Jedną z zalet podziału bieżącego przepływu pracy na wiele kroków jest umożliwienie używania wyrażeń do stosowania logiki. Wykonanie kroków umożliwia tworzenie reguł wokół tego, kiedy kroki mogą być uruchamiane i mogą pomóc w optymalizacji przebiegu przepływu pracy.
Aby oddzielić przykładowy przepływ pracy do kroków:
- Nazwij każdy krok, aby można było go śledzić na karcie Akcje .
- Użyj wyrażeń, aby określić, czy krok powinien zostać uruchomiony (opcjonalnie).
W tym przykładzie dwa zadania w oryginalnym pliku przepływu pracy są rozdzielone na poszczególne kroki:
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żdy krok zawiera opisowy name element, który pomaga również śledzić go na karcie Akcje .
Krok Add issue to project board zawiera również instrukcję określającą if , że problem powinien zostać dodany do tablicy projektu tylko wtedy, gdy ma on etykietę bug.
Korzystanie ze środowiska Node.js
Skrypt GitHub również zapewnia dostęp do pełnego środowiska Node.js. Mimo że nie zalecamy używania skryptu GitHub do pisania logiki dla złożonych akcji, można użyć jej do dodania większej liczby funkcji do interfejsu API octo/rest.js.
Możesz na przykład użyć Node.js, aby wyświetlić przewodnik współtworzenia po każdym otwarciu problemu. Możesz użyć systemu plików Node.js, aby odczytać plik i użyć go jako treści komentarza do zgłoszenia. Aby uzyskać dostęp do plików w repozytorium, dołącz actions/checkout akcję jako pierwszy krok w przepływie pracy.
Poniższy przykład wprowadza następujące zmiany w pliku przepływu pracy:
- Dodaje akcję
action/checkoutw celu odczytania szablonowego pliku odpowiedzi, który znajduje się pod adresem.github/ISSUE_RESPONSES/comment.md. - Dodaje kod JavaScript do użycia modułu systemu plików Node.js w celu umieszczenia zawartości naszej szablonowej odpowiedzi jako treści komentarza problemu
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 pomógł utworzyć kompleksową odpowiedź na nowy problem. Ta odpowiedź jest również oparta na szablonie w repozytorium, więc łatwo jest ją zmienić. Na koniec dołączono również wyzwalacz w celu dodania problemu do tablicy projektu, aby można było łatwo sklasyfikować go na potrzeby przyszłej pracy.