Стендап Сьогодні
📢
Канал в Telegram @stendap_sogodni
🦣
@stendap_sogodni@shevtsov.me в Федиверсі
09.07.2025
GitHub API з GitHub Actions
Є у нас ситуація, де на GA треба обчислити diff
між двома комітами. Причому вони можуть бути на абсолютно різних гілках. Як це було зробити ефективно?
Зазвичай на GitHub Actions всі використовують actions/checkout, щоб витягнути зміст репозиторію. Втім, нормально ця дія витягує тільки останній коміт (тобто глибину 1.) Бо це рятує дорогоцінні секунди. Втім, з такою глибиною цей diff
ніяк не зробиш.
Можна витягнути й весь зміст — якщо передати в actions/checkout
параметр fetch-depth: 0
. Це задачу розвʼязує, але ціною… наразі 15 секунд очікувань. Чи можна зробити якось швидше?
Звісно. можна! Згадаймо, що в GitHub є API. А в ньому, зокрема, є й порівняння комітів. Ми користуємось цією можливістю кожен раз, як створюємо PR - але так само можна зробити й зі скрипту на CI.
Щодо доступу: в задачі GitHub Actions завжди є токен для API - він сидить в secrets.GITHUB_TOKEN
. Ось тут більше про його права, але на перегляд репозиторію права точно будуть.
Отже, замість операцій з Git роблю виклик GitHub API, та отримую на виході JSON, в якому зокрема є ключ .files
, де перелічені всі файли зі змінами. Та ще на відміну від Git, не треба парсити ніякі цікаві формати. Береш jq та готуєш такий результат, який потрібний.
В результаті — замість 15 секунд ну може 1-2. Дрібниця, але важлива.