Долгожданная функция действий GitHub, наконец, выходит из бета и готова присутствовать в каждом репозиториях. Github даже организован Хакатон через марш, чтобы поощрять людей создать более удивительные и полезные действия. Просматриваясь через представления, я нашел Классное действие GitHub что публикуют CAT GIFS на запросах на потяну. Кричать на Рубрид С его прохладным Идея 👏👏👏.
Это будет только справедливости к собакам, если есть действие, которое доставляет им хороших мальчиков на наших PR. В тот момент, когда я точно знал, что будет моим следующим проектом действий GitHub. Пора на работу.
Гист создания действия GitHub
Действия GitHub В основном предскадные (с ❤️) единицы работы будут использоваться рабочие процессы GitHub (думайте Трэвис сборки). Действия GitHub можно построить с помощью Дочсерские контейнеры или JS/TS Scripts Отказ Преимущество для создания действия GitHub с JS/TS легко доступны модули из Github Toolkit Отказ С такой интеграцией Поддержка, намного проще подключиться с услугами GitHub (C’mon 🙄 Кто хочу написать Curl Команды, чтобы сделать вызовы API). Очевидно, чтобы пойти с Шаблон действий TeampScript Отказ
С этим принятым решением давайте приступим к написанию Действия собаки .
Основной файл запуска
В действии Github JS/TS рабочая нагрузка будет запущена с главной точки входа (думаю, работает Узел SRC/index.js Чтобы запустить процесс узла для веб-приложений и т. Д.). Для действий собаки это моя основная установка для основной программы
import * as core from "@actions/core";
import * as github from "@actions/github";
import { generate } from "./doggo/generator";
(async function run(): Promise {
try {
const ctx = github.context;
if (!ctx.payload.pull_request) {
throw new Error("Not in the context of a PR!");
}
const ghCli = new github.GitHub(core.getInput("github-token"));
const doggo = generate();
ghCli.issues.createComment({
...ctx.repo,
issue_number: ctx.payload.pull_request.number,
body: ``
});
} catch (e) {
core.setFailed(e.message);
}
})();
Во время события, которое может вызвать рабочие процессы GitHub, нам снабжены контекстным объектом, которым можно получить доступ через @ Действия/Github модуль. Используя это, я могу проверить, появится ли моя полезная нагрузка от pull_request и отклонить в противном случае. В ближайшее время мне нужно опубликовать комментарий к соответствующему запросу на тягу с содержанием Gobgo GIF. Учитывая, что мой генератор Doggo (из которых я объясню в следующем разделе), работает правильно, я могу получить URL-адрес Gobgo GIF, создавая Комментарий к запросам по вытягиванию является Super Simple, так как мне просто нужно пройти в информацию о нашем объекте Context и номер PR. Также, если мы получим какие-либо ошибки во время этих операций, призывая Core.SetFailed (E.Message) Отмечит сборку как не удалось с сообщением об ошибке.
Генератор Doggo
После многих исследований с намерением использовать одну из публичных API для получения случайных Gifs Poggo, я не мог найти ни одного общего (например Dog.Ceo ), а также служит GIFS (например Giphy ). Поскольку у меня нет проспекта для меня надежно хранить свой ключ GIPHY API надежно использовать в боевиках, я вернулся к доброжелачению массива статического JSON.
Хотите знать, как я получил свой массив, полный удивительности Doggo (из ❤️ GiPhy ❤️) без какого-либо ключа API, созданный в процессе? На самом деле я пошел на сайт GIPHY, искал собачью, и прокрутить вниз до хорошего количества «Giffy-Boys», прежде чем вытащить мою консоль
И С этими несколькими линиями JS
const dogsData = [];
document
.querySelectorAll("a._2SwDiFPqIlZmUDkxHNOeqU")
.forEach(e => dogsData.push(e.href));
var dataStr =
"data:text/json;charset=utf-8," +
encodeURIComponent(JSON.stringify(dogsData));
var dlAnchorElem = document.createElement("a");
dlAnchorElem.setAttribute("href", dataStr);
dlAnchorElem.setAttribute("download", "dogs.json");
dlAnchorElem.click();
который в основном хватает href Значения из всех элементов «COPY LINK» на странице результатов поиска, покройте их на массив JSON и заполните файл для меня, чтобы «Скачать», «Generating» просто выбирает случайное URL из массива.
import dogs from "./dogs.json";
export function generate(): string {
return dogs[Math.floor(Math.random() * dogs.length)];
}
Тестирование
Я написал тест подразделения для моего генератора Doggo, используя Jest (но на самом деле в основном как проспект для забавных описаний).
import { generate } from "../../src/doggo/generator";
describe("doggo generator", () => {
test("to return a good boy", () => {
Math.random = jest.fn().mockReturnValue(0);
const good = "https://media3.giphy.com/media/mCRJDo24UvJMA/giphy.gif";
const boy = generate();
expect(boy).toBe(good);
});
});
Но настоящий тест – рабочий процесс, использующий Действия собаки Сама (да, вы можете использовать действие Github на своем репо 🤯).
name: "doggo"
on: pull_request
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: stanleynguyen/action-dogs@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
Теперь я вижу Действия собаки в действии с образец PR Отказ Ура 🙌🙌. 🙌 !! Теперь я могу безопасно Опубликовать его на Github Marketplace Отказ
Внедорожный
Так что это моя история создания Действия собаки для веселья и обучения. Вы можете найти исходный код прямо на Github (Ну, потому что, где еще может быть 🤷 ♂️) и Действия собаки на Рынок Отказ
Оригинал: “https://dev.to/stanleynguyen/building-my-github-action-to-deliver-doggoes-to-prs-34gi”