feat(tradein): persistent infra для backfill scripts (PR F) #592
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
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#592
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/tradein-scripts-persistent-infra"
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
После PR E (#591) backfill работал только через manual docker cp + docker exec -e. Этот PR делает infra persistent.
3 fixes
Real findings из backfill
681 mismatch — «Малышева 125»-type problem. Phase 4 UPDATE — отдельный PR.
Verified
3 проблемы фиксятся: 1. tradein-mvp/backend/Dockerfile копировал только COPY app — scripts/ слетал при каждом deploy, требовал manual docker cp. 2. docker-compose.prod.yml без env_file — .env.runtime не читался контейнером, переменные приходили только через host env. 3. Env-var name mismatch: compose YANDEX_GEOCODER_KEY vs script YANDEX_GEOCODER_API_KEY — script всегда видел None. Изменения: - backend/Dockerfile: COPY scripts ./scripts в builder + runner stage - docker-compose.prod.yml: * env_file: ./backend/.env.runtime (required: false) — pattern из main backend (PR #585) * убран дубль `YANDEX_GEOCODER_API_KEY: ${...}` из environment: block — он бы overrideal env_file пустым значением. Reviewer nit applied inline. - pydantic Settings (app/core/config.py): rename yandex_geocoder_key → yandex_geocoder_api_key. Case-insensitive env binding автоматически подхватывает `YANDEX_GEOCODER_API_KEY` (no Field alias нужен). - All 5 call sites в app/services/geocoder.py обновлены. - app/tasks/geocode_missing.py docstring + test mock обновлены. - backend/scripts/README.md: canonical `docker exec` commands без manual `docker cp` workflow. - DEPLOY.md + .env.example обновлены с новым именем переменной. Verified: - pytest tests/test_backfill_house_coords.py + test_audit_address_mismatch.py + test_cadastral_reverse.py → 56 pass - docker compose -f docker-compose.prod.yml config → valid syntax - pydantic binding: YANDEX_GEOCODER_API_KEY=foo → settings.yandex_geocoder_api_key=='foo' - code-reviewer LGTM (nit applied inline) После merge — на VPS уже создан /opt/gendesign/tradein-mvp/backend/.env.runtime с YANDEX_GEOCODER_API_KEY (см. PR #591 deploy). deploy.yml triggers force-recreate из-за нового image hash → env_file pick up автоматически.