fix(ci): деплой падает громко, если :latest отстаёт от головы по компоненту (#2950) #3023
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
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3023
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2950-latest-revision-gate"
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?
Что случилось 21.08 (хронология из статусов run'ов)
ccf84b4a(#3018, backend+frontend) → run 8326: build-backend ✓ 10:30:10, build-worker ✓ 10:34:08, build-frontend ✓ 10:34:14, deploy — «Has been cancelled» 10:35:13.95db3f44(#3019, ops-only) → run 8329 стартовал 10:35:12, билды skipped,deploy✓ 10:37:05 — накатил:latestкак есть.ccf84b4aлегли за 70 с до pull'а. При обратном порядке голова main была бы зелёной, а прод — на старом образе, и это не заметил бы никто (проверял по коду в контейнерах).cancel-in-progress: falseобъявлен, но на ещё не стартовавший job Forgejo 10.0.3 его не применяет. Host-lock (#2955) закрывает гонку прунов, эту дыру — нет.Что делает PR
docker/build-push-action:labels: org.opencontainers.image.revision=${{ github.sha }}на всех 12 шагах (попытка + ретрай × backend/worker/frontend и tradein backend/frontend/browser).scripts/check-latest-image-revision.sh <image> <timeout> -- <paths…>: читает ревизию:latestиз registry (imagetools inspect), требует, чтобы она содержала последний коммит по путям компонента (git log -1 -- pathsна checkout'е run'а; пути = фильтрыchanges, которые запускают сборку), ждёт билд предшественника до 15 мин и иначе::error+ exit 1. Ревизия новее — ок (dispatch собирает голову).deploy-job обоих workflow перед SSH: checkout (fetch-depth 0), login GHCR, гард по каждому образу.Test plan
backend/tests/test_2950_latest_image_revision_gate.py(подменныйdockerна PATH + настоящий временный git): свежий → 0; ревизия новее → 0; отстаёт → ждёт, затем 1 с::error; чужой компонент → 1; без метки → 1; registry упал → 1; usage → 2. Мутация «скрипт всегда 0» → 5/7 красных. Три прогона подряд зелёные.check-workflow-ports.py✓; существующийtest_2950_deploy_concurrency_group.pyзелёный.infra), гард в том же run'е должен пройти — это живая проверка форматаimagetools inspect --format '{{json .Image}}'на наших образах.::error.⚠️ Первый деплой после этого PR может ждать до 15 мин, если параллельно идёт чужой билд — это ожидаемо.
Refs #2950
prune -afубиваетcompose pullдеплоя ПТИЦЫ (разные группы concurrency, один докер-демон) #2950prune -afубиваетcompose pullдеплоя ПТИЦЫ (разные группы concurrency, один докер-демон) #2950