@cicore/cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/ci.js +13 -0
- package/dist/commands/addon/api-actions.d.ts +45 -0
- package/dist/commands/addon/api-actions.d.ts.map +1 -0
- package/dist/commands/addon/api-actions.js +281 -0
- package/dist/commands/addon/api-actions.js.map +1 -0
- package/dist/commands/addon/build.d.ts +11 -0
- package/dist/commands/addon/build.d.ts.map +1 -0
- package/dist/commands/addon/build.js +182 -0
- package/dist/commands/addon/build.js.map +1 -0
- package/dist/commands/addon/create.d.ts +11 -0
- package/dist/commands/addon/create.d.ts.map +1 -0
- package/dist/commands/addon/create.js +1186 -0
- package/dist/commands/addon/create.js.map +1 -0
- package/dist/commands/addon/delete.d.ts +13 -0
- package/dist/commands/addon/delete.d.ts.map +1 -0
- package/dist/commands/addon/delete.js +83 -0
- package/dist/commands/addon/delete.js.map +1 -0
- package/dist/commands/addon/deploy.d.ts +27 -0
- package/dist/commands/addon/deploy.d.ts.map +1 -0
- package/dist/commands/addon/deploy.js +459 -0
- package/dist/commands/addon/deploy.js.map +1 -0
- package/dist/commands/addon/dev-deploy.d.ts +31 -0
- package/dist/commands/addon/dev-deploy.d.ts.map +1 -0
- package/dist/commands/addon/dev-deploy.js +128 -0
- package/dist/commands/addon/dev-deploy.js.map +1 -0
- package/dist/commands/addon/dev.d.ts +36 -0
- package/dist/commands/addon/dev.d.ts.map +1 -0
- package/dist/commands/addon/dev.js +323 -0
- package/dist/commands/addon/dev.js.map +1 -0
- package/dist/commands/addon/extract-classes.d.ts +23 -0
- package/dist/commands/addon/extract-classes.d.ts.map +1 -0
- package/dist/commands/addon/extract-classes.js +281 -0
- package/dist/commands/addon/extract-classes.js.map +1 -0
- package/dist/commands/addon/generate-safelist.d.ts +24 -0
- package/dist/commands/addon/generate-safelist.d.ts.map +1 -0
- package/dist/commands/addon/generate-safelist.js +276 -0
- package/dist/commands/addon/generate-safelist.js.map +1 -0
- package/dist/commands/addon/index.d.ts +19 -0
- package/dist/commands/addon/index.d.ts.map +1 -0
- package/dist/commands/addon/index.js +296 -0
- package/dist/commands/addon/index.js.map +1 -0
- package/dist/commands/addon/init-repo.d.ts +25 -0
- package/dist/commands/addon/init-repo.d.ts.map +1 -0
- package/dist/commands/addon/init-repo.js +171 -0
- package/dist/commands/addon/init-repo.js.map +1 -0
- package/dist/commands/addon/install.d.ts +23 -0
- package/dist/commands/addon/install.d.ts.map +1 -0
- package/dist/commands/addon/install.js +84 -0
- package/dist/commands/addon/install.js.map +1 -0
- package/dist/commands/addon/list.d.ts +10 -0
- package/dist/commands/addon/list.d.ts.map +1 -0
- package/dist/commands/addon/list.js +102 -0
- package/dist/commands/addon/list.js.map +1 -0
- package/dist/commands/addon/manifest-refresh.d.ts +17 -0
- package/dist/commands/addon/manifest-refresh.d.ts.map +1 -0
- package/dist/commands/addon/manifest-refresh.js +48 -0
- package/dist/commands/addon/manifest-refresh.js.map +1 -0
- package/dist/commands/addon/migrate.d.ts +40 -0
- package/dist/commands/addon/migrate.d.ts.map +1 -0
- package/dist/commands/addon/migrate.js +236 -0
- package/dist/commands/addon/migrate.js.map +1 -0
- package/dist/commands/addon/publish.d.ts +33 -0
- package/dist/commands/addon/publish.d.ts.map +1 -0
- package/dist/commands/addon/publish.js +236 -0
- package/dist/commands/addon/publish.js.map +1 -0
- package/dist/commands/addon/scaffold-quality.d.ts +21 -0
- package/dist/commands/addon/scaffold-quality.d.ts.map +1 -0
- package/dist/commands/addon/scaffold-quality.js +90 -0
- package/dist/commands/addon/scaffold-quality.js.map +1 -0
- package/dist/commands/addon/sign.d.ts +9 -0
- package/dist/commands/addon/sign.d.ts.map +1 -0
- package/dist/commands/addon/sign.js +83 -0
- package/dist/commands/addon/sign.js.map +1 -0
- package/dist/commands/addon/toggle.d.ts +6 -0
- package/dist/commands/addon/toggle.d.ts.map +1 -0
- package/dist/commands/addon/toggle.js +46 -0
- package/dist/commands/addon/toggle.js.map +1 -0
- package/dist/commands/agent/index.d.ts +34 -0
- package/dist/commands/agent/index.d.ts.map +1 -0
- package/dist/commands/agent/index.js +564 -0
- package/dist/commands/agent/index.js.map +1 -0
- package/dist/commands/brand/index.d.ts +54 -0
- package/dist/commands/brand/index.d.ts.map +1 -0
- package/dist/commands/brand/index.js +367 -0
- package/dist/commands/brand/index.js.map +1 -0
- package/dist/commands/build/index.d.ts +53 -0
- package/dist/commands/build/index.d.ts.map +1 -0
- package/dist/commands/build/index.js +726 -0
- package/dist/commands/build/index.js.map +1 -0
- package/dist/commands/cache/flush-local.d.ts +31 -0
- package/dist/commands/cache/flush-local.d.ts.map +1 -0
- package/dist/commands/cache/flush-local.js +161 -0
- package/dist/commands/cache/flush-local.js.map +1 -0
- package/dist/commands/cache/index.d.ts +14 -0
- package/dist/commands/cache/index.d.ts.map +1 -0
- package/dist/commands/cache/index.js +453 -0
- package/dist/commands/cache/index.js.map +1 -0
- package/dist/commands/check/index.d.ts +8 -0
- package/dist/commands/check/index.d.ts.map +1 -0
- package/dist/commands/check/index.js +1316 -0
- package/dist/commands/check/index.js.map +1 -0
- package/dist/commands/cloudflare/index.d.ts +8 -0
- package/dist/commands/cloudflare/index.d.ts.map +1 -0
- package/dist/commands/cloudflare/index.js +453 -0
- package/dist/commands/cloudflare/index.js.map +1 -0
- package/dist/commands/core/create.d.ts +12 -0
- package/dist/commands/core/create.d.ts.map +1 -0
- package/dist/commands/core/create.js +206 -0
- package/dist/commands/core/create.js.map +1 -0
- package/dist/commands/core/delete.d.ts +11 -0
- package/dist/commands/core/delete.d.ts.map +1 -0
- package/dist/commands/core/delete.js +64 -0
- package/dist/commands/core/delete.js.map +1 -0
- package/dist/commands/core/env.d.ts +12 -0
- package/dist/commands/core/env.d.ts.map +1 -0
- package/dist/commands/core/env.js +95 -0
- package/dist/commands/core/env.js.map +1 -0
- package/dist/commands/core/health.d.ts +6 -0
- package/dist/commands/core/health.d.ts.map +1 -0
- package/dist/commands/core/health.js +215 -0
- package/dist/commands/core/health.js.map +1 -0
- package/dist/commands/core/index.d.ts +15 -0
- package/dist/commands/core/index.d.ts.map +1 -0
- package/dist/commands/core/index.js +86 -0
- package/dist/commands/core/index.js.map +1 -0
- package/dist/commands/core/list.d.ts +11 -0
- package/dist/commands/core/list.d.ts.map +1 -0
- package/dist/commands/core/list.js +58 -0
- package/dist/commands/core/list.js.map +1 -0
- package/dist/commands/core/rebuild.d.ts +13 -0
- package/dist/commands/core/rebuild.d.ts.map +1 -0
- package/dist/commands/core/rebuild.js +119 -0
- package/dist/commands/core/rebuild.js.map +1 -0
- package/dist/commands/db/index.d.ts +23 -0
- package/dist/commands/db/index.d.ts.map +1 -0
- package/dist/commands/db/index.js +355 -0
- package/dist/commands/db/index.js.map +1 -0
- package/dist/commands/db/promote-silo.d.ts +320 -0
- package/dist/commands/db/promote-silo.d.ts.map +1 -0
- package/dist/commands/db/promote-silo.js +930 -0
- package/dist/commands/db/promote-silo.js.map +1 -0
- package/dist/commands/db/relocate.d.ts +41 -0
- package/dist/commands/db/relocate.d.ts.map +1 -0
- package/dist/commands/db/relocate.js +482 -0
- package/dist/commands/db/relocate.js.map +1 -0
- package/dist/commands/db/rollback-silo.d.ts +44 -0
- package/dist/commands/db/rollback-silo.d.ts.map +1 -0
- package/dist/commands/db/rollback-silo.js +402 -0
- package/dist/commands/db/rollback-silo.js.map +1 -0
- package/dist/commands/deploy/index.d.ts +26 -0
- package/dist/commands/deploy/index.d.ts.map +1 -0
- package/dist/commands/deploy/index.js +107 -0
- package/dist/commands/deploy/index.js.map +1 -0
- package/dist/commands/devops/index.d.ts +6 -0
- package/dist/commands/devops/index.d.ts.map +1 -0
- package/dist/commands/devops/index.js +220 -0
- package/dist/commands/devops/index.js.map +1 -0
- package/dist/commands/domain/index.d.ts +8 -0
- package/dist/commands/domain/index.d.ts.map +1 -0
- package/dist/commands/domain/index.js +386 -0
- package/dist/commands/domain/index.js.map +1 -0
- package/dist/commands/image/index.d.ts +8 -0
- package/dist/commands/image/index.d.ts.map +1 -0
- package/dist/commands/image/index.js +308 -0
- package/dist/commands/image/index.js.map +1 -0
- package/dist/commands/install/factory-reset.d.ts +21 -0
- package/dist/commands/install/factory-reset.d.ts.map +1 -0
- package/dist/commands/install/factory-reset.js +83 -0
- package/dist/commands/install/factory-reset.js.map +1 -0
- package/dist/commands/install/index.d.ts +17 -0
- package/dist/commands/install/index.d.ts.map +1 -0
- package/dist/commands/install/index.js +44 -0
- package/dist/commands/install/index.js.map +1 -0
- package/dist/commands/install/install.d.ts +35 -0
- package/dist/commands/install/install.d.ts.map +1 -0
- package/dist/commands/install/install.js +171 -0
- package/dist/commands/install/install.js.map +1 -0
- package/dist/commands/login/index.d.ts +15 -0
- package/dist/commands/login/index.d.ts.map +1 -0
- package/dist/commands/login/index.js +58 -0
- package/dist/commands/login/index.js.map +1 -0
- package/dist/commands/nginx/index.d.ts +11 -0
- package/dist/commands/nginx/index.d.ts.map +1 -0
- package/dist/commands/nginx/index.js +580 -0
- package/dist/commands/nginx/index.js.map +1 -0
- package/dist/commands/server/bootstrap.d.ts +25 -0
- package/dist/commands/server/bootstrap.d.ts.map +1 -0
- package/dist/commands/server/bootstrap.js +260 -0
- package/dist/commands/server/bootstrap.js.map +1 -0
- package/dist/commands/server/index.d.ts +8 -0
- package/dist/commands/server/index.d.ts.map +1 -0
- package/dist/commands/server/index.js +2524 -0
- package/dist/commands/server/index.js.map +1 -0
- package/dist/commands/setup/index.d.ts +34 -0
- package/dist/commands/setup/index.d.ts.map +1 -0
- package/dist/commands/setup/index.js +423 -0
- package/dist/commands/setup/index.js.map +1 -0
- package/dist/commands/ssl/index.d.ts +8 -0
- package/dist/commands/ssl/index.d.ts.map +1 -0
- package/dist/commands/ssl/index.js +275 -0
- package/dist/commands/ssl/index.js.map +1 -0
- package/dist/commands/superadmin/index.d.ts +16 -0
- package/dist/commands/superadmin/index.d.ts.map +1 -0
- package/dist/commands/superadmin/index.js +81 -0
- package/dist/commands/superadmin/index.js.map +1 -0
- package/dist/commands/tenant/index.d.ts +6 -0
- package/dist/commands/tenant/index.d.ts.map +1 -0
- package/dist/commands/tenant/index.js +192 -0
- package/dist/commands/tenant/index.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/addon-sign.d.ts +23 -0
- package/dist/lib/addon-sign.d.ts.map +1 -0
- package/dist/lib/addon-sign.js +39 -0
- package/dist/lib/addon-sign.js.map +1 -0
- package/dist/lib/addon-sign.test.d.ts +2 -0
- package/dist/lib/addon-sign.test.d.ts.map +1 -0
- package/dist/lib/addon-sign.test.js +27 -0
- package/dist/lib/addon-sign.test.js.map +1 -0
- package/dist/lib/cdn.d.ts +25 -0
- package/dist/lib/cdn.d.ts.map +1 -0
- package/dist/lib/cdn.js +131 -0
- package/dist/lib/cdn.js.map +1 -0
- package/dist/lib/cloudflare.d.ts +133 -0
- package/dist/lib/cloudflare.d.ts.map +1 -0
- package/dist/lib/cloudflare.js +435 -0
- package/dist/lib/cloudflare.js.map +1 -0
- package/dist/lib/config.d.ts +96 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +132 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/env.d.ts +8 -0
- package/dist/lib/env.d.ts.map +1 -0
- package/dist/lib/env.js +64 -0
- package/dist/lib/env.js.map +1 -0
- package/dist/lib/hosts.d.ts +194 -0
- package/dist/lib/hosts.d.ts.map +1 -0
- package/dist/lib/hosts.js +183 -0
- package/dist/lib/hosts.js.map +1 -0
- package/dist/lib/logger.d.ts +68 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +130 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/nginx-config.d.ts +78 -0
- package/dist/lib/nginx-config.d.ts.map +1 -0
- package/dist/lib/nginx-config.js +736 -0
- package/dist/lib/nginx-config.js.map +1 -0
- package/dist/lib/ops/addon-dev.d.ts +93 -0
- package/dist/lib/ops/addon-dev.d.ts.map +1 -0
- package/dist/lib/ops/addon-dev.js +237 -0
- package/dist/lib/ops/addon-dev.js.map +1 -0
- package/dist/lib/ops/addon-quality.d.ts +38 -0
- package/dist/lib/ops/addon-quality.d.ts.map +1 -0
- package/dist/lib/ops/addon-quality.js +338 -0
- package/dist/lib/ops/addon-quality.js.map +1 -0
- package/dist/lib/ops/addon-routes.d.ts +49 -0
- package/dist/lib/ops/addon-routes.d.ts.map +1 -0
- package/dist/lib/ops/addon-routes.js +189 -0
- package/dist/lib/ops/addon-routes.js.map +1 -0
- package/dist/lib/ops/addon.d.ts +120 -0
- package/dist/lib/ops/addon.d.ts.map +1 -0
- package/dist/lib/ops/addon.js +260 -0
- package/dist/lib/ops/addon.js.map +1 -0
- package/dist/lib/ops/cdn.d.ts +87 -0
- package/dist/lib/ops/cdn.d.ts.map +1 -0
- package/dist/lib/ops/cdn.js +170 -0
- package/dist/lib/ops/cdn.js.map +1 -0
- package/dist/lib/ops/cf.d.ts +36 -0
- package/dist/lib/ops/cf.d.ts.map +1 -0
- package/dist/lib/ops/cf.js +114 -0
- package/dist/lib/ops/cf.js.map +1 -0
- package/dist/lib/ops/compose.d.ts +95 -0
- package/dist/lib/ops/compose.d.ts.map +1 -0
- package/dist/lib/ops/compose.js +165 -0
- package/dist/lib/ops/compose.js.map +1 -0
- package/dist/lib/ops/core.d.ts +117 -0
- package/dist/lib/ops/core.d.ts.map +1 -0
- package/dist/lib/ops/core.js +322 -0
- package/dist/lib/ops/core.js.map +1 -0
- package/dist/lib/ops/db.d.ts +116 -0
- package/dist/lib/ops/db.d.ts.map +1 -0
- package/dist/lib/ops/db.js +351 -0
- package/dist/lib/ops/db.js.map +1 -0
- package/dist/lib/ops/dns.d.ts +111 -0
- package/dist/lib/ops/dns.d.ts.map +1 -0
- package/dist/lib/ops/dns.js +306 -0
- package/dist/lib/ops/dns.js.map +1 -0
- package/dist/lib/ops/image.d.ts +94 -0
- package/dist/lib/ops/image.d.ts.map +1 -0
- package/dist/lib/ops/image.js +159 -0
- package/dist/lib/ops/image.js.map +1 -0
- package/dist/lib/ops/nginx.d.ts +114 -0
- package/dist/lib/ops/nginx.d.ts.map +1 -0
- package/dist/lib/ops/nginx.js +388 -0
- package/dist/lib/ops/nginx.js.map +1 -0
- package/dist/lib/ops/redis.d.ts +7 -0
- package/dist/lib/ops/redis.d.ts.map +1 -0
- package/dist/lib/ops/redis.js +35 -0
- package/dist/lib/ops/redis.js.map +1 -0
- package/dist/lib/ops/ssh.d.ts +127 -0
- package/dist/lib/ops/ssh.d.ts.map +1 -0
- package/dist/lib/ops/ssh.js +269 -0
- package/dist/lib/ops/ssh.js.map +1 -0
- package/dist/lib/prompts.d.ts +46 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +113 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/sast.d.ts +43 -0
- package/dist/lib/sast.d.ts.map +1 -0
- package/dist/lib/sast.js +79 -0
- package/dist/lib/sast.js.map +1 -0
- package/dist/lib/sast.test.d.ts +2 -0
- package/dist/lib/sast.test.d.ts.map +1 -0
- package/dist/lib/sast.test.js +33 -0
- package/dist/lib/sast.test.js.map +1 -0
- package/dist/lib/shell.d.ts +61 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +183 -0
- package/dist/lib/shell.js.map +1 -0
- package/dist/lib/ssh-config.d.ts +37 -0
- package/dist/lib/ssh-config.d.ts.map +1 -0
- package/dist/lib/ssh-config.js +122 -0
- package/dist/lib/ssh-config.js.map +1 -0
- package/dist/lib/tenant-scope.d.ts +38 -0
- package/dist/lib/tenant-scope.d.ts.map +1 -0
- package/dist/lib/tenant-scope.js +129 -0
- package/dist/lib/tenant-scope.js.map +1 -0
- package/dist/lib/tenant-scope.test.d.ts +2 -0
- package/dist/lib/tenant-scope.test.d.ts.map +1 -0
- package/dist/lib/tenant-scope.test.js +223 -0
- package/dist/lib/tenant-scope.test.js.map +1 -0
- package/package.json +58 -0
- package/templates/bootstrap/.env.template +54 -0
- package/templates/bootstrap/docker-compose.yml +145 -0
- package/templates/vhost.conf.tmpl +446 -0
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI — `ci db promote-silo` (F5 / Faz 6).
|
|
3
|
+
*
|
|
4
|
+
* 9-step orchestrator that promotes a pool-tier brand to a dedicated silo DB.
|
|
5
|
+
* LOCKED spec: docs/planning/2026-06-01-faz6-promote-silo.md.
|
|
6
|
+
*
|
|
7
|
+
* Mustafa LOCK'ları (mimari sözleşme — bypass YASAK):
|
|
8
|
+
* K1 — COPY pipe + FK-aware sıralama (parents→children) veya post-load
|
|
9
|
+
* constraints VALIDATE. FK ihlali = sessiz kayıp.
|
|
10
|
+
* K2 — Otomatik tablo discovery + child FK kapsama. Manifest üretilir +
|
|
11
|
+
* --confirm-manifest gate (insan-gözden-geçirme; CI'da --yes ile bypass).
|
|
12
|
+
* K3 — Pool RLS bypass (superuser) AMA her COPY EXPLICIT `WHERE brand_id=:b`.
|
|
13
|
+
* Kapalı RLS'e güvenme; her COPY filtre TAŞIR.
|
|
14
|
+
* + Anti-sızıntı assertion (Step 7): silo'da brand_id != :b satır = 0.
|
|
15
|
+
* K4 — Per-step idempotent guard; cp_provisioning_jobs.steps jsonb resumable.
|
|
16
|
+
* Mevcut provision-agent çatısını REUSE et.
|
|
17
|
+
*
|
|
18
|
+
* INVARIANT (zorunlu):
|
|
19
|
+
* INV-1 — Cutover (Step 8) YALNIZ Step 7 verify YEŞİL ise. Pool-filtered
|
|
20
|
+
* row-count + checksum eşitliği; geçmezse cutover YOK.
|
|
21
|
+
* INV-2 — Promote başarılı olsa bile pool verisi SİLİNMEZ. Cleanup ayrı
|
|
22
|
+
* job (Faz 6.1, 14 gün retention). Geri-dönülebilir.
|
|
23
|
+
*
|
|
24
|
+
* Bu komut iki şapkada koşar:
|
|
25
|
+
* 1) Standalone: `ci db promote-silo --brand <slug> --host <alias>` —
|
|
26
|
+
* operator debug + apply dry-run + ilk tatbikat.
|
|
27
|
+
* 2) Agent dispatch: `ci agent run` `db_promote_silo` job tipini gördüğünde
|
|
28
|
+
* bu komut spawn edilir (mevcut spawn pattern; agent index.ts dispatch).
|
|
29
|
+
*
|
|
30
|
+
* Bu turun KAPSAM DIŞI: gerçek child-FK discovery + COPY pipe data-plane
|
|
31
|
+
* implementation. v1 skeleton: validate → discovery (brand_id kolonu olan
|
|
32
|
+
* tablolar + FK child genişletme) → silo CREATE + schema clone → manifest
|
|
33
|
+
* jsonb logging → verify gate iskeleti + INV-1/INV-2 guard. Gerçek data
|
|
34
|
+
* migrate adımları Faz 6 apply tatbikatı sırasında refinement görür (mkt
|
|
35
|
+
* sentinel brand test ile).
|
|
36
|
+
*/
|
|
37
|
+
import { Command } from 'commander';
|
|
38
|
+
import { type HostConfig } from '../../lib/hosts.js';
|
|
39
|
+
export declare function registerPromoteSilo(db: Command): void;
|
|
40
|
+
export interface PromoteOpts {
|
|
41
|
+
readonly brand: string;
|
|
42
|
+
readonly host?: string;
|
|
43
|
+
readonly jobId?: string;
|
|
44
|
+
readonly confirmManifest?: boolean;
|
|
45
|
+
readonly dryRun?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface StepState {
|
|
48
|
+
status: 'pending' | 'running' | 'completed' | 'failed' | 'skipped';
|
|
49
|
+
startedAt?: string;
|
|
50
|
+
finishedAt?: string;
|
|
51
|
+
detail?: Record<string, unknown>;
|
|
52
|
+
error?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface OrchCtx {
|
|
55
|
+
readonly cfg: HostConfig;
|
|
56
|
+
readonly brand: string;
|
|
57
|
+
readonly jobId: string | null;
|
|
58
|
+
readonly confirmManifest: boolean;
|
|
59
|
+
readonly dryRun: boolean;
|
|
60
|
+
readonly steps: StepState[];
|
|
61
|
+
}
|
|
62
|
+
/** Brand row from cp_brands. */
|
|
63
|
+
export interface BrandRow {
|
|
64
|
+
readonly id: string;
|
|
65
|
+
readonly slug: string;
|
|
66
|
+
readonly db_tier: string;
|
|
67
|
+
readonly is_default: string | boolean;
|
|
68
|
+
readonly status: string;
|
|
69
|
+
readonly placement_region: string | null;
|
|
70
|
+
}
|
|
71
|
+
/** Pool DB locator (cp_databases owner=core + tier=pool). */
|
|
72
|
+
export interface PoolDbRow {
|
|
73
|
+
readonly db_host: string;
|
|
74
|
+
readonly db_port: number;
|
|
75
|
+
readonly db_name: string;
|
|
76
|
+
readonly db_user: string;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Discovery manifest entry — one table to migrate.
|
|
80
|
+
*
|
|
81
|
+
* Predicate alanı SQL fragment'idir; WHERE'den sonra yazılır. Brand ID
|
|
82
|
+
* substitution'ı caller'da (parametre prepared statement yerine literal
|
|
83
|
+
* SQL string — promote-silo nadir batch op, dış input yok; brand id UUID
|
|
84
|
+
* regex'le valide ediliyor). Örnekler:
|
|
85
|
+
* direct: "brand_id = '<uuid>'"
|
|
86
|
+
* fk-1: "order_id IN (SELECT id FROM public.orders WHERE brand_id = '<uuid>')"
|
|
87
|
+
* fk-2: "line_id IN (SELECT id FROM public.lines WHERE order_id IN (...))"
|
|
88
|
+
*/
|
|
89
|
+
export interface TableEntry {
|
|
90
|
+
readonly schema: string;
|
|
91
|
+
readonly table: string;
|
|
92
|
+
/** 'direct' = brand_id kolonu var; 'fk' = parent zinciri ile bağlı (en az 1 atlama). */
|
|
93
|
+
readonly via: 'direct' | 'fk';
|
|
94
|
+
/** FK zinciri (en yakın parent en başta, en uzak parent sonda). 'direct' için boş. */
|
|
95
|
+
readonly fkPath: string[];
|
|
96
|
+
/** WHERE clause fragment (brand id literal'i ile). Caller `WHERE ${predicate}` olarak kullanır. */
|
|
97
|
+
readonly predicate: string;
|
|
98
|
+
/** Topological sort sırası (0 = parent-most, daha büyük = daha derin child). */
|
|
99
|
+
readonly depth: number;
|
|
100
|
+
/** Row count in pool filtered by brand_id (where applicable). */
|
|
101
|
+
readonly poolCount?: number;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Reference table — brand-closure'un FK ile ulaştığı ama closure DIŞINDA
|
|
105
|
+
* kalan global/shared parent (örn. countries, currencies). INV-4: bunlar
|
|
106
|
+
* Step 6'da brand-scoped COPY'den ÖNCE filtresiz tam-kopyalanır; aksi
|
|
107
|
+
* takdirde silo'da dangling FK kalır (kırık referential integrity).
|
|
108
|
+
*/
|
|
109
|
+
export interface ReferenceEntry {
|
|
110
|
+
readonly schema: string;
|
|
111
|
+
readonly table: string;
|
|
112
|
+
/** Hangi brand-scoped tablolar buna FK ile bağlı (operator triage için). */
|
|
113
|
+
readonly referrers: string[];
|
|
114
|
+
}
|
|
115
|
+
/** Step 2 dönüşü — brand-scoped tablolar + global reference tabloları. */
|
|
116
|
+
export interface DiscoveryResult {
|
|
117
|
+
readonly tables: TableEntry[];
|
|
118
|
+
readonly references: ReferenceEntry[];
|
|
119
|
+
}
|
|
120
|
+
export declare function runOrchestrator(ctx: OrchCtx): Promise<boolean>;
|
|
121
|
+
/** Generic per-step wrapper: idempotent guard + state log + audit. */
|
|
122
|
+
export declare function step<T>(ctx: OrchCtx, idx: number, name: string, body: () => Promise<T>): Promise<T>;
|
|
123
|
+
/** Step 1 — VALIDATE: brand var + tier=pool + sentinel değil + en az 1 satır. */
|
|
124
|
+
export declare function doValidate(ctx: OrchCtx): Promise<BrandRow>;
|
|
125
|
+
/**
|
|
126
|
+
* Step 2 — DISCOVERY: tablo manifest üretimi (GERÇEK, K2 tamlık).
|
|
127
|
+
*
|
|
128
|
+
* Akış:
|
|
129
|
+
* 1. `direct[]` — public şemada `brand_id` kolonu olan tablolar.
|
|
130
|
+
* 2. `fkEdges[]` — pg_catalog'tan TÜM single-column FK ilişkileri
|
|
131
|
+
* (child.fk_col → parent.pk_col). Composite FK'lar (nadir; addon
|
|
132
|
+
* tarafından nadiren) — sadece ilk kolon kullanılır + uyarı logla.
|
|
133
|
+
* 3. **BFS closure** — direct tablolardan başlayıp FK arc'larıyla
|
|
134
|
+
* ulaşılabilen tüm child tabloları depth-tagged topla. brand-reachable
|
|
135
|
+
* hiçbir tablo sessizce atlanmaz (Mustafa K2 tamlık zorunluluğu).
|
|
136
|
+
* 4. **Predicate composition** — her tablo için WHERE fragment'i üret:
|
|
137
|
+
* direct → `brand_id = '<uuid>'`
|
|
138
|
+
* fk → `<fk_col> IN (SELECT <parent_pk> FROM <parent> WHERE <parent_predicate>)`
|
|
139
|
+
* Recursive: çok-seviyeli FK'lar nested SUBQUERY ile zincirlenir.
|
|
140
|
+
* 5. **Topological sort** — `depth` artan sırada (parents → children).
|
|
141
|
+
* İki yönlü cycle (FK cycle, postgres'te ON DELETE CASCADE arası nadir)
|
|
142
|
+
* → cycle hatası fırlat (operator manuel müdahalesi).
|
|
143
|
+
*
|
|
144
|
+
* `--confirm-manifest` flag yoksa manifest dökümü + DUR (insan-gözden-geçirme).
|
|
145
|
+
* CI/agent mode (panel enqueue) flag'i her zaman geçer.
|
|
146
|
+
*/
|
|
147
|
+
export declare function doDiscovery(ctx: OrchCtx, brand: BrandRow, pool: PoolDbRow): Promise<DiscoveryResult>;
|
|
148
|
+
/**
|
|
149
|
+
* Reference tabloları arası FK varsa: parents-first topological sort.
|
|
150
|
+
* Kahn's algoritması. Cycle → throw (operator manuel müdahalesi; nadir).
|
|
151
|
+
* Stable: in-degree 0 küme alfabetik sırayla pop'lanır.
|
|
152
|
+
*/
|
|
153
|
+
export declare function topoSortReferences(refs: ReferenceEntry[], fkRows: FkEdgeRow[]): ReferenceEntry[];
|
|
154
|
+
/** pg_catalog FK row tipi. */
|
|
155
|
+
export interface FkEdgeRow {
|
|
156
|
+
readonly child_schema: string;
|
|
157
|
+
readonly child_table: string;
|
|
158
|
+
readonly child_column: string;
|
|
159
|
+
readonly parent_schema: string;
|
|
160
|
+
readonly parent_table: string;
|
|
161
|
+
readonly parent_column: string;
|
|
162
|
+
readonly col_count: number | string;
|
|
163
|
+
}
|
|
164
|
+
/** Postgres identifier'ı çift tırnağa al (reserved keyword + case-sensitive korumalı). */
|
|
165
|
+
export declare function quoteIdent(name: string): string;
|
|
166
|
+
/** "schema.table" → "schema"."table" */
|
|
167
|
+
export declare function quoteQualified(qualified: string): string;
|
|
168
|
+
/** Step 3 — PROVISION SILO DB (idempotent: var ise atla). */
|
|
169
|
+
export declare function doProvisionSilo(ctx: OrchCtx, brand: BrandRow): Promise<PoolDbRow>;
|
|
170
|
+
/** Step 4 — SCHEMA MIGRATE: pool schema-only dump → silo restore. İdempotent. */
|
|
171
|
+
export declare function doSchemaMigrate(ctx: OrchCtx, pool: PoolDbRow, silo: PoolDbRow): Promise<{
|
|
172
|
+
ok: true;
|
|
173
|
+
}>;
|
|
174
|
+
/** Step 5 — MARK MIGRATING: cp_brands.status='migrating' (UI uyarısı). */
|
|
175
|
+
export declare function doMarkMigrating(ctx: OrchCtx, brand: BrandRow): Promise<{
|
|
176
|
+
status: string;
|
|
177
|
+
}>;
|
|
178
|
+
/**
|
|
179
|
+
* Step 6 — DATA MIGRATE (GERÇEK COPY pipe).
|
|
180
|
+
*
|
|
181
|
+
* Mustafa kilitleri:
|
|
182
|
+
* K1 — FK koruması: per-table COPY pipe iki tarafta da
|
|
183
|
+
* `SET session_replication_role = replica` ile çalışır
|
|
184
|
+
* (trigger + FK constraint suspend; PostgreSQL replication
|
|
185
|
+
* pattern'i, "data restore için güvenli"). Topolojik manifest
|
|
186
|
+
* sırası (parents→children) zaten doğru sırayı sağlıyor; replica
|
|
187
|
+
* mode "belt + suspenders" — composite veya cycle gibi nadir
|
|
188
|
+
* senaryolarda sessiz FK hatasını imkansızlaştırır.
|
|
189
|
+
* K3 — Sızıntı koruması: her COPY pool tarafı SELECT'inde manifest'in
|
|
190
|
+
* ürettiği EXPLICIT predicate'i taşır (kapalı RLS'e güvenme;
|
|
191
|
+
* statik discovery garantisi).
|
|
192
|
+
*
|
|
193
|
+
* İdempotency / resumability:
|
|
194
|
+
* - silo_count == pool_predicate_count → atla (resume).
|
|
195
|
+
* - silo_count == 0 → TRUNCATE skip, doğrudan COPY.
|
|
196
|
+
* - 0 < silo_count != pool_predicate_count → partial copy: TRUNCATE
|
|
197
|
+
* RESTART IDENTITY (silo yeni DB; CASCADE değil, downstream entry'ler
|
|
198
|
+
* manifest sırasında zaten ele alınacak) + COPY.
|
|
199
|
+
*
|
|
200
|
+
* Subprocess seçimi (Mustafa "sen seç + gerekçesini doc'a yaz"):
|
|
201
|
+
* psql subprocess pipe seçildi. Gerekçe: (a) mevcut altyapı CLI→SSH→
|
|
202
|
+
* docker exec; Node↔postgres direct connection mevcut değil (VPN ardı,
|
|
203
|
+
* credentials .env'de host-side). (b) pg-copy-streams ek Node bağımlı;
|
|
204
|
+
* credential + connection lifecycle managemnt overhead. (c) psql streaming
|
|
205
|
+
* pipe production-tested pattern (pg_dump | psql; pgBackRest internal).
|
|
206
|
+
* (d) Tek bağımlılık: docker + psql (zaten kurulu). (e) Hata yönetimi:
|
|
207
|
+
* pipefail + ON_ERROR_STOP=1 + exit code; stderr parse.
|
|
208
|
+
*
|
|
209
|
+
* Format: TEXT (default). BINARY daha hızlı ama type compatibility +
|
|
210
|
+
* version sensitivity riski; sentinel tatbikatı sonrası BINARY'ye geçiş
|
|
211
|
+
* düşünülebilir.
|
|
212
|
+
*/
|
|
213
|
+
export declare function doDataMigrate(ctx: OrchCtx, brand: BrandRow, manifest: TableEntry[], references: ReferenceEntry[], pool: PoolDbRow, silo: PoolDbRow): Promise<{
|
|
214
|
+
migrated: number;
|
|
215
|
+
skipped: number;
|
|
216
|
+
rows: number;
|
|
217
|
+
refsCopied: number;
|
|
218
|
+
refsRows: number;
|
|
219
|
+
}>;
|
|
220
|
+
/** Helper — pool tarafında `count(*) WHERE <entry.predicate>`. */
|
|
221
|
+
export declare function countWithPredicate(ctx: OrchCtx, dbName: string, t: TableEntry): Promise<number>;
|
|
222
|
+
/** Helper — `count(*) WHERE <where>` (silo tarafında `1=1` veya brand_id!=X). */
|
|
223
|
+
export declare function countWhere(ctx: OrchCtx, dbName: string, schema: string, table: string, where: string): Promise<number>;
|
|
224
|
+
/** Helper — silo'da partial copy artığı varsa temizle. */
|
|
225
|
+
export declare function truncateTable(ctx: OrchCtx, dbName: string, schema: string, table: string): Promise<void>;
|
|
226
|
+
/**
|
|
227
|
+
* Helper — pool'dan silo'ya bir tablonun WHERE-filtreli verisini COPY pipe ile
|
|
228
|
+
* taşı. psql subprocess pipe: pool TO STDOUT | silo FROM STDIN. session_
|
|
229
|
+
* replication_role=replica iki tarafta da (FK + trigger bypass).
|
|
230
|
+
*/
|
|
231
|
+
export declare function copyTableWithPredicate(ctx: OrchCtx, poolDb: string, siloDb: string, t: TableEntry): Promise<void>;
|
|
232
|
+
/**
|
|
233
|
+
* SQL string'ini docker exec bash -lc içinde tek-tırnak literal olarak güvenli
|
|
234
|
+
* geç. Bash double-quote escape değil — outer single-quote içinde inner
|
|
235
|
+
* single-quote'lara `'\''` ile çıkış yapıyoruz; tüm shq() pattern'iyle aynı.
|
|
236
|
+
*/
|
|
237
|
+
export declare function sshSqlArg(sql: string): string;
|
|
238
|
+
/**
|
|
239
|
+
* Step 7 — VERIFY (GERÇEK INV-1 cutover gate + K3 anti-sızıntı).
|
|
240
|
+
*
|
|
241
|
+
* Üç gate, her tablo için:
|
|
242
|
+
* 1. **COUNT eşitliği** (ZORUNLU): pool WHERE predicate == silo WHERE 1=1.
|
|
243
|
+
* 2. **CHECKSUM** (ölçeklenebilir): per-row md5 → string_agg ORDER BY pk →
|
|
244
|
+
* outer md5. PK yoksa checksum atlanır (uyarı + count-only fallback);
|
|
245
|
+
* sentinel tatbikatlı tablo şemalarında her tablonun PK'sı olmalı.
|
|
246
|
+
* Pragmatik MD5 seçimi: tek SELECT'le çalışır, postgres 9+; bit_xor
|
|
247
|
+
* modern (postgres 14+) ama version uyumluluğu için MD5 + string_agg
|
|
248
|
+
* seçildi. Büyük tablo (>~1M satır) → string_agg server-side bellek
|
|
249
|
+
* mertebesi MB; sentinel için sorun değil. Gerçek müşteri büyük
|
|
250
|
+
* tablolarda bit_xor opt M3.
|
|
251
|
+
* 3. **Anti-sızıntı** (K3, direct entry'lerde): silo WHERE brand_id != :b
|
|
252
|
+
* == 0. fk-only tablolarda brand_id yok → bu gate'i atla (parent
|
|
253
|
+
* predicate zaten sızıntıyı engelliyor).
|
|
254
|
+
*
|
|
255
|
+
* Herhangi biri FAIL → THROW (Step 8 atomic flip ÇALIŞMAZ; INV-1 koruması).
|
|
256
|
+
* Pool intakt (INV-2); silo forensic için kalır (operator inceleyip
|
|
257
|
+
* Faz 6.2 rollback ile temiz geri alabilir veya manuel fix).
|
|
258
|
+
*/
|
|
259
|
+
export declare function doVerify(ctx: OrchCtx, brand: BrandRow, manifest: TableEntry[], references: ReferenceEntry[], pool: PoolDbRow, silo: PoolDbRow): Promise<{
|
|
260
|
+
tables: number;
|
|
261
|
+
mismatches: number;
|
|
262
|
+
leakage: number;
|
|
263
|
+
checksumsSkipped: number;
|
|
264
|
+
orphans: number;
|
|
265
|
+
}>;
|
|
266
|
+
/**
|
|
267
|
+
* Silo'da FK dangling sayısı (INV-4).
|
|
268
|
+
*
|
|
269
|
+
* Akış: brand-scoped tabloların TÜM single-column FK'leri için
|
|
270
|
+
* SELECT count(*) FROM <child> WHERE <fk_col> IS NOT NULL
|
|
271
|
+
* AND NOT EXISTS (SELECT 1 FROM <parent> WHERE <pk> = <child>.<fk_col>)
|
|
272
|
+
* Reference tablolarını da kapsar (zaten silo'da olmaları gerek; eğer
|
|
273
|
+
* eksiksizse orphan = 0). Parent'ın silo'da varlığı şart değil — eğer
|
|
274
|
+
* yoksa NOT EXISTS true döner ve orphan artar.
|
|
275
|
+
*
|
|
276
|
+
* Composite FK'lar Step 2'de zaten ilk kolonla logged-warning + indirgendi;
|
|
277
|
+
* bu FK orphan check de ilk kolonu kontrol eder.
|
|
278
|
+
*/
|
|
279
|
+
export declare function checkFkOrphans(ctx: OrchCtx, dbName: string, manifest: TableEntry[]): Promise<number>;
|
|
280
|
+
/**
|
|
281
|
+
* Tabloda WHERE-filtreli md5 checksum hesapla.
|
|
282
|
+
* md5(coalesce(string_agg(md5(t::text), '' ORDER BY <pk>), ''))
|
|
283
|
+
* Sıralama: PK kolonları (deterministik). Empty result → empty-string md5
|
|
284
|
+
* (constant); pool == silo eşitliği boş tabloda da tutar.
|
|
285
|
+
*/
|
|
286
|
+
export declare function tableChecksum(ctx: OrchCtx, dbName: string, schema: string, table: string, where: string, orderBy: string): Promise<string>;
|
|
287
|
+
/**
|
|
288
|
+
* Tablonun PK kolonlarını sırayla döndür. PK yoksa boş array.
|
|
289
|
+
* pg_index.indisprimary + pg_attribute join.
|
|
290
|
+
*/
|
|
291
|
+
export declare function fetchPrimaryKeyColumns(ctx: OrchCtx, dbName: string, schema: string, table: string): Promise<string[]>;
|
|
292
|
+
/**
|
|
293
|
+
* Step 8 — REGISTRY FLIP (atomic single-txn).
|
|
294
|
+
*
|
|
295
|
+
* Insert silo into cp_databases AND update cp_brands tier+data_db_name
|
|
296
|
+
* in ONE transaction. INV-2: pool data UNTOUCHED.
|
|
297
|
+
*/
|
|
298
|
+
export declare function doRegistryFlip(ctx: OrchCtx, brand: BrandRow, silo: PoolDbRow): Promise<{
|
|
299
|
+
silo_id: string;
|
|
300
|
+
tier: string;
|
|
301
|
+
}>;
|
|
302
|
+
/**
|
|
303
|
+
* Step 9 — CACHE INVALIDATE + AUDIT END.
|
|
304
|
+
*
|
|
305
|
+
* In-process cache invalidate (TenantDbResolver::invalidate) PHP-side; CLI
|
|
306
|
+
* burada yalnız cp_audit_log'a tamamlanma kaydı düşer + finished_at güncel.
|
|
307
|
+
* Multi-instance Redis pub/sub M3 perf milestone.
|
|
308
|
+
*/
|
|
309
|
+
export declare function doCacheInvalidate(ctx: OrchCtx, brand: BrandRow): Promise<{
|
|
310
|
+
logged: true;
|
|
311
|
+
}>;
|
|
312
|
+
export declare function fetchPoolDb(ctx: OrchCtx): Promise<PoolDbRow>;
|
|
313
|
+
export declare function persistSteps(ctx: OrchCtx, status: 'running' | 'failed', err: string | null): Promise<void>;
|
|
314
|
+
export declare function currentStepIndex(ctx: OrchCtx): number;
|
|
315
|
+
export declare function blankSteps(n: number): StepState[];
|
|
316
|
+
export declare function shortHash(s: string): string;
|
|
317
|
+
export declare function sanitizeForJson(value: unknown): Record<string, unknown>;
|
|
318
|
+
export declare function resolveHost(alias: string | undefined): HostConfig;
|
|
319
|
+
export declare function sqlLit(s: string): string;
|
|
320
|
+
//# sourceMappingURL=promote-silo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promote-silo.d.ts","sourceRoot":"","sources":["../../../src/commands/db/promote-silo.ts"],"names":[],"mappings":"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"}
|