ci: гейт против публикации занятых на VPS портов в workflow (#2757) #2759
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#2759
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2757-ci-port-guard"
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?
Проблема
Раннер запускает и job, и сервис-контейнеры с
--network host— проверено на проде:Значит
services: postgres+ports: 5432:5432не поднимает тестовую БД, а уводит сборку в боевой Postgres: порт контейнер занять не может, аlocalhost:5432из job'а — это прод. В #2745 отказ произошёл только из-за несовпадения пароля.Что сделано
scripts/check-workflow-ports.py— роняет сборку, если в.forgejo/workflows/*.ymlпубликуется порт, занятый на VPS. Ловит все формы: блокports:, инлайн-списокports: ["..."],docker run -p/--publish. Комментарии пропускаются (в них живут анти-примеры).--selftest— asserts на позитив и на ложные срабатывания (- 5432без публикации,15432:5432,postgis:16-3.4,"22:00"в тексте, DSNlocalhost:5432/test).changes-jobci.yml— этот job и так бежит на каждом PR и уже сделал checkout, отдельный слот дефицитного раннера не занимается (~1с). python3 в образе раннера есть (catthehacker/ubuntu:act-latest→ 3.12.3, проверено).ci.yml: комментарий «FUTURE: добавить service-контейнер — см..github/workflows/ci.ymlкак образец service-блока» указывал ровно на анти-пример (ports: - 5432:5432), безвредный там лишь потому, что GitHub Actions у нас не исполняется. Теперь указывает на рабочий способ изci-tradein.yml(#2745).Занятые порты (
ss -ltnpна bot-server, 2026-08-06)Опровергнутая предпосылка issue
«На VPS живут Redis, CouchDB, GlitchTip — та же ловушка» — нет. Ни один из них на хосте не слушает: в
docker psу них6379/tcp,5984/tcp,8000/tcpбез->, они в bridge-сетях. Сервис-контейнер с их портами ни с чем не столкнётся, и внесение их в запрет ронял бы сборку на ровном месте. В списке только то, что реально вLISTEN.Зато в списке нашёлся порт, которого в issue не было: 8000 — боевой API gendesign-backend. Ловушка та же, но там нет даже пароля, который спас в случае с БД.
Границы
deploy-tradein.ymlне тронут (его правит открытый #2680).Test plan
--selftestзелёный (позитив + ложные срабатывания)services: postgres+ports: 5432:5432→ exit 1 и::error file=...,line=8Refs #2757, #2745