fix(ci): стек CouchDB после переезда остаётся на своём хосте #3087
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#3087
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/deploy-obsidian-infra-host"
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?
Зачем
Волт Obsidian живёт на Beget вместе с Forgejo и GlitchTip и там же остаётся. А
deploy-obsidian.ymlходил наsecrets.DEPLOY_HOSTбезусловно — тот самый секрет, который 30.08 будет переставлен на Selectel.То есть в день переезда этот workflow молча сменил бы адресата:
git resetна/opt/gendesignпродуктового хоста иdocker composeстека CouchDB там же, а волт на Beget тем временем перестал бы обновляться. Без единой ошибки — деплой зелёный, машина другая.Файл сам это признавал в шапке: проблема была описана и намеренно оставлена, потому что прошлая правка (#3079) касалась подлинности хоста, а не маршрутизации. Закрываю.
Что меняется
Адресат берётся как
INFRA_DEPLOY_HOSTс фолбэком наDEPLOY_HOST. До разъезда это одна машина → сегодня не меняется ничего; после — workflow остаётся на инфраструктурном хосте без правки файла в горячий момент.Схема и фолбэки
user/key/portскопированы сdeploy-infra.yml, чтобы два файла про один и тот же хост не расходились в поведении.Отпечаток идёт в паре с адресатом
Соблазнительный вариант —
${{ secrets.INFRA_DEPLOY_SSH_FINGERPRINT || secrets.DEPLOY_SSH_FINGERPRINT }}— ловушка: если инфра-хост задан, а его отпечаток нет, выражение свалится на отпечаток другой машины, и ssh откажет со сверкой ключа Beget'а против отпечатка Selectel'а. Перекрёстного фолбэка здесь нет и быть не должно — ровно как вdeploy-infra.yml.Поэтому выбор делает отдельный шаг с явным
if, а вниз отдаётся готовое значение. Отпечаток — публичный хеш ключа хоста, через output его гонять можно; приватный ключ остался прямой ссылкой на секрет.Инъекция через $GITHUB_OUTPUT
$GITHUB_OUTPUT— построчный форматключ=значение, поэтому перевод строки внутри значения означает инъекцию произвольного output'а. Отпечаток однострочный по определению, но в поле секрета лишний\nпопадает копипастой на раз — шапка файла предупреждает об этом отдельно.Шаг падает с внятным текстом вместо тихой подмены. Молча вычищать нельзя: сверка побайтовая, и
trimизменил бы результат проверки.Test plan
yaml.safe_load)bash -nSHA256:abc123→rc=0, «Подлинность хоста: сверяется по DEPLOY_SSH_FINGERPRINT»rc=0, баннер-предупреждение, деплой не падает (сегодняшнее поведение)rc=1с объяснениемINFRA_DEPLOY_HOSThost/user/key/port/fingerprint резолвятся ровно в те же секреты, что и до PRINFRA_DEPLOY_HOSTи убедиться, что стек CouchDB поехал на Beget, а не следом заDEPLOY_HOSTRefs #3062, #3029, #3057