How AppVeyor Helps Me to Validate Pull Requests Before Rultor Merges Them

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

AppVeyor - это отличный облачный сервис непрерывной интеграции, который собирает проекты для Windows. Rultor - это помощник DevOps, который автоматизирует операции по выпуску, слиянию и развертыванию с использованием контейнеров Docker. В этих сообщениях объясняется, как работает Rultor и для чего он предназначен: Rultor.com, Merging Bot и ветка Master должна быть только для чтения.

Проблема в том, что Rultor выполняет все скрипты в контейнерах Docker, а Docker не может собирать проекты для Windows. Единственное и наилучшее логическое решение - запускать AppVeyor перед выполнением всех остальных скриптов в Docker. Если AppVeyor дает зеленый свет, мы продолжаем со стандартным скриптом внутри Docker. В противном случае, сборка полностью завершается неудачей. Ниже я объясняю, как была настроена эта автоматизация в фреймворке Takes.

Сначала я получил токен из своего аккаунта AppVeyor (на момент написания он находился здесь). Я создал текстовый файл curl-appveyor.cfg с таким содержимым (это не мой настоящий токен, только пример):

Затем я зашифровал этот файл с помощью инструмента командной строки rultor.

Файл, который я создал, назывался curl-appveyor.cfg.asc. Я сделал коммит и отправил в репозиторий GitHub yegor256/takes.

Затем я настроил “pinging” AppVeyor из скрипта Docker. Вот что я сделал в .rultor.yml:

Здесь нет магии, всё очень просто. Сначала я запускаю новую сборку, используя конечную точку /api/builds REST API AppVeyor. ${pull_id} - это переменная окружения, которая приходит из Rultor и содержит целое число текущего запроса на слияние.

Я использую jq для парсинга вывода JSON AppVeyor.

После запуска сборки я получаю её уникальный version и начинаю циклически проверять её статус. Я жду success или failed. Всё остальное означает, что сборка всё ещё выполняется, и мне следует продолжать цикл.

Вы можете посмотреть, как это работает в этом запросе на слияние, например: yegor256/takes#93.

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-15 at 06:48

sixnines availability badge   GitHub stars