Skip to content

ci: isolate DEV migrations with owner credentials - #784

Merged
TThanos3000 merged 6 commits into
devfrom
fix/dev-ci-migration-role
Oct 17, 2026
Merged

TThanos3000 merged 6 commits into
devfrom
fix/dev-ci-migration-role

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator

Что изменено

DEV migrations выполняются отдельным подключением procollab_api; web/Celery сохраняют procollab_api_dev. Одноразовая подготовка DEV использует эти два существующих login, без обязательного отдельного администратора.

Одноразовая подготовка DEV выполнена и независимо read-only подтверждена. Все отдельные обязательные suites на head f737deb прошли; DEV activation разрешена пользователем.

Причина

Deploy Dev остановился на partner_programs.0021_evaluation_criteria_lock: runtime login не владеет таблицей.

Согласованная роль миграций обоих контуров — procollab_api. PROD уже использует её; его workflow, application login, пароль, объекты и grants не меняются. Read-only preflight подтвердил общий PostgreSQL 14.24 cluster:

Контур Actual database Runtime Ownership
DEV procollab_db_dev procollab_api_dev procollab_api: 95 tables / 89 sequences; runtime: university table/sequence
PROD procollab_db_test procollab_api все 107 tables / 100 sequences: procollab_api

procollab_db_test — фактическая deployed PROD БД, установленная по server checkout/image. Существующее совмещение runtime/migration login в PROD сохраняется.

Реализация и scope

  • Base dev: 7596455f986302a3f26a93bc6b37b4087b065bfa; head: f737debaf2fc9d0656369f803c6506b6879c98d8.
  • Ровно 9 CI/scripts/tests/docs файлов; API, application permissions/models, numbered migrations, Angular и React не меняются. Обновление base выполнено обычным merge dev.
  • Environment dev, policy только dev; migration secrets присутствуют, их значения не читались.
  • Masked JSON → SSH stdin → migration container stdin; pinned ssh2@1.16.0, ED25519 host fingerprint, fixed remote argv. Credentials не записываются в .env или web/Celery config.
  • Preflight проверяет actual identity, non-admin flags, ownership, schema privileges и runtime grants в READ ONLY transaction до DDL.
  • Additive default privileges → migrate → runtime migrate --check до recreate.
  • DEV branch/database guards; deploy serialization, cancel-in-progress=false.

Одноразовая DEV подготовка

Runbook, helper, SQL.

На PostgreSQL 14 session_user может выдавать/отзывать членство в собственной роли: официальное правило, проверка на disposable 14.24. Прежнее утверждение об обязательном администраторе исправлено.

Helper берёт runtime credentials из DEV container, спрашивает только скрытый пароль procollab_api, проверяет оба login/БД/major version. При необходимости procollab_api_dev временно выдаёт членство в себе procollab_api; затем migrator передаёт ровно university table/owned sequence себе, сохраняя runtime access. В finally временное членство отзывается; исходное существующее членство сохраняется. Advisory lock исключает конкуренцию helper.

Направление: DEV role → migrator. DEV runtime не получает PROD owner-role. Членство cluster-wide: общая procollab_api временно получает права DEV role; PROD objects/grants не изменяются. Никаких REASSIGN OWNED, owner changes БД/схем, новых login или password rotation.

SQL error откатывает незавершённую транзакцию до cleanup; SIGINT/TERM/HUP вызывают finally. SIGKILL/потеря БД могут помешать отзыву — helper сообщает recovery command, runbook требует проверки. Процедура self-role grant ограничена PostgreSQL 14; на других major отказ до grant.

Проверки

  • Live metadata preflight, transaction_read_only=on, missing runtime privileges=[] в обоих контурах.
  • Новый helper: локальный PostgreSQL 18.1 — 22 tests, 19 PASS / 3 PG14-only skipped, 64.329 s; отказ неподдерживаемой версии до grant.
  • Black / Flake8 helper/tests, git diff --check; bash syntax SSH-блока.
  • На предыдущем head 83d5bf4: migration-role PG14/18 + SSH, 39 targeted + 1085 full backend PostgreSQL tests, штатные Lint/Tests — PASS.
  • PG14/18 matrix нового head: PG14 — 22 tests, 21 PASS / 1 version-guard skipped; PG18 — 22 tests, 19 PASS / 3 PG14-only skipped. Оба SSH suites — 5 PASS. Подтверждены prepare-owner success, rollback/cleanup, idempotency, preservation of existing membership.
  • Lint нового head — PASS.
  • Backend PostgreSQL CI текущего head: 39 targeted + 1085 full PASS, full suite 465.448 s; Django checks/model checks/makemigrations PASS.
  • Штатный CI текущего head: Lint PASS, 1085 tests PASS (16 PostgreSQL-only skipped), 854.377 s.
  • Дополнительный автоматически созданный push CI того же SHA 39076429710 ещё выполняется; завершённый identical-head run выше зелёный.
  • Пользователь выполнил pinned helper: ownership table/sequence → procollab_api, runtime access сохранён, temporary membership удалено.
  • Независимая live read-only проверка: actual runtime=procollab_api_dev, 186 tables/sequences доступны migrator; missing runtime privileges=[], mutual memberships=[false,false].
  • Secret authentication из нового CI / migration preflight / runtime checks / DEV rollout — PASS, see activation record below.

Acceptance

M1–M3: DEV-only и credential isolation; M4–M7: ownership, default/runtime grants, mixed-owner refusal и runtime migrate-check; M8: serialized DEV deploy; M9–M10: общая существующая роль и сохранённые application logins подтверждены source/config/disposable tests/live metadata соответственно.

SSH preparation и независимая read-only verification завершены. После зелёного CI — DEV activation и проверка migration connection, migrate-check, web/Celery. Disposable tests не заменяют live activation.

DEV activation completed — 18.10.2026

  • Полный успешный DEV deploy: 5bc06ed99db69be20c5282754a03eb8f3f7928db, image procollab-dev-api:5bc06ed99db69be20c5282754a03eb8f3f7928db-096712031353.
  • Migration connection procollab_api: actual preflight PASS, pending=0, migrate + обычный runtime migrate-check PASS. Новых unapplied migrations в этом rollout не было; искусственный live DDL не создавался.
  • Все последующие checks реально выполнены: runtime source hash, Nginx configuration, HTTP admin/login 200 (attempt 1), Celery pong (attempt 1).
  • Read-only verification, attempt 3: actual deployed image совпадает; runtime login=procollab_api_dev; все 186 relations доступны migrator; missing runtime privileges=[]; mutual memberships=[false,false].
  • Первый rollout ci: isolate DEV migrations with owner credentials #784 остановил выполнение оставшегося script из-за stdin-consuming docker exec, хотя job вернул success. Это отдельно исправлено #787, с RED→GREEN real Bash/SSH regression tests; финальный rollout выше выполнил полный хвост checks.
  • Application code и PROD не менялись при follow-up. Повторные общие backend/standard CI follow-up ещё выполняются; профильные Linux PG14/18 + 7 SSH tests и Lint PASS. Полный application baseline ci: isolate DEV migrations with owner credentials #784: 39 targeted + 1085 PostgreSQL и 1085 штатных tests PASS.

@TThanos3000
TThanos3000 marked this pull request as ready for review October 17, 2026 22:59
@TThanos3000
TThanos3000 merged commit 1734ef7 into dev Oct 17, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants