chore(ci): не проглатывать падение сборки + починить самолечение buildcache #2890
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2890
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "chore/ci-gates-runner-and-deploy"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проблема
Из аудита прод-состояния 15.08. Зелёная галка деплоя не отличима от пропущенного деплоя: если сборка падает из-за битого blob в кеше, шаг деплоя пропускается, а прогон в целом выглядит успешным (#2841).
Плюс раннеры работают в сети хоста (
NetworkMode=hostу всех трёх), аss -ltnpпоказываетLISTEN 127.0.0.1:5432— боевойgendesign-postgres. Job с сервис-контейнером на 5432 попал бы в прод-базу.Что сделано
1. Проверка того, что образ реально собран. После каждого из шести retry-шагов — безусловный
docker buildx imagetools inspect <image>:<sha>, безcontinue-on-error.Это принципиально: первая версия правки держалась на
steps.<id>.outcome, а поддержка этого поля у Forgejo act_runner не доказана. Если бы раннер его не заполнял, retry молча не побежал бы, падение ушло бы вcontinue-on-error, и job вернул успех — то есть правка про «честный статус» дала бы ровно обратное. Новый шаг движок ни о чём не спрашивает, он смотрит фактическое состояние registry.2.
cache-toвозвращён в retry-шаги. Заявленное самолечение битого кеша не работало никогда:cache-toстоял только на основном шаге, а retry всегда собирался без него — значит испорченный манифест не перезаписывался и падение воспроизводилось бы вечно. Теперь успешный ретрай сам чинит кеш.cache-fromв retry остаётся убран, он и есть источник падения.3. Health-check в главном
deploy.ymlтеперь может упасть. Было:Под
set -eэто завершается кодом 0, даже еслиcurlне отдал 200 ни разу: он не последняя команда&&-списка, и POSIX такие команды от проверки освобождает. Переписано по образцуdeploy-tradein.yml(#2214) — явный флаг иexit 1после цикла.Про
docker rm -fВ
deploy*.ymlвызовыdocker rm -fбез-vне тронуты — они применяются к боевым контейнерам, и флаг снёс бы тома с данными прода. Вci*.yml-vстоит и это правильно (#2887). Дифф строго аддитивный, ни одной удалённой строки.Ревью
Два круга. В первом — три замечания, включая то самое про
steps.outcome. Во втором ревьюер проверил закрытие сам: yaml-парсом подтвердил 6 из 6 verify-шагов безcontinue-on-errorи безif. Вердикт APPROVE.Остаток, осознанно принятый: сам
imagetools inspectвживую на act_runner не гонялся (косвенно — в тех же job'ах уже работаютdocker loginиdocker buildxшеллом). Проверится первым же деплоем.Test plan
check yamlв pre-commit