Рубрики
Без рубрики

Строить действие моего GitHub, чтобы доставить собачники до PRS

Потому что кто не хочет хороших мальчиков, когда они нажимают? Помечено с собаками, Showdev, Teadercript, JavaScript.

Долгожданная функция действий 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: `![Doggo](${doggo})`
    });
  } 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”