ci: гонять гейт на pull request, а не только после мержа - #6
Merged
Conversation
Тесты запускались только по push в dev, то есть уже после мержа PR: на самом pull request не было ни одной проверки (gh pr checks — «no checks reported»), и падение обнаруживалось на dev, когда образ уже собирался. Гейт вынесен в переиспользуемый workflow_call и вызывается из двух мест: нового ci.yml на pull_request и существующего docker-publish.yml перед публикацией образа. Одно определение вместо двух копий — копии со временем разошлись бы, и получилось бы худшее: PR зелёный, dev красный. Добавлены отмена устаревших прогонов при новом пуше в ветку PR и кэш Tailwind CLI (make gate качает 120 МБ бинарник, цель tailwind-bin пропускает скачивание при наличии файла). Интеграционные тесты (-tags=integration, нужны Postgres и MinIO) в объём не входят — они и раньше не запускались нигде, это отдельная задача.
checkout v4→v7, setup-go v5→v7, cache v4→v6. Прогон выдавал предупреждение, что эти экшены нацелены на Node.js 20 и принудительно запускаются на Node.js 24. Экшены docker/* и action-gh-release в publish-джобе намеренно не тронуты: путь публикации образа на pull request не выполняется, проверить его этим PR невозможно, а молча сломать выкат хуже предупреждения.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Проблема
Тесты в CI были, но запускались только после мержа. Триггер у
docker-publish.yml—pushвdevи теги, поэтому на самих pull request'ах проверок не было вообще:PR #2, #3, #4 были смержены без единой проверки —
make gateпрогонялся уже по факту, на смердженномdev. Сломанный PR выглядел бы зелёным до последнего момента, а падение обнаружилось бы когда образ уже собирается и едет в GHCR.Решение
Гейт вынесен в переиспользуемый workflow и вызывается из двух мест:
gate.ymlworkflow_callmake gate+ проверка детерминизма артефактовci.yml(новый)pull_requestgate.ymldocker-publish.ymlpushв dev / тегиgate.yml, затем публикует образПочему переиспользуемый workflow, а не копия в двух файлах. Копии со временем расходятся, и расхождение здесь даёт худший из возможных исходов: PR зелёный, а
devкрасный. Одно определение гарантирует, что проверки PR — ровно то, что гейтит публикацию образа.Дублирования прогонов нет:
ci.ymlвисит только наpull_request, push вdevпо-прежнему обслуживаетсяdocker-publish.yml.Заодно
concurrency+cancel-in-progress): новый пуш в ветку PR отменяет предыдущий, иначе очередь копит проверки неактуальных коммитов.make gateкачает 120 МБ standalone-бинарник на каждом прогоне, а цельtailwind-binпропускает скачивание при наличии файла. Ключ кэша берёт версию изTAILWIND_VERSIONв Makefile, чтобы инвалидировался ровно при обновлении версии, а не при любой правке Makefile.Вне объёма
Интеграционные тесты (
-tags=integration, требуют Postgres и MinIO) — они не запускались нигде и раньше, ни в CI, ни вmake gate. Схема БД, миграции,internal/dbиinternal/s3под тестами есть, но эти тесты мёртвые. Это осознанно отдельная задача.Проверено
actionlintна всех трёх workflow — без замечанийmake gateна этой ветке — зелёныйuses:не содержит несовместимых ключей (runs-on/steps)