@runa-ai/runa-cli 0.5.62 → 0.5.63
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/dist/commands/ci/machine/actors/db/schema-stats.d.ts +37 -10
- package/dist/commands/ci/machine/actors/db/schema-stats.d.ts.map +1 -1
- package/dist/commands/ci/machine/actors/setup/pr-common.d.ts +3 -0
- package/dist/commands/ci/machine/actors/setup/pr-common.d.ts.map +1 -1
- package/dist/commands/ci/machine/formatters/github-comment-types.d.ts +3 -0
- package/dist/commands/ci/machine/formatters/github-comment-types.d.ts.map +1 -1
- package/dist/commands/ci/machine/formatters/github-comment.d.ts.map +1 -1
- package/dist/commands/ci/machine/formatters/sections/final-comment.d.ts.map +1 -1
- package/dist/commands/ci/machine/formatters/sections/schema-matrix.d.ts +6 -3
- package/dist/commands/ci/machine/formatters/sections/schema-matrix.d.ts.map +1 -1
- package/dist/commands/ci/machine/machine.d.ts.map +1 -1
- package/dist/commands/ci/machine/types.d.ts +4 -2
- package/dist/commands/ci/machine/types.d.ts.map +1 -1
- package/dist/commands/db/apply/actors.d.ts.map +1 -1
- package/dist/commands/db/commands/db-apply.d.ts.map +1 -1
- package/dist/index.js +181 -28
- package/package.json +2 -2
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*
|
|
17
17
|
* Statistics collected per schema:
|
|
18
18
|
* - Tables (T): Table count
|
|
19
|
-
* - Functions (F): Function count (excluding
|
|
19
|
+
* - Functions (F): Function count (excluding extension-owned and platform functions)
|
|
20
20
|
* - Policies (P): RLS policy count
|
|
21
21
|
* - Indexes (I): Index count (excluding auto-generated constraint indexes)
|
|
22
22
|
* - Triggers (Tr): Trigger count
|
|
@@ -25,15 +25,12 @@
|
|
|
25
25
|
* - All indexes backing constraints (detected via pg_constraint join)
|
|
26
26
|
* - This includes PRIMARY KEY, UNIQUE (single and multi-column), etc.
|
|
27
27
|
*
|
|
28
|
-
* Excluded from function count
|
|
29
|
-
* -
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* - supabase_* (
|
|
33
|
-
* - postgrest_* (
|
|
34
|
-
* - graphql_* (pg_graphql extension functions)
|
|
35
|
-
* - pgrst_* (PostgREST internal)
|
|
36
|
-
* - _pgrst_* (PostgREST internal)
|
|
28
|
+
* Excluded from function count:
|
|
29
|
+
* - Extension-owned functions (detected via pg_depend with deptype='e')
|
|
30
|
+
* This covers hstore, pg_trgm, plpgsql_check, pg_graphql, etc.
|
|
31
|
+
* regardless of which schema they are installed in.
|
|
32
|
+
* - Supabase platform functions: supabase_* (not extension-owned)
|
|
33
|
+
* - PostgREST platform functions: postgrest_*, pgrst_*, _pgrst_* (not extension-owned)
|
|
37
34
|
*/
|
|
38
35
|
/**
|
|
39
36
|
* Statistics for a single schema.
|
|
@@ -149,6 +146,36 @@ export declare function getStatsDiffDirection(stats: SchemaStats, reference: Sch
|
|
|
149
146
|
* Get the list of schema names that have objects.
|
|
150
147
|
*/
|
|
151
148
|
export declare function getActiveSchemas(stats: EnvironmentSchemaStats): string[];
|
|
149
|
+
/**
|
|
150
|
+
* Expected drift entry from runa.config.ts.
|
|
151
|
+
* When a stat field difference matches an entry, the diff is annotated
|
|
152
|
+
* as "known" instead of flagged as a warning.
|
|
153
|
+
*/
|
|
154
|
+
export interface ExpectedDriftEntry {
|
|
155
|
+
/** Which stat field has expected drift */
|
|
156
|
+
field: 'tables' | 'functions' | 'policies' | 'indexes' | 'triggers';
|
|
157
|
+
/** Schemas where drift is expected (undefined = all schemas) */
|
|
158
|
+
schemas?: string[];
|
|
159
|
+
/** Human-readable reason for the expected drift */
|
|
160
|
+
reason: string;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Check if a specific field diff for a schema is expected (known) drift.
|
|
164
|
+
*
|
|
165
|
+
* @param schemaName - Schema where the diff was detected
|
|
166
|
+
* @param fieldAbbrev - Field abbreviation ('T', 'F', 'P', 'I')
|
|
167
|
+
* @param expectedDrift - Expected drift entries from config
|
|
168
|
+
* @returns The matching entry with reason, or null if unexpected
|
|
169
|
+
*/
|
|
170
|
+
export declare function findExpectedDrift(schemaName: string, fieldAbbrev: string, expectedDrift: ExpectedDriftEntry[]): ExpectedDriftEntry | null;
|
|
171
|
+
/**
|
|
172
|
+
* Check if ALL field diffs for a schema are covered by expected drift.
|
|
173
|
+
*/
|
|
174
|
+
export declare function isAllDriftExpected(schemaName: string, fieldDiffs: FieldDiff[], expectedDrift: ExpectedDriftEntry[]): boolean;
|
|
175
|
+
/**
|
|
176
|
+
* Collect unique reasons from expected drift entries that match field diffs.
|
|
177
|
+
*/
|
|
178
|
+
export declare function collectExpectedDriftReasons(schemaName: string, fieldDiffs: FieldDiff[], expectedDrift: ExpectedDriftEntry[]): string[];
|
|
152
179
|
/**
|
|
153
180
|
* Result of comparing index lists between two environments.
|
|
154
181
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-stats.d.ts","sourceRoot":"","sources":["../../../../../../src/commands/ci/machine/actors/db/schema-stats.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"schema-stats.d.ts","sourceRoot":"","sources":["../../../../../../src/commands/ci/machine/actors/db/schema-stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* - resolvePolicy: Resolve CI policy from config or defaults
|
|
15
15
|
* - detectApp: Detect app configuration for E2E tests
|
|
16
16
|
*/
|
|
17
|
+
import type { ExpectedDriftEntry } from '../../actors/db/schema-stats.js';
|
|
17
18
|
import type { CiPrPolicy, DetectedApp, PrContext, RepoKind } from '../../types.js';
|
|
18
19
|
/**
|
|
19
20
|
* Input for resolving PR context (captured at entry point).
|
|
@@ -115,6 +116,7 @@ export interface PrSetupBaseOutput {
|
|
|
115
116
|
supabaseUrl: string;
|
|
116
117
|
anonKey: string;
|
|
117
118
|
layers: number[];
|
|
119
|
+
expectedDrift: ExpectedDriftEntry[];
|
|
118
120
|
error?: string;
|
|
119
121
|
}
|
|
120
122
|
/**
|
|
@@ -141,5 +143,6 @@ export declare function executePrSetupBase(input: PrSetupBaseInput, ensureTmpDir
|
|
|
141
143
|
policy: CiPrPolicy;
|
|
142
144
|
app: DetectedApp | null;
|
|
143
145
|
layers: number[];
|
|
146
|
+
expectedDrift: ExpectedDriftEntry[];
|
|
144
147
|
}>;
|
|
145
148
|
//# sourceMappingURL=pr-common.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-common.d.ts","sourceRoot":"","sources":["../../../../../../src/commands/ci/machine/actors/setup/pr-common.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CAWjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,GAAG,UAAU,CAQ/E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAmBzD;AAqND;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,iBAAiB,GACjC,WAAW,GAAG,IAAI,CAwCpB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAcrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMxF;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,EAC3D,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,
|
|
1
|
+
{"version":3,"file":"pr-common.d.ts","sourceRoot":"","sources":["../../../../../../src/commands/ci/machine/actors/setup/pr-common.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Purpose: Shared types for GitHub PR comment generation
|
|
5
5
|
* Extracted from: github-comment.ts for better code organization
|
|
6
6
|
*/
|
|
7
|
+
import type { ExpectedDriftEntry } from '../actors/db/schema-stats.js';
|
|
7
8
|
import type { LayerResult, PrContext, ProductionPreview, SchemaDriftSnapshot, SchemaStatsSnapshot, SupabaseConnection } from '../types.js';
|
|
8
9
|
/**
|
|
9
10
|
* CI step definition for progress tracking.
|
|
@@ -42,6 +43,8 @@ export interface CommentInput {
|
|
|
42
43
|
layerSkipReasons?: Record<number, string>;
|
|
43
44
|
/** Originally selected layers (before filtering by content) */
|
|
44
45
|
originalSelectedLayers?: number[];
|
|
46
|
+
/** Expected drift entries from runa.config.ts for annotating known diffs */
|
|
47
|
+
expectedDrift?: ExpectedDriftEntry[];
|
|
45
48
|
}
|
|
46
49
|
/**
|
|
47
50
|
* Input for progress comment generation.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-comment-types.d.ts","sourceRoot":"","sources":["../../../../../src/commands/ci/machine/formatters/github-comment-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,MAAM,MAAM,MAAM,GACd,OAAO,GACP,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,OAAO,GACP,UAAU,GACV,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAM1D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1C,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C,WAAW,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACxC,sFAAsF;IACtF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gDAAgD;IAChD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,+DAA+D;IAC/D,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"github-comment-types.d.ts","sourceRoot":"","sources":["../../../../../src/commands/ci/machine/formatters/github-comment-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-comment.d.ts","sourceRoot":"","sources":["../../../../../src/commands/ci/machine/formatters/github-comment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,oBAAoB,EACpB,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAGnC,YAAY,EACV,MAAM,EACN,oBAAoB,EACpB,QAAQ,EACR,UAAU,EACV,WAAW,GACZ,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,YAAY,GACb,MAAM,qBAAqB,CAAC;AAM7B;;GAEG;AACH,UAAU,0BAA0B;IAClC,sFAAsF;IACtF,cAAc,EAAE,IAAI,CAAC;IACrB,gDAAgD;IAChD,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE,0BAA0B,GACnC,YAAY,
|
|
1
|
+
{"version":3,"file":"github-comment.d.ts","sourceRoot":"","sources":["../../../../../src/commands/ci/machine/formatters/github-comment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,oBAAoB,EACpB,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAGnC,YAAY,EACV,MAAM,EACN,oBAAoB,EACpB,QAAQ,EACR,UAAU,EACV,WAAW,GACZ,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,YAAY,GACb,MAAM,qBAAqB,CAAC;AAM7B;;GAEG;AACH,UAAU,0BAA0B;IAClC,sFAAsF;IACtF,cAAc,EAAE,IAAI,CAAC;IACrB,gDAAgD;IAChD,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE,0BAA0B,GACnC,YAAY,CAsBd;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,EAClB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EAAE,EACxB,UAAU,GAAE,MAAM,GAAG,IAAW,EAChC,WAAW,CAAC,EAAE,WAAW,GACxB,oBAAoB,CActB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"final-comment.d.ts","sourceRoot":"","sources":["../../../../../../src/commands/ci/machine/formatters/sections/final-comment.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAgS1E;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAMxC;AAkDD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"final-comment.d.ts","sourceRoot":"","sources":["../../../../../../src/commands/ci/machine/formatters/sections/final-comment.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAgS1E;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAMxC;AAkDD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CA+C/D"}
|
|
@@ -10,17 +10,20 @@
|
|
|
10
10
|
* | accounts | 5T 3F 12P 3I | 5T 3F 12P 3I | 📝 5T 3F 12P **2I** |
|
|
11
11
|
*
|
|
12
12
|
* Diff highlighting:
|
|
13
|
-
* - ⚠️ = CI differs from Local (SSOT)
|
|
13
|
+
* - ⚠️ = CI differs from Local (SSOT) - unexpected
|
|
14
14
|
* - 📝 = Prod differs from Local (schema changes pending)
|
|
15
|
+
* - 📋 = Known drift (matches expectedDrift config)
|
|
15
16
|
* - **bold** = specific field that differs
|
|
16
17
|
*/
|
|
18
|
+
import { type ExpectedDriftEntry } from '../../actors/db/schema-stats.js';
|
|
17
19
|
import type { SchemaGitDiff, SchemaStatsSnapshot } from '../../types.js';
|
|
18
20
|
/**
|
|
19
21
|
* Format schema statistics as a hybrid matrix table.
|
|
20
22
|
*
|
|
21
|
-
* Main table: Schema
|
|
23
|
+
* Main table: Schema x Environment with T (Tables), F (Functions), P (Policies)
|
|
22
24
|
* Summary line: All types including I (Indexes), Tr (Triggers)
|
|
23
25
|
* Index diff: Shows which specific indexes are missing/extra in Production
|
|
26
|
+
* Expected drift: Annotates known diffs with 📋 instead of 📝
|
|
24
27
|
*/
|
|
25
|
-
export declare function formatSchemaMatrix(schemaStats: SchemaStatsSnapshot | null, gitDiff: SchemaGitDiff | null): string[];
|
|
28
|
+
export declare function formatSchemaMatrix(schemaStats: SchemaStatsSnapshot | null, gitDiff: SchemaGitDiff | null, expectedDrift?: ExpectedDriftEntry[]): string[];
|
|
26
29
|
//# sourceMappingURL=schema-matrix.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-matrix.d.ts","sourceRoot":"","sources":["../../../../../../src/commands/ci/machine/formatters/sections/schema-matrix.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"schema-matrix.d.ts","sourceRoot":"","sources":["../../../../../../src/commands/ci/machine/formatters/sections/schema-matrix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAYL,KAAK,kBAAkB,EAExB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AA2OzE;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,mBAAmB,GAAG,IAAI,EACvC,OAAO,EAAE,aAAa,GAAG,IAAI,EAC7B,aAAa,GAAE,kBAAkB,EAAO,GACvC,MAAM,EAAE,CA0DV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../../../src/commands/ci/machine/machine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,EAAU,KAAK,YAAY,EAAS,MAAM,QAAQ,CAAC;AAkD1D,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAqB,MAAM,YAAY,CAAC;AAexE,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../../../src/commands/ci/machine/machine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,EAAU,KAAK,YAAY,EAAS,MAAM,QAAQ,CAAC;AAkD1D,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAqB,MAAM,YAAY,CAAC;AAexE,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAulCpB,CAAC;AAMH,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AACzC,MAAM,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,SAAS,CAAC,CAAC;AAMxD;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAExD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAE5D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAE3D"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* - types.ts: Re-exports + machine-specific types (CiContext, CiEvent)
|
|
14
14
|
*/
|
|
15
15
|
import type { CiSummary } from '../utils/ci-summary.js';
|
|
16
|
-
import type { SchemaStatsSnapshot } from './actors/db/schema-stats.js';
|
|
16
|
+
import type { ExpectedDriftEntry, SchemaStatsSnapshot } from './actors/db/schema-stats.js';
|
|
17
17
|
import type { CiDbMode as _CiDbMode, CiExecutionEnv as _CiExecutionEnv, CiInput as _CiInput, CiMode as _CiMode, CiOutput as _CiOutput, CiPhase as _CiPhase, CiPrPolicy as _CiPrPolicy, DetectedApp as _DetectedApp, LayerSummary as _LayerResult, LayerStatus as _LayerStatus, PrContext as _PrContext, RepoKind as _RepoKind, StepSummary as _StepResult, StepStatus as _StepStatus, SupabaseConnection as _SupabaseConnection } from './contract.js';
|
|
18
18
|
export type CiMode = _CiMode;
|
|
19
19
|
export type CiExecutionEnv = _CiExecutionEnv;
|
|
@@ -30,7 +30,7 @@ export type CiPrPolicy = _CiPrPolicy;
|
|
|
30
30
|
export type SupabaseConnection = _SupabaseConnection;
|
|
31
31
|
export type StepResult = _StepResult;
|
|
32
32
|
export type LayerResult = _LayerResult;
|
|
33
|
-
export type { SchemaStatsSnapshot } from './actors/db/schema-stats.js';
|
|
33
|
+
export type { ExpectedDriftEntry, SchemaStatsSnapshot } from './actors/db/schema-stats.js';
|
|
34
34
|
/**
|
|
35
35
|
* Schema change statistics extracted from SQL diff.
|
|
36
36
|
*/
|
|
@@ -193,6 +193,8 @@ export interface CiContext {
|
|
|
193
193
|
productionPreview: ProductionPreview | null;
|
|
194
194
|
/** Schema statistics snapshot (Local/CI/Prod comparison) */
|
|
195
195
|
schemaStats: SchemaStatsSnapshot | null;
|
|
196
|
+
/** Expected drift entries from runa.config.ts */
|
|
197
|
+
expectedDrift: ExpectedDriftEntry[];
|
|
196
198
|
/** Start time */
|
|
197
199
|
startTime: number;
|
|
198
200
|
/** Duration in milliseconds */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/commands/ci/machine/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/commands/ci/machine/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actors.d.ts","sourceRoot":"","sources":["../../../../src/commands/db/apply/actors.ts"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAgFlD,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA2yBD;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB;WAExB,YAAY;eAAa,MAAM;UAAQ,KAAK,GAAG,MAAM;gCA+C9D,CAAC;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB;WAEnB,YAAY;eAAa,MAAM;gCAmHxC,CAAC;
|
|
1
|
+
{"version":3,"file":"actors.d.ts","sourceRoot":"","sources":["../../../../src/commands/db/apply/actors.ts"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAgFlD,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA2yBD;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB;WAExB,YAAY;eAAa,MAAM;UAAQ,KAAK,GAAG,MAAM;gCA+C9D,CAAC;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB;WAEnB,YAAY;eAAa,MAAM;gCAmHxC,CAAC;AAkCH;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;cACjB,MAAM,EAAE;;WACX,YAAY;eAAa,MAAM;gCAwBxC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU;aACV,OAAO;;WACT,YAAY;eAAa,MAAM;gCAmExC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-apply.d.ts","sourceRoot":"","sources":["../../../../src/commands/db/commands/db-apply.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"db-apply.d.ts","sourceRoot":"","sources":["../../../../src/commands/db/commands/db-apply.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2NpC;;GAEG;AACH,eAAO,MAAM,YAAY,SAsDrB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1161,7 +1161,7 @@ var CLI_VERSION, HAS_ADMIN_COMMAND;
|
|
|
1161
1161
|
var init_version = __esm({
|
|
1162
1162
|
"src/version.ts"() {
|
|
1163
1163
|
init_esm_shims();
|
|
1164
|
-
CLI_VERSION = "0.5.
|
|
1164
|
+
CLI_VERSION = "0.5.63";
|
|
1165
1165
|
HAS_ADMIN_COMMAND = false;
|
|
1166
1166
|
}
|
|
1167
1167
|
});
|
|
@@ -8069,6 +8069,7 @@ function createErrorOutput(repoRoot, error, extraFields) {
|
|
|
8069
8069
|
supabaseUrl: "",
|
|
8070
8070
|
anonKey: "",
|
|
8071
8071
|
layers: [],
|
|
8072
|
+
expectedDrift: [],
|
|
8072
8073
|
error: error instanceof Error ? error.message : String(error)
|
|
8073
8074
|
};
|
|
8074
8075
|
return { ...baseError, ...extraFields };
|
|
@@ -8092,7 +8093,9 @@ async function executePrSetupBase(input3, ensureTmpDir) {
|
|
|
8092
8093
|
} : void 0;
|
|
8093
8094
|
const app = detectApp(repoRoot, appConfigOverride);
|
|
8094
8095
|
const layers = input3.layers || [1, 2, 3, 4];
|
|
8095
|
-
|
|
8096
|
+
const rawDrift = configResult?.config?.database?.pgSchemaDiff?.expectedDrift;
|
|
8097
|
+
const expectedDrift = rawDrift ? rawDrift : [];
|
|
8098
|
+
return { repoRoot, tmpDir, repoKind, prContext, policy, app, layers, expectedDrift };
|
|
8096
8099
|
}
|
|
8097
8100
|
|
|
8098
8101
|
// src/commands/ci/utils/app-runtime.ts
|
|
@@ -12208,23 +12211,19 @@ async function executeSchemaQueries(sql, schemaList, schemas, total) {
|
|
|
12208
12211
|
FROM pg_proc p
|
|
12209
12212
|
JOIN pg_namespace n ON p.pronamespace = n.oid
|
|
12210
12213
|
WHERE n.nspname IN (${sql.unsafe(schemaList)})
|
|
12211
|
-
|
|
12212
|
-
|
|
12213
|
-
|
|
12214
|
-
|
|
12215
|
-
|
|
12216
|
-
|
|
12217
|
-
|
|
12218
|
-
|
|
12219
|
-
-- Supabase internal functions
|
|
12214
|
+
AND p.prokind = 'f'
|
|
12215
|
+
-- Exclude extension-owned functions via pg_depend (covers all extensions)
|
|
12216
|
+
AND NOT EXISTS (
|
|
12217
|
+
SELECT 1 FROM pg_depend d
|
|
12218
|
+
WHERE d.objid = p.oid
|
|
12219
|
+
AND d.deptype = 'e'
|
|
12220
|
+
)
|
|
12221
|
+
-- Supabase platform functions (not extension-owned, created by platform migrations)
|
|
12220
12222
|
AND p.proname NOT LIKE 'supabase_%'
|
|
12221
|
-
-- PostgREST
|
|
12223
|
+
-- PostgREST platform functions (not extension-owned)
|
|
12222
12224
|
AND p.proname NOT LIKE 'postgrest_%'
|
|
12223
12225
|
AND p.proname NOT LIKE 'pgrst_%'
|
|
12224
12226
|
AND p.proname NOT LIKE '_pgrst_%'
|
|
12225
|
-
-- pg_graphql extension functions (if installed in target schema)
|
|
12226
|
-
AND p.proname NOT LIKE 'graphql_%'
|
|
12227
|
-
AND p.prokind = 'f'
|
|
12228
12227
|
GROUP BY n.nspname
|
|
12229
12228
|
`;
|
|
12230
12229
|
processQueryResult(functionsResult, schemas, total, "functions");
|
|
@@ -12376,9 +12375,73 @@ function formatTotalStatsCompact(stats) {
|
|
|
12376
12375
|
function hasDisplayedStatsDiff(a, b) {
|
|
12377
12376
|
return a.tables !== b.tables || a.functions !== b.functions || a.policies !== b.policies || a.indexes !== b.indexes;
|
|
12378
12377
|
}
|
|
12378
|
+
function getFieldDiffs(stats, reference) {
|
|
12379
|
+
const diffs = [];
|
|
12380
|
+
if (stats.tables !== reference.tables) {
|
|
12381
|
+
diffs.push({
|
|
12382
|
+
field: "T",
|
|
12383
|
+
value: stats.tables,
|
|
12384
|
+
reference: reference.tables,
|
|
12385
|
+
delta: stats.tables - reference.tables
|
|
12386
|
+
});
|
|
12387
|
+
}
|
|
12388
|
+
if (stats.functions !== reference.functions) {
|
|
12389
|
+
diffs.push({
|
|
12390
|
+
field: "F",
|
|
12391
|
+
value: stats.functions,
|
|
12392
|
+
reference: reference.functions,
|
|
12393
|
+
delta: stats.functions - reference.functions
|
|
12394
|
+
});
|
|
12395
|
+
}
|
|
12396
|
+
if (stats.policies !== reference.policies) {
|
|
12397
|
+
diffs.push({
|
|
12398
|
+
field: "P",
|
|
12399
|
+
value: stats.policies,
|
|
12400
|
+
reference: reference.policies,
|
|
12401
|
+
delta: stats.policies - reference.policies
|
|
12402
|
+
});
|
|
12403
|
+
}
|
|
12404
|
+
if (stats.indexes !== reference.indexes) {
|
|
12405
|
+
diffs.push({
|
|
12406
|
+
field: "I",
|
|
12407
|
+
value: stats.indexes,
|
|
12408
|
+
reference: reference.indexes,
|
|
12409
|
+
delta: stats.indexes - reference.indexes
|
|
12410
|
+
});
|
|
12411
|
+
}
|
|
12412
|
+
return diffs;
|
|
12413
|
+
}
|
|
12379
12414
|
function getActiveSchemas(stats) {
|
|
12380
12415
|
return Object.entries(stats.schemas).filter(([_, s]) => s.tables > 0 || s.functions > 0 || s.policies > 0).map(([name]) => name).sort();
|
|
12381
12416
|
}
|
|
12417
|
+
var FIELD_ABBREV_TO_NAME = {
|
|
12418
|
+
T: "tables",
|
|
12419
|
+
F: "functions",
|
|
12420
|
+
P: "policies",
|
|
12421
|
+
I: "indexes"
|
|
12422
|
+
};
|
|
12423
|
+
function findExpectedDrift(schemaName, fieldAbbrev, expectedDrift) {
|
|
12424
|
+
const fieldName = FIELD_ABBREV_TO_NAME[fieldAbbrev];
|
|
12425
|
+
if (!fieldName) return null;
|
|
12426
|
+
return expectedDrift.find(
|
|
12427
|
+
(entry) => entry.field === fieldName && (entry.schemas === void 0 || entry.schemas.includes(schemaName))
|
|
12428
|
+
) ?? null;
|
|
12429
|
+
}
|
|
12430
|
+
function isAllDriftExpected(schemaName, fieldDiffs, expectedDrift) {
|
|
12431
|
+
return fieldDiffs.every(
|
|
12432
|
+
(diff) => findExpectedDrift(schemaName, diff.field, expectedDrift) !== null
|
|
12433
|
+
);
|
|
12434
|
+
}
|
|
12435
|
+
function collectExpectedDriftReasons(schemaName, fieldDiffs, expectedDrift) {
|
|
12436
|
+
const reasons = /* @__PURE__ */ new Set();
|
|
12437
|
+
for (const diff of fieldDiffs) {
|
|
12438
|
+
const entry = findExpectedDrift(schemaName, diff.field, expectedDrift);
|
|
12439
|
+
if (entry) {
|
|
12440
|
+
reasons.add(entry.reason);
|
|
12441
|
+
}
|
|
12442
|
+
}
|
|
12443
|
+
return Array.from(reasons);
|
|
12444
|
+
}
|
|
12382
12445
|
function compareIndexLists(reference, target) {
|
|
12383
12446
|
const refIndexes = reference.indexList || [];
|
|
12384
12447
|
const targetIndexes = target.indexList || [];
|
|
@@ -14625,11 +14688,14 @@ function formatCiCellWithDiff(stats, reference) {
|
|
|
14625
14688
|
}
|
|
14626
14689
|
return formatSchemaStatsCompact(stats, true);
|
|
14627
14690
|
}
|
|
14628
|
-
function formatProdCellWithDiff(stats, reference) {
|
|
14629
|
-
if (hasDisplayedStatsDiff(stats, reference)) {
|
|
14630
|
-
return
|
|
14691
|
+
function formatProdCellWithDiff(stats, reference, schemaName, expectedDrift) {
|
|
14692
|
+
if (!hasDisplayedStatsDiff(stats, reference)) {
|
|
14693
|
+
return formatSchemaStatsCompact(stats, true);
|
|
14631
14694
|
}
|
|
14632
|
-
|
|
14695
|
+
const fieldDiffs = getFieldDiffs(stats, reference);
|
|
14696
|
+
const allExpected = expectedDrift.length > 0 && isAllDriftExpected(schemaName, fieldDiffs, expectedDrift);
|
|
14697
|
+
const marker = allExpected ? "\u{1F4CB}" : "\u{1F4DD}";
|
|
14698
|
+
return `${marker} ${formatSchemaStatsWithDiff(stats, reference)}`;
|
|
14633
14699
|
}
|
|
14634
14700
|
function formatCiTotalCellWithDiff(stats, reference) {
|
|
14635
14701
|
const formatted = formatSchemaStatsCompact(stats, true);
|
|
@@ -14657,7 +14723,7 @@ function getSortedActiveSchemas(schemaStats) {
|
|
|
14657
14723
|
return a.localeCompare(b);
|
|
14658
14724
|
});
|
|
14659
14725
|
}
|
|
14660
|
-
function generateSchemaTableRows(schemaStats, sortedSchemas, hasProduction) {
|
|
14726
|
+
function generateSchemaTableRows(schemaStats, sortedSchemas, hasProduction, expectedDrift) {
|
|
14661
14727
|
const lines = [];
|
|
14662
14728
|
for (const schemaName of sortedSchemas) {
|
|
14663
14729
|
const localStats = schemaStats.local.schemas[schemaName] ?? emptyStats2();
|
|
@@ -14665,7 +14731,7 @@ function generateSchemaTableRows(schemaStats, sortedSchemas, hasProduction) {
|
|
|
14665
14731
|
const prodStats = schemaStats.production?.schemas[schemaName] ?? null;
|
|
14666
14732
|
const localCell = formatLocalCell(localStats);
|
|
14667
14733
|
const ciCell = formatCiCellWithDiff(ciStats, localStats);
|
|
14668
|
-
const prodCell = prodStats !== null ? formatProdCellWithDiff(prodStats, localStats) : null;
|
|
14734
|
+
const prodCell = prodStats !== null ? formatProdCellWithDiff(prodStats, localStats, schemaName, expectedDrift) : null;
|
|
14669
14735
|
lines.push(
|
|
14670
14736
|
hasProduction ? `| ${schemaName} | ${localCell} | ${ciCell} | ${prodCell ?? "n/a"} |` : `| ${schemaName} | ${localCell} | ${ciCell} |`
|
|
14671
14737
|
);
|
|
@@ -14707,7 +14773,28 @@ function generateIndexDiffSection(schemaStats) {
|
|
|
14707
14773
|
}
|
|
14708
14774
|
return lines;
|
|
14709
14775
|
}
|
|
14710
|
-
function
|
|
14776
|
+
function generateExpectedDriftFootnotes(schemaStats, sortedSchemas, expectedDrift) {
|
|
14777
|
+
if (expectedDrift.length === 0 || !schemaStats.production) return [];
|
|
14778
|
+
const allReasons = /* @__PURE__ */ new Set();
|
|
14779
|
+
for (const schemaName of sortedSchemas) {
|
|
14780
|
+
const localStats = schemaStats.local.schemas[schemaName] ?? emptyStats2();
|
|
14781
|
+
const prodStats = schemaStats.production.schemas[schemaName];
|
|
14782
|
+
if (!prodStats || !hasDisplayedStatsDiff(prodStats, localStats)) continue;
|
|
14783
|
+
const fieldDiffs = getFieldDiffs(prodStats, localStats);
|
|
14784
|
+
const reasons = collectExpectedDriftReasons(schemaName, fieldDiffs, expectedDrift);
|
|
14785
|
+
for (const reason of reasons) {
|
|
14786
|
+
allReasons.add(reason);
|
|
14787
|
+
}
|
|
14788
|
+
}
|
|
14789
|
+
if (allReasons.size === 0) return [];
|
|
14790
|
+
const lines = [""];
|
|
14791
|
+
lines.push("> \u{1F4CB} **\u65E2\u77E5\u306E\u5DEE\u5206:**");
|
|
14792
|
+
for (const reason of allReasons) {
|
|
14793
|
+
lines.push(`> - ${reason}`);
|
|
14794
|
+
}
|
|
14795
|
+
return lines;
|
|
14796
|
+
}
|
|
14797
|
+
function formatSchemaMatrix(schemaStats, gitDiff, expectedDrift = []) {
|
|
14711
14798
|
if (!schemaStats) {
|
|
14712
14799
|
return ["### \u30B9\u30AD\u30FC\u30DE\u72B6\u6CC1", "", "_\u30B9\u30AD\u30FC\u30DE\u7D71\u8A08\u60C5\u5831\u304C\u5229\u7528\u3067\u304D\u307E\u305B\u3093_", ""];
|
|
14713
14800
|
}
|
|
@@ -14719,7 +14806,7 @@ function formatSchemaMatrix(schemaStats, gitDiff) {
|
|
|
14719
14806
|
}
|
|
14720
14807
|
const hasProduction = schemaStats.production !== null;
|
|
14721
14808
|
const tableHeader = hasProduction ? ["| Schema | \u{1F4C4} Local | \u{1F52C} CI | \u{1F3ED} Prod |", "|--------|:--------:|:-----:|:-------:|"] : ["| Schema | \u{1F4C4} Local | \u{1F52C} CI |", "|--------|:--------:|:-----:|"];
|
|
14722
|
-
const rows = generateSchemaTableRows(schemaStats, sortedSchemas, hasProduction);
|
|
14809
|
+
const rows = generateSchemaTableRows(schemaStats, sortedSchemas, hasProduction, expectedDrift);
|
|
14723
14810
|
const { local, ci, production } = schemaStats;
|
|
14724
14811
|
const localTotalCell = `**${formatSchemaStatsCompact(local.total, true)}**`;
|
|
14725
14812
|
const ciTotalCell = formatCiTotalCellWithDiff(ci.total, local.total);
|
|
@@ -14727,6 +14814,11 @@ function formatSchemaMatrix(schemaStats, gitDiff) {
|
|
|
14727
14814
|
const totalRow = hasProduction ? `| **Total** | ${localTotalCell} | ${ciTotalCell} | ${prodTotalCell ?? "n/a"} |` : `| **Total** | ${localTotalCell} | ${ciTotalCell} |`;
|
|
14728
14815
|
const summary = generateSchemaMatrixSummary(local.total, ci.total, production?.total ?? null);
|
|
14729
14816
|
const indexDiffSection = generateIndexDiffSection(schemaStats);
|
|
14817
|
+
const expectedDriftNotes = generateExpectedDriftFootnotes(
|
|
14818
|
+
schemaStats,
|
|
14819
|
+
sortedSchemas,
|
|
14820
|
+
expectedDrift
|
|
14821
|
+
);
|
|
14730
14822
|
return [
|
|
14731
14823
|
header,
|
|
14732
14824
|
"",
|
|
@@ -14736,6 +14828,7 @@ function formatSchemaMatrix(schemaStats, gitDiff) {
|
|
|
14736
14828
|
"",
|
|
14737
14829
|
summary,
|
|
14738
14830
|
...indexDiffSection,
|
|
14831
|
+
...expectedDriftNotes,
|
|
14739
14832
|
"",
|
|
14740
14833
|
"<sub>T=\u30C6\u30FC\u30D6\u30EB F=\u95A2\u6570 P=\u30DD\u30EA\u30B7\u30FC I=\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9 Tr=\u30C8\u30EA\u30AC\u30FC</sub>",
|
|
14741
14834
|
""
|
|
@@ -14958,7 +15051,11 @@ function generateCommentBody(input3) {
|
|
|
14958
15051
|
...generateFinalHeader(exitCode, effectiveBranchName, supabaseUrl, schemaDrift, runUrl),
|
|
14959
15052
|
...layerLines.length > 0 ? ["### \u30C6\u30B9\u30C8\u7D50\u679C", ...layerLines, ""] : [],
|
|
14960
15053
|
...skippedLayersLines,
|
|
14961
|
-
...formatSchemaMatrix(
|
|
15054
|
+
...formatSchemaMatrix(
|
|
15055
|
+
input3.schemaStats,
|
|
15056
|
+
schemaDrift?.gitDiff ?? null,
|
|
15057
|
+
input3.expectedDrift ?? []
|
|
15058
|
+
),
|
|
14962
15059
|
...generateSchemaDetailsSection(schemaDrift),
|
|
14963
15060
|
...generateDeploySection(
|
|
14964
15061
|
exitCode,
|
|
@@ -15334,6 +15431,7 @@ function createCommentInput(context, options) {
|
|
|
15334
15431
|
layerResults: context.layerResults,
|
|
15335
15432
|
productionPreview: context.productionPreview,
|
|
15336
15433
|
schemaStats: context.schemaStats,
|
|
15434
|
+
expectedDrift: context.expectedDrift,
|
|
15337
15435
|
isIntermediate: options?.isIntermediate,
|
|
15338
15436
|
intermediateMessage: options?.intermediateMessage,
|
|
15339
15437
|
layerSkipReasons: context.layerSkipReasons,
|
|
@@ -15566,6 +15664,7 @@ function createInitialContext(input3) {
|
|
|
15566
15664
|
schemaDrift: null,
|
|
15567
15665
|
productionPreview: null,
|
|
15568
15666
|
schemaStats: null,
|
|
15667
|
+
expectedDrift: [],
|
|
15569
15668
|
startTime: Date.now(),
|
|
15570
15669
|
durationMs: 0,
|
|
15571
15670
|
error: null,
|
|
@@ -15772,6 +15871,7 @@ var ciMachine = setup({
|
|
|
15772
15871
|
appDatabaseUrl: void 0
|
|
15773
15872
|
}),
|
|
15774
15873
|
selectedLayers: ({ event }) => event.output.layers,
|
|
15874
|
+
expectedDrift: ({ event }) => event.output.expectedDrift ?? [],
|
|
15775
15875
|
error: ({ event }) => event.output.error ?? null
|
|
15776
15876
|
})
|
|
15777
15877
|
},
|
|
@@ -20806,6 +20906,23 @@ ${content}`;
|
|
|
20806
20906
|
}
|
|
20807
20907
|
}
|
|
20808
20908
|
});
|
|
20909
|
+
var DESTRUCTIVE_SEED_PATTERNS = [
|
|
20910
|
+
{ pattern: /\bDELETE\s+FROM\b/i, description: "DELETE FROM" },
|
|
20911
|
+
{ pattern: /\bTRUNCATE\b/i, description: "TRUNCATE" },
|
|
20912
|
+
{ pattern: /\bDROP\s+TABLE\b/i, description: "DROP TABLE" },
|
|
20913
|
+
{ pattern: /\bDROP\s+SCHEMA\b/i, description: "DROP SCHEMA" }
|
|
20914
|
+
];
|
|
20915
|
+
function detectDestructiveSeedPatterns(seedFilePath) {
|
|
20916
|
+
const content = readFileSync(seedFilePath, "utf-8");
|
|
20917
|
+
const detected = [];
|
|
20918
|
+
for (const { pattern, description } of DESTRUCTIVE_SEED_PATTERNS) {
|
|
20919
|
+
pattern.lastIndex = 0;
|
|
20920
|
+
if (pattern.test(content)) {
|
|
20921
|
+
detected.push(description);
|
|
20922
|
+
}
|
|
20923
|
+
}
|
|
20924
|
+
return detected;
|
|
20925
|
+
}
|
|
20809
20926
|
var validatePartitions = fromPromise(async ({ input: { input: input3, targetDir } }) => {
|
|
20810
20927
|
if (input3.check) return { warnings: [] };
|
|
20811
20928
|
const idempotentDir = join(targetDir, "supabase/schemas/idempotent");
|
|
@@ -20830,6 +20947,18 @@ var applySeeds = fromPromise(async ({ input: { input: input3, targetDir } }) =>
|
|
|
20830
20947
|
if (!input3.noSeed) {
|
|
20831
20948
|
const seedFile = join(targetDir, "supabase/seeds/ci.sql");
|
|
20832
20949
|
if (existsSync(seedFile)) {
|
|
20950
|
+
if (input3.env === "production") {
|
|
20951
|
+
const destructivePatterns = detectDestructiveSeedPatterns(seedFile);
|
|
20952
|
+
if (destructivePatterns.length > 0) {
|
|
20953
|
+
logger6.warn("");
|
|
20954
|
+
logger6.warn("\u26A0\uFE0F DANGER: Seed file contains destructive SQL for PRODUCTION");
|
|
20955
|
+
logger6.warn(` Detected: ${destructivePatterns.join(", ")}`);
|
|
20956
|
+
logger6.warn(" This WILL delete real user data. Aborting seed application.");
|
|
20957
|
+
logger6.warn(" If this is intentional, review and apply seeds manually.");
|
|
20958
|
+
logger6.warn("");
|
|
20959
|
+
return { applied: false };
|
|
20960
|
+
}
|
|
20961
|
+
}
|
|
20833
20962
|
logger6.step("Applying seeds...");
|
|
20834
20963
|
const result = psqlSyncFile({
|
|
20835
20964
|
databaseUrl: dbUrl,
|
|
@@ -21273,6 +21402,11 @@ function isDbApplyComplete(snapshot2) {
|
|
|
21273
21402
|
}
|
|
21274
21403
|
|
|
21275
21404
|
// src/commands/db/commands/db-apply.ts
|
|
21405
|
+
function resolveNoSeed(env2, seedFlag) {
|
|
21406
|
+
if (seedFlag === true) return false;
|
|
21407
|
+
if (seedFlag === false) return true;
|
|
21408
|
+
return env2 === "production";
|
|
21409
|
+
}
|
|
21276
21410
|
function logStateChange(logger16, snapshot2) {
|
|
21277
21411
|
const state2 = getDbApplyStateName(snapshot2);
|
|
21278
21412
|
switch (state2) {
|
|
@@ -21290,12 +21424,30 @@ function logStateChange(logger16, snapshot2) {
|
|
|
21290
21424
|
break;
|
|
21291
21425
|
}
|
|
21292
21426
|
}
|
|
21427
|
+
function describeSeedStatus(env2, noSeed, seedFlag) {
|
|
21428
|
+
if (env2 === "production") {
|
|
21429
|
+
if (seedFlag === true) return "enabled (--seed)";
|
|
21430
|
+
if (seedFlag === false) return "disabled (--no-seed)";
|
|
21431
|
+
return "disabled (production default)";
|
|
21432
|
+
}
|
|
21433
|
+
if (seedFlag === false) return "disabled (--no-seed)";
|
|
21434
|
+
return "enabled";
|
|
21435
|
+
}
|
|
21293
21436
|
async function runDbApply(env2, options) {
|
|
21294
21437
|
const logger16 = createCLILogger("db:apply");
|
|
21438
|
+
const resolvedEnv = env2 === "preview" ? "preview" : env2 === "production" ? "production" : "local";
|
|
21439
|
+
const noSeed = resolveNoSeed(resolvedEnv, options.seed);
|
|
21440
|
+
if (resolvedEnv === "production" && !noSeed) {
|
|
21441
|
+
logger16.warn("");
|
|
21442
|
+
logger16.warn("\u26A0\uFE0F WARNING: Seeds will be applied to PRODUCTION database");
|
|
21443
|
+
logger16.warn(" Seeds may contain DELETE/TRUNCATE statements that destroy real data.");
|
|
21444
|
+
logger16.warn(" Only use --seed with production if you are absolutely certain.");
|
|
21445
|
+
logger16.warn("");
|
|
21446
|
+
}
|
|
21295
21447
|
const input3 = {
|
|
21296
|
-
env:
|
|
21448
|
+
env: resolvedEnv,
|
|
21297
21449
|
verbose: options.verbose ?? false,
|
|
21298
|
-
noSeed
|
|
21450
|
+
noSeed,
|
|
21299
21451
|
autoApprove: options.autoApprove ?? false,
|
|
21300
21452
|
allowDataLoss: options.allowDataLoss ?? false,
|
|
21301
21453
|
confirmAuthzUpdate: options.confirmAuthzUpdate ?? false,
|
|
@@ -21377,19 +21529,20 @@ function printSummary5(logger16, result) {
|
|
|
21377
21529
|
printApplySummary(logger16, result);
|
|
21378
21530
|
}
|
|
21379
21531
|
}
|
|
21380
|
-
var applyCommand = new Command("apply").description("Apply schema changes to any DB using pg-schema-diff (SQL-First Architecture)").argument("[env]", "Environment: local, preview, or production", "preview").option("--verbose", "Show detailed output").option("--no-seed", "Skip seed application").option("--auto-approve", "Auto-approve hazards (CI mode)").option("--allow-data-loss", "Allow DELETES_DATA hazard in production (DANGEROUS)").option("--confirm-authz-update", "Confirm RLS policy changes in production").option("--check", "Check mode: show what would be applied without making changes (dry-run)").option("--database-url <url>", "Override DATABASE_URL").option(
|
|
21532
|
+
var applyCommand = new Command("apply").description("Apply schema changes to any DB using pg-schema-diff (SQL-First Architecture)").argument("[env]", "Environment: local, preview, or production", "preview").option("--verbose", "Show detailed output").option("--seed", "Explicitly enable seed application (required for production)").option("--no-seed", "Skip seed application").option("--auto-approve", "Auto-approve hazards (CI mode)").option("--allow-data-loss", "Allow DELETES_DATA hazard in production (DANGEROUS)").option("--confirm-authz-update", "Confirm RLS policy changes in production").option("--check", "Check mode: show what would be applied without making changes (dry-run)").option("--database-url <url>", "Override DATABASE_URL").option(
|
|
21381
21533
|
"--max-lock-wait-ms <ms>",
|
|
21382
21534
|
"Maximum time to wait for lock acquisition (default: 30000)",
|
|
21383
21535
|
(value) => Number.parseInt(value, 10)
|
|
21384
21536
|
).option("--fresh-db-check-sql <sql>", "Custom SQL to check if DB is fresh").action(async (env2, options) => {
|
|
21385
21537
|
const logger16 = createCLILogger("db:apply");
|
|
21386
21538
|
try {
|
|
21539
|
+
const noSeed = resolveNoSeed(env2, options.seed);
|
|
21387
21540
|
logger16.section(
|
|
21388
21541
|
options.check ? "Database Apply Check (Dry-Run)" : "Database Apply (SQL-First Architecture)"
|
|
21389
21542
|
);
|
|
21390
21543
|
logger16.info(`Environment: ${env2}`);
|
|
21391
21544
|
logger16.info(`Mode: ${options.check ? "check (dry-run)" : "apply"}`);
|
|
21392
|
-
logger16.info(`Seeds: ${options.
|
|
21545
|
+
logger16.info(`Seeds: ${describeSeedStatus(env2, noSeed, options.seed)}`);
|
|
21393
21546
|
logger16.info(`Auto-approve: ${options.autoApprove ? "enabled" : "disabled"}`);
|
|
21394
21547
|
const result = await runDbApply(env2, options);
|
|
21395
21548
|
printSummary5(logger16, result);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runa-ai/runa-cli",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.63",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "AI-powered DevOps CLI",
|
|
6
6
|
"type": "module",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"typescript": "5.9.3",
|
|
54
54
|
"xstate": "5.28.0",
|
|
55
55
|
"zod": "4.3.6",
|
|
56
|
-
"@runa-ai/runa": "0.5.
|
|
56
|
+
"@runa-ai/runa": "0.5.63",
|
|
57
57
|
"@runa-ai/runa-xstate-test-plugin": "0.5.58"
|
|
58
58
|
},
|
|
59
59
|
"engines": {
|