fix(ops): страж повторной заливки перестал молча пропускаться #3092
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#3092
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/3061-appini-path"
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?
Summary
assert_not_cut_overвops/split-infra-postgres.shне давал--force-restoreзалить устаревший дамп поверх данных, записанных после cutover. Одна из двух его проверок молча не срабатывала.${FORGEJO_DIR}/app.ini, ноFORGEJO_DIR— каталог со стеком (compose, раннеры). Конфиг живёт в томе данных: на боевом хосте/home/gendesign/forgejo/data/forgejo→/data, то есть.../data/forgejo/gitea/conf/app.ini. Файла по старому пути нет.[[ -r "$ini" ]] && grep ...— несуществующий файл читался как «признака cutover нет».FORGEJO_APP_INI, а ненайденный конфиг останавливает скрипт: это не «признака нет», а «проверить нечем».Test plan
bash -ndata/forgejo/gitea/conf/app.ini, строкаHOSTчитается, признак cutover определяется корректно (нет)${FORGEJO_DIR}/app.iniподтверждённо не существуетops/split-infra-postgres.sh— после того как на хосте появятся пароли #3061Refs #3061, #3057
assert_not_cut_over защищает от --force-restore после cutover: такая заливка дропает объекты и льёт заново из дампа, уничтожая всё, что приложения записали после переключения, а сверка фазы 5 подтверждает это как успех — записей, сделанных после cutover, в источнике никогда не было. Единственная защита — не дать запуститься. Страж состоит из двух проверок, и одна из них не работала. Путь считался как ${FORGEJO_DIR}/app.ini, но FORGEJO_DIR — это каталог со стеком: там docker-compose.yml и раннеры. Конфиг живёт внутри тома данных. На боевом хосте проверено: /home/gendesign/forgejo/data/forgejo монтируется в контейнер как /data, то есть app.ini лежит в /home/gendesign/forgejo/data/forgejo/gitea/conf/app.ini, а /home/gendesign/ forgejo/app.ini не существует вовсе. Проверка написана как `[[ -r "$ini" ]] && grep ...`, поэтому несуществующий файл читался как «признака cutover нет». Молча, без единого сообщения. Теперь путь ищется по трём кандидатам и переопределяется через FORGEJO_APP_INI. А если не нашёлся ни один — скрипт останавливается, а не продолжает. Ненайденный конфиг это не «признака нет», это «проверить нечем»: именно здесь пропуск стоит данных, записанных после переключения. Заодно поправлены два места в раннбуке на выходе скрипта, которые печатали тот же несуществующий путь как инструкцию человеку. Проверено на боевом Beget: автоопределение находит data/forgejo/gitea/conf/app.ini, строка HOST читается, признак cutover корректно определяется как отсутствующий; старый путь подтверждённо не существует. Refs #3061, #3057