Долгожданная функция действий 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”