Два дня назад я узнал о хакатоне на Github и задумал совершить какую-нибудь полезную акцию. Но перед этим я решил сделать что-нибудь веселое и узнать об основах действия на Github. Поэтому я создал экшн-PR-гифки по мотивам экшн-котов. action-pr-gifs будет публиковать gif в качестве комментария в PR в зависимости от типа PR. Проверьте мои действия и получайте удовольствие!
Давайте сделаем простое действие GitHub, чтобы опубликовать комментарий в PR!
Вы можете создать действие двумя способами
- Действие контейнера Docker
- Действие Javascript
Докер-контейнер
Этот тип действия идеально подходит, если вы хотите выполнять свои действия с определенной операционной системой, средами и т. д. Обратите внимание, что они медленнее по сравнению с действием javascript, поскольку оно должно извлекать контейнер.
Действие Javascript
Действия JavaScript могут выполняться непосредственно на исполняющей машине. Это намного проще и быстрее, и я буду использовать действие javascript в этом уроке.
Вместо того, чтобы создавать репозиторий узлов с нуля, я рекомендую использовать шаблон, предоставленный командой GitHub. В нем есть почти все, чтобы начать свое первое действие на GitHub. Но если вы хотите начать все с нуля, как я, вы всегда можете это сделать.
Прежде чем писать какой-либо фактический код, убедитесь, что eslint настроен для вашего проекта. Это гарантирует, что вы используете один и тот же стиль кодирования во всем проекте.
action.yml
Добавьте файл action.yml в корневую папку и добавьте следующую строку.
name: 'Action name'
description: 'A sample description'
inputs:
github-token:
description: 'Pass in secrets.GITHUB_TOKEN'
required: true
runs:
using: 'node12'
main: 'dist/index.js'
Вы заметили, что я добавил dist/index.js
в качестве основного? Я вернусь к этому позже.
Действительный код
Добавьте новую функцию run
в index.js или src/index.js
по своему усмотрению. Это простая функция для публикации комментария You are awesome
к каждому пулл-реквесту. Обратите внимание, что это должно быть вызвано только событием PR. Поэтому, если она срабатывает для любого другого события, функция должна выдать ошибку.
const core = require('@actions/core');
const github = require('@actions/github');
async function run() {
try {
const githubToken = core.getInput('GITHUB_TOKEN');
const { context } = github;
if (context.payload.pull_request == null) {
core.setFailed('No pull request found.');
}
const pullRequestNumber = context.payload.pull_request.number;
const octokit = new github.GitHub(githubToken);
const message = 'Wow! you are awesome';
octokit.issues.createComment({
...context.repo,
issue_number: pullRequestNumber,
body: message,
});
} catch (error) {
core.setFailed(error.message);
}
}
run();
Создать
GitHub загружает каждое действие, выполняемое в рабочем процессе во время выполнения, и выполняет его как полный пакет кода. Итак, вам нужно node_modules
для запуска вашего кода. Если вы добавили его в .gitignore
, удалите его. В качестве альтернативы вы можете использовать zeit/ncc
для создания исходного кода, чтобы вам не нужен был node modules
.
Установите ncc с помощью следующей команды
Создайте свой источник, используя
ncc build index.js (or) ncc build src/index.js
Это создаст ваши исходные файлы в папке dist
. Это будет ваш основной файл, и не забывайте создавать и фиксировать этот файл каждый раз, когда вы вносите изменения в исходный файл.
Тестирование
В этом действии особо нечего тестировать. Но всегда рекомендуется писать тесты для вашего действия на GitHub. Вы можете проверить мой репозиторий для некоторых примеров.
Вот и все, вы написали свой первый экшен на Github. Пришло время проверить это
Добавление действий в репозитории
Прежде чем размещать действие на торговой площадке, вы можете один раз протестировать его в том же репозитории. Создайте файл .github/workflows/main.yml
с такой же структурой и добавьте следующую строку.
name: PR
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
pull_request:
branches: [ master ]
jobs:
pr_check:
runs-on: ubuntu-latest
name: A job to Post comment on PR
steps:
- uses: actions/checkout@v2
- name: PR Action
uses: koushikmohan1996/action-pr-gifs@master
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
В зависимости от ваших действий вы должны заменить koushikmohan1996/action-pr-gifs@master
на username/reponame@master
. Здесь я использовал branches: [master]
, поэтому действие будет запускаться только в том случае, если PR создан для основной ветки. Вы можете удалить это, если хотите во всех ветках.
После того, как вы все протестировали, вы можете добавить это действие в Marketplace, создав релиз. Обратите внимание, что для публикации в Marketplace вам потребуется файл readme и файл лицензии.
Проверьте этот образец пр action-pr-gifs. Оставьте комментарий, если вы создали какой-нибудь классный экшен на Github или встретите его.
Подписание!
Первоначально опубликовано на https://dev.to 13 марта 2020 г.