Перейти до вмісту
Статті

3x швидше: як я прискорив деплой Cloudflare Worker за допомогою кастомного воркфлоу GitHub Actions

Як я створив кастомний воркфлоу GitHub Actions, що скоротив час деплою Cloudflare Worker з 8 до 2,5 хвилини.

1 хв читання cloudflare workers github-actions ci-cd devops
Коментар бота GitHub Actions «Deployed to Cloudflare Workers» із таблицею: розмір бандла, час збірки, коміти, автор, превью-URL

Я створив власну інтеграцію GitHub Actions для деплою в Cloudflare Workers. У ній більше можливостей і кроків збірки — зокрема запуск лінтерів і тестів, — і вона зручніша. Я скоротив час збірки з 8 хвилин до якихось 2,5 — утричі швидше.

На один pull request пішло 55 спроб зібрати кастомний воркфлоу GitHub Actions, 26 із них упали. Але врешті я таки дотиснув.

Список із 55 запусків воркфлоу Deploy to Preview у GitHub Actions: майже всі успішні, один із помилкою

Завдання: побудувати воркфлоу для продакшн- і превью-збірок у Cloudflare Workers. Продакшн-збірка запускається лише пушем або мерджем pull request у захищену гілку main. У Cloudflare є готова інтеграція з GitHub.

Але вона вміє лише дві команди: build і deploy. І навіть попри це збірка триває 6–8 хвилин залежно від фреймворку. Вона також не дає зручного способу запускати лінтери й тести.

Сторінка Build details у Cloudflare: збірка завершилася помилкою за 7 хвилин 18 секунд, з них 5 хвилин 49 секунд — етап Building application

Що в їхній інтеграції справді класно — це привітні коментарі, які вона лишає в PR для превью-деплоїв.

Коментар бота Cloudflare в PR «Deploying with Cloudflare Workers» зі статусом Deployment failed

Якщо чогось не вистачає — зроби це сам. Що я, власне, і зробив. Тепер у мене є свій бот, який показує всю потрібну інформацію, причому в набагато охайнішому форматі, ніж бот від Cloudflare.

Коментар кастомного бота github-actions у PR #26: розмір бандла 14,1 МБ, тривалість збірки 2 хв 24 с, коміти, автор і превью-URL

Я також налаштував так, щоб превью-збірка запускалася для кожного коміту в pull request. Бот публікує окремий коментар для кожної збірки, тож можна переглядати окремі збірки для конкретних виправлень в межах одного PR.

Так можна порівнювати конкретні зміни в pull request, включно з розміром бандла — що особливо корисно для задач з оптимізації. Або просто побачити, наскільки більшим стає бандл після додавання нового NPM-пакета.

Бот Cloudflare просто оновлює свій попередній коментар, а мій щоразу пише новий. Тож коли я підписаний на pull request, мені на пошту приходять охайні структуровані сповіщення про кожну збірку.

Електронний лист від github-actions[bot] із таблицею результатів збірки: розмір бандла, тривалість, коміти, превью-URL

А знаєте, що найкраще? Весь цей воркфлоу — запуск лінтерів, тестів, генерація різних файлів wrangler.json, збірка застосунку і деплой у Workers — займає лише 2,5 хвилини проти 6–8 у Cloudflare. Тобто втричі швидше.

Besidka — це продукт, над яким я зараз працюю. Опенсорсний AI Chat, куди можна підключити власні API-ключі й платити тільки за те, що використовуєш. Поки що це MVP, але зроблено вже чимало.

Є продакшн-URL: https://www.besidka.com/

Репозиторій: https://github.com/besidka/besidka

Логотип Besidka: рожева хмаринка-бульбашка з очима на світло-рожевому тлі