Я створив власну інтеграцію GitHub Actions для деплою в Cloudflare Workers. У ній більше можливостей і кроків збірки — зокрема запуск лінтерів і тестів, — і вона зручніша. Я скоротив час збірки з 8 хвилин до якихось 2,5 — утричі швидше.
На один pull request пішло 55 спроб зібрати кастомний воркфлоу GitHub Actions, 26 із них упали. Але врешті я таки дотиснув.
Завдання: побудувати воркфлоу для продакшн- і превью-збірок у Cloudflare Workers. Продакшн-збірка запускається лише пушем або мерджем pull request у захищену гілку main. У Cloudflare є готова інтеграція з GitHub.
Але вона вміє лише дві команди: build і deploy. І навіть попри це збірка триває 6–8 хвилин залежно від фреймворку. Вона також не дає зручного способу запускати лінтери й тести.
Що в їхній інтеграції справді класно — це привітні коментарі, які вона лишає в PR для превью-деплоїв.
Якщо чогось не вистачає — зроби це сам. Що я, власне, і зробив. Тепер у мене є свій бот, який показує всю потрібну інформацію, причому в набагато охайнішому форматі, ніж бот від Cloudflare.
Я також налаштував так, щоб превью-збірка запускалася для кожного коміту в pull request. Бот публікує окремий коментар для кожної збірки, тож можна переглядати окремі збірки для конкретних виправлень в межах одного PR.
Так можна порівнювати конкретні зміни в pull request, включно з розміром бандла — що особливо корисно для задач з оптимізації. Або просто побачити, наскільки більшим стає бандл після додавання нового NPM-пакета.
Бот Cloudflare просто оновлює свій попередній коментар, а мій щоразу пише новий. Тож коли я підписаний на pull request, мені на пошту приходять охайні структуровані сповіщення про кожну збірку.
А знаєте, що найкраще? Весь цей воркфлоу — запуск лінтерів, тестів, генерація різних файлів wrangler.json, збірка застосунку і деплой у Workers — займає лише 2,5 хвилини проти 6–8 у Cloudflare. Тобто втричі швидше.
Besidka — це продукт, над яким я зараз працюю. Опенсорсний AI Chat, куди можна підключити власні API-ключі й платити тільки за те, що використовуєш. Поки що це MVP, але зроблено вже чимало.
Є продакшн-URL: https://www.besidka.com/
Репозиторій: https://github.com/besidka/besidka