Вправа – використання сценарію GitHub у діях GitHub
У цій одиниці ви дізнаєтеся більше про те, як використовувати сценарій GitHub для вдосконалення робочого циклу.
Додавання питань до дошки проекту
Крім використання octokit/rest.js для створення приміток і відкритих запитів на витягування, ви також можете використовувати octokit/rest.js для керування проектами GitHub. У наведеному нижче зразку коду ви створюєте робочий цикл, який запускається щоразу, коли хтось додає нову проблему до сховища. Ця проблема додається до дошки проекту, що спрощуватиме сприйняття роботи.
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"
});
Перший розділ цього робочого циклу створює примітку щоразу, коли створюється нова проблема, яка охоплюється в попередній одиниці. У наступному розділі створюється картка на основі цієї проблеми та додається до дошки проекту.
Розділення робочого циклу на кроки
Одна з переваг використання дій полягає в тому, що завдання можна розділити на менші одиниці роботи, які називаються кроками. У попередньому прикладі робочого циклу можна розділити робочий цикл на два кроки.
Одна з переваг розриву поточного робочого циклу на кілька кроків полягає в тому, що він дає змогу застосовувати логіку за допомогою виразів. За допомогою кроків можна створювати правила, коли дозволено виконувати кроки, а також оптимізувати запуск робочого циклу.
Щоб розділити приклад робочого циклу на кроки:
- Назвіть кожен крок таким чином, щоб його можна було відстежувати на вкладці Дії .
- Використовуйте вирази, щоб визначити, чи слід виконувати крок (необов'язково).
У цьому прикладі два завдання у вихідному файлі робочого циклу розділено на окремі кроки:
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"
});
Кожен крок містить описовий name елемент, який також допомагає відстежувати його на вкладці Дії .
Цей Add issue to project board крок також містить інструкцію if , яка вказує на те, що цю проблему слід додати до дошки проекту, лише якщо її позначено bug.
Використання середовища Node.js
Сценарій GitHub також надає вам доступ до повного середовища Node.js. Хоча ми не радимо використовувати сценарій GitHub для написання логіки складних дій, ви можете використовувати її, щоб додати більше функціональних можливостей до API octo/rest.js.
Наприклад, ви можете використовувати Node.js, щоб відображати посібник з внесків щоразу, коли відкривається проблема. За допомогою файлової системи Node.js можна прочитати файл і використовувати його як основний текст примітки про проблему. Щоб отримати доступ до файлів у сховищі, додайте дію actions/checkout як перший крок робочого циклу.
У наведеному нижче прикладі вносяться такі зміни до файлу робочого циклу:
-
action/checkoutДодавання дії для читання шаблонованого файлу відповіді, розташованого за адресою.github/ISSUE_RESPONSES/comment.md - Додавання JavaScript для використання модуля файлової системи Node.js для розміщення вмісту нашої шаблонної відповіді як основного тексту примітки про проблему
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 допоміг вам створити комплексну відповідь на нову проблему. Ця відповідь також базується на шаблоні в сховищі, тому її легко змінити. Нарешті, ви також включили тригер, щоб додати проблему до дошки проекту, щоб ви могли легко присоромити її для подальшої роботи.