← Усі статті

Як оновлювати сайт відкритих даних без серверів: GitHub Actions, Pages і гілки замість CDN

Архітектура Village Finder: GitHub Pages, Actions і окремі гілки доставляють оновлювані відкриті дані без сервера та бази даних.

Як оновлювати сайт відкритих даних без серверів: GitHub Actions, Pages і гілки замість CDN
Зміст

Коротко

Описаний автором проєкт показує карти й відомості про понад 50 тисяч індійських сіл, щодня оновлює географічні набори та публікує ринкові ціни. Водночас у проєкту немає власного серверного застосунку, сервера бази даних і щомісячних витрат на базову інфраструктуру.

Замість звичного сервісу тут працюють засоби GitHub, релізи та спеціальні гілки з даними. Головна думка особливо корисна для публічних наборів: не кожна зміна потребує нового розгортання сайту, а не всі дані варто вести через перевірку запитів на злиття.

Що сталося

Автор розділив вхідні дані на два потоки. Адміністративні реєстри та межі сіл, що змінюються повільно, потрапляють у звичайний запит на злиття: понад 90 тестів перевіряють їхню структуру, а журнал змін пояснює, які записи перемістилися або змінили категорію. Історія комітів перетворюється на відкритий слід змін у державних даних.

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

Це не дає основному репозиторію розростатися через машинні оновлення. Водночас файл з публічної гілки доступний через raw.githubusercontent.com, а браузер може отримати його напряму з дозволеним міждоменним доступом.

Чому це важливо

Статичний сайт часто означає, що кожна зміна даних вимагає повного збирання й публікації. У цій схемі інтерфейс, опублікований через GitHub, відокремлено від мінливих наборів: сторінка запитує поточний JSON з гілки даних, тому відвідувач бачить свіжі ринкові ціни без нового випуску клієнтської частини.

Це не універсальна заміна серверу. GitHub має обмеження на розмір, частоту та спосіб зберігання файлів. Для гігабайтних кадастрових карт автор залишив окреме об'єктне сховище: йому потрібні недорога роздача та HTTP-запити діапазону, необхідні геопросторовим форматам.

Окремі гілки також роблять відповідальність зрозумілою. Нормативні дані проходять перевірку й обговорення, а похідні знімки можуть оновлюватися автоматично. Ця межа важливіша за сам прийом із гілками: інакше в репозиторії швидко змішуються початкові факти, тимчасові результати та код застосунку.

На практиці

Якщо дані справді можна зібрати наново з відкритого джерела, таку архітектуру варто починати з поділу типів даних, а не з налаштування чергової автоматизації.

  1. Залиште для рідкісних і важливих змін запити на злиття, перевірки структури та зрозумілий журнал змін.
  2. Публікуйте часті відтворювані файли в ізольованій гілці; збирайте її в тимчасовому каталозі, щоб не змішувати з основною історією.
  3. Запитуйте невеликі JSON-файли безпосередньо з публічної гілки, але перевірте обмеження GitHub і правила доступу до даних.
  4. Для великих файлів оберіть сховище з підтримкою HTTP-запитів діапазону або додавайте знімок гілки до каталогу збирання сайту.
  5. У завданнях за розкладом відокремлюйте тимчасову недоступність зовнішнього API від помилки коду. Автор завершує таке завдання кодом EX_TEMPFAIL (75), зберігає вчорашній знімок і пише коротке повідомлення замість хибної тривоги.

Є й неочевидні деталі: git diff --quiet не помічає невідстежувані файли під час першого завантаження, а правила зіставлення шляхів відрізняються від шаблонів оболонки. Ці випадки краще покрити окремою перевіркою git status --porcelain і випробуваннями на порожньому репозиторії.

Підсумок

Цей проєкт — вдалий приклад того, як засоби GitHub можна використовувати не лише для початкового коду. Публікація доставляє інтерфейс, автоматизація збирає дані, релізи зберігають версійні вивантаження, а гілки дають простий канал для файлів, які часто замінюють.

Підхід пасує відкритим каталогам, статистиці, картам та іншим наборам, де допустимі опубліковані знімки й не потрібен власний сервер для обробки запитів. Його цінність не в обіцянці «нульової ціни», а в чіткому поділі перевірених записів і швидко замінюваних машинних результатів.