Ćwiczenie — korzystanie z akcji GitHub Script w funkcji GitHub Actions
W tej lekcji dowiesz się więcej na temat sposobu używania skryptu usługi 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 problemu do tablicy projektu, co ułatwia klasyfikację pracy.
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 utworzony nowy problem, który omówiliśmy w poprzedniej lekcji. 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 możliwość 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ć wykonany (opcjonalnie).
W tym przykładzie dwa zadania w oryginalnym pliku przepływu pracy zostały 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
problem powinien zostać dodany tylko do tablicy projektu, jeśli ma ona etykietę bug
.
Korzystanie ze środowiska Node.js
Skrypt Usługi GitHub umożliwia również dostęp do pełnego środowiska Node.js. Chociaż skrypt usługi GitHub nie jest zalecany do pisania logiki dla złożonych akcji, możesz użyć go do dodania większej funkcjonalności do interfejsu API octo/rest.js.
Przykładem może być użycie Node.js w celu wyświetlenia przewodnika dotyczącego współtworzenia przy każdym otwarciu problemu. Możesz użyć systemu plików Node.js, aby odczytać plik i użyć go jako treści komentarza problemu. 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:
action/checkout
Dodaje akcję w celu odczytania pliku odpowiedzi szablonu znajdującego się w lokalizacji.github/ISSUE_COMMENT/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"
});
Skrypt Usługi GitHub pomógł utworzyć kompleksową odpowiedź na otwarty nowy problem. Ta odpowiedź jest również oparta na szablonie w repozytorium, więc można łatwo zmienić ją w przyszłości. 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.