@intentius/sql-yodeler 0.2.0 → 0.3.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/README.md +3 -3
- package/dist/chant/build.js +7 -0
- package/dist/chant/build.js.map +1 -1
- package/dist/ci/render.d.ts +289 -0
- package/dist/ci/render.js +688 -0
- package/dist/ci/render.js.map +1 -0
- package/dist/ci/replay.d.ts +17 -0
- package/dist/ci/replay.js +69 -0
- package/dist/ci/replay.js.map +1 -0
- package/dist/commands/apply.d.ts +113 -0
- package/dist/commands/apply.js +228 -21
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/approve.js +44 -0
- package/dist/commands/approve.js.map +1 -1
- package/dist/commands/checkpoint.d.ts +3 -0
- package/dist/commands/checkpoint.js +78 -0
- package/dist/commands/checkpoint.js.map +1 -0
- package/dist/commands/ci.d.ts +3 -0
- package/dist/commands/ci.js +118 -0
- package/dist/commands/ci.js.map +1 -0
- package/dist/commands/docs.d.ts +11 -0
- package/dist/commands/docs.js +108 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/drift.d.ts +13 -1
- package/dist/commands/drift.js +18 -2
- package/dist/commands/drift.js.map +1 -1
- package/dist/commands/index.js +10 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/lint.js +11 -3
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/override.js +48 -16
- package/dist/commands/override.js.map +1 -1
- package/dist/commands/plan.js +5 -1
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/report.d.ts +13 -0
- package/dist/commands/report.js +121 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/revert.d.ts +20 -0
- package/dist/commands/revert.js +246 -0
- package/dist/commands/revert.js.map +1 -0
- package/dist/commands/status.js +32 -5
- package/dist/commands/status.js.map +1 -1
- package/dist/config/base.d.ts +69 -0
- package/dist/config/base.js +121 -0
- package/dist/config/base.js.map +1 -0
- package/dist/config/define.d.ts +123 -1
- package/dist/config/define.js +2 -0
- package/dist/config/define.js.map +1 -1
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/load.d.ts +1 -1
- package/dist/config/load.js +90 -5
- package/dist/config/load.js.map +1 -1
- package/dist/config/settings.d.ts +4 -1
- package/dist/config/settings.js +8 -2
- package/dist/config/settings.js.map +1 -1
- package/dist/exit.js +1 -1
- package/dist/exit.js.map +1 -1
- package/dist/history/postgres/ddl.d.ts +18 -0
- package/dist/history/postgres/ddl.js +27 -2
- package/dist/history/postgres/ddl.js.map +1 -1
- package/dist/history/postgres/store.d.ts +2 -0
- package/dist/history/postgres/store.js +7 -1
- package/dist/history/postgres/store.js.map +1 -1
- package/dist/history/rows.d.ts +16 -3
- package/dist/history/rows.js +30 -1
- package/dist/history/rows.js.map +1 -1
- package/dist/history/store.d.ts +2 -0
- package/dist/history/store.js +2 -2
- package/dist/history/store.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lint/check.js +17 -2
- package/dist/lint/check.js.map +1 -1
- package/dist/lint/report.js +1 -1
- package/dist/lint/report.js.map +1 -1
- package/dist/lint/routines.d.ts +26 -0
- package/dist/lint/routines.js +65 -0
- package/dist/lint/routines.js.map +1 -0
- package/dist/lint/rules.d.ts +16 -4
- package/dist/lint/rules.js +9 -4
- package/dist/lint/rules.js.map +1 -1
- package/dist/mcp/tools.d.ts +1 -1
- package/dist/mcp/tools.js +1 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/migrations/checkpoint.d.ts +45 -0
- package/dist/migrations/checkpoint.js +110 -0
- package/dist/migrations/checkpoint.js.map +1 -0
- package/dist/migrations/create.js +2 -0
- package/dist/migrations/create.js.map +1 -1
- package/dist/migrations/document.d.ts +10 -0
- package/dist/migrations/document.js +1 -0
- package/dist/migrations/document.js.map +1 -1
- package/dist/migrations/index.d.ts +2 -0
- package/dist/migrations/index.js +2 -0
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/routines.d.ts +31 -0
- package/dist/migrations/routines.js +55 -0
- package/dist/migrations/routines.js.map +1 -0
- package/dist/notify/index.d.ts +124 -0
- package/dist/notify/index.js +210 -0
- package/dist/notify/index.js.map +1 -0
- package/dist/notify/verify.d.ts +53 -0
- package/dist/notify/verify.js +71 -0
- package/dist/notify/verify.js.map +1 -0
- package/dist/pr/model.d.ts +3 -0
- package/dist/pr/model.js +16 -2
- package/dist/pr/model.js.map +1 -1
- package/dist/pr/render.js +27 -1
- package/dist/pr/render.js.map +1 -1
- package/dist/project.d.ts +19 -2
- package/dist/project.js +33 -1
- package/dist/project.js.map +1 -1
- package/dist/replay/replay.d.ts +9 -1
- package/dist/replay/replay.js +62 -31
- package/dist/replay/replay.js.map +1 -1
- package/dist/replay/report.js +1 -1
- package/dist/replay/report.js.map +1 -1
- package/dist/report/audit.d.ts +138 -0
- package/dist/report/audit.js +202 -0
- package/dist/report/audit.js.map +1 -0
- package/dist/report/jsonl.d.ts +21 -0
- package/dist/report/jsonl.js +52 -0
- package/dist/report/jsonl.js.map +1 -0
- package/dist/report/model.d.ts +68 -0
- package/dist/report/model.js +127 -0
- package/dist/report/model.js.map +1 -0
- package/dist/report/render.d.ts +18 -0
- package/dist/report/render.js +127 -0
- package/dist/report/render.js.map +1 -0
- package/dist/schema-docs/render.d.ts +49 -0
- package/dist/schema-docs/render.js +359 -0
- package/dist/schema-docs/render.js.map +1 -0
- package/dist/schemas.d.ts +5 -2
- package/dist/schemas.js +5 -2
- package/dist/schemas.js.map +1 -1
- package/dist/sources/ddl.d.ts +53 -0
- package/dist/sources/ddl.js +347 -0
- package/dist/sources/ddl.js.map +1 -0
- package/dist/sources/index.d.ts +69 -0
- package/dist/sources/index.js +170 -0
- package/dist/sources/index.js.map +1 -0
- package/dist/steps/postgres-migration.d.ts +35 -25
- package/dist/steps/postgres-migration.js +42 -29
- package/dist/steps/postgres-migration.js.map +1 -1
- package/dist/tenants/index.d.ts +40 -0
- package/dist/tenants/index.js +122 -0
- package/dist/tenants/index.js.map +1 -0
- package/dist/tenants/target.d.ts +23 -0
- package/dist/tenants/target.js +29 -0
- package/dist/tenants/target.js.map +1 -0
- package/dist/versioned/engine.d.ts +6 -0
- package/dist/versioned/engine.js +12 -2
- package/dist/versioned/engine.js.map +1 -1
- package/dist/versioned/index.d.ts +1 -0
- package/dist/versioned/index.js +1 -0
- package/dist/versioned/index.js.map +1 -1
- package/dist/versioned/op.d.ts +6 -1
- package/dist/versioned/op.js +7 -2
- package/dist/versioned/op.js.map +1 -1
- package/dist/versioned/policy.d.ts +33 -2
- package/dist/versioned/policy.js +59 -8
- package/dist/versioned/policy.js.map +1 -1
- package/dist/versioned/report.js +9 -0
- package/dist/versioned/report.js.map +1 -1
- package/dist/versioned/revert.d.ts +128 -0
- package/dist/versioned/revert.js +251 -0
- package/dist/versioned/revert.js.map +1 -0
- package/dist/versioned/state.d.ts +25 -0
- package/dist/versioned/state.js +36 -3
- package/dist/versioned/state.js.map +1 -1
- package/dist/waves/index.d.ts +179 -0
- package/dist/waves/index.js +268 -0
- package/dist/waves/index.js.map +1 -0
- package/dist/waves/promotion.d.ts +56 -0
- package/dist/waves/promotion.js +108 -0
- package/dist/waves/promotion.js.map +1 -0
- package/dist/waves/record.d.ts +24 -0
- package/dist/waves/record.js +20 -0
- package/dist/waves/record.js.map +1 -0
- package/package.json +11 -7
- package/schemas/apply.schema.json +162 -3
- package/schemas/checkpoint.schema.json +19 -0
- package/schemas/drift.schema.json +26 -1
- package/schemas/event.schema.json +36 -0
- package/schemas/lint.schema.json +4 -0
- package/schemas/plan.schema.json +118 -0
- package/schemas/report.schema.json +114 -0
- package/schemas/revert.schema.json +69 -0
- package/schemas/status.schema.json +64 -3
package/dist/config/define.d.ts
CHANGED
|
@@ -17,6 +17,9 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import type { Topology } from "@intentius/chant-lexicon-sql/clickhouse/topology";
|
|
19
19
|
import type { LevelSetting, LintRuleId } from "../lint/rules.js";
|
|
20
|
+
import type { DdlSource } from "../sources/index.js";
|
|
21
|
+
import type { NotifyConfig } from "../notify/index.js";
|
|
22
|
+
export type { NotifyConfig };
|
|
20
23
|
export type { Topology };
|
|
21
24
|
/**
|
|
22
25
|
* A ClickHouse topology in its string form (`single`, `cluster:<name>`,
|
|
@@ -46,14 +49,128 @@ export interface EnvironmentConfig {
|
|
|
46
49
|
* Default: `YODEL_LOCK_WAIT`, then 0 (give up at once).
|
|
47
50
|
*/
|
|
48
51
|
lockWait?: number;
|
|
52
|
+
/**
|
|
53
|
+
* A tenant set (#56): the environment is many targets with one schema,
|
|
54
|
+
* each a ClickHouse database or a Postgres schema of the profile's server.
|
|
55
|
+
* The profile names one database (ClickHouse `databases`) or schema
|
|
56
|
+
* (Postgres `schemas`), the template the migrations are written against;
|
|
57
|
+
* each tenant gets them with that name replaced by its own. A tenant is
|
|
58
|
+
* named `<env>/<tenant>` (`yodel apply prod/acme`), keeps a history of its
|
|
59
|
+
* own (`<history database>_<tenant>`), and its wave applies to every
|
|
60
|
+
* tenant behind one gate. See {@link TenantSet}.
|
|
61
|
+
*/
|
|
62
|
+
tenants?: TenantSet;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The tenants of an environment: a list of names, a file of them (one per
|
|
66
|
+
* line, or a JSON array), or a read-only SQL query whose first column lists
|
|
67
|
+
* them, run on the environment's server with its profile (its reader
|
|
68
|
+
* outside an apply job).
|
|
69
|
+
*
|
|
70
|
+
* ```ts
|
|
71
|
+
* tenants: ["acme", "globex"]
|
|
72
|
+
* tenants: { file: "tenants.txt" }
|
|
73
|
+
* tenants: { query: "SELECT nspname FROM pg_namespace WHERE nspname LIKE 'tenant_%'" }
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export type TenantSet = string[] | {
|
|
77
|
+
file: string;
|
|
78
|
+
} | {
|
|
79
|
+
query: string;
|
|
80
|
+
};
|
|
81
|
+
/** When an environment's wave waits for an approval (chant's wave gate policy). */
|
|
82
|
+
export type WaveGate = "always" | "on-destructive" | "never";
|
|
83
|
+
export declare const WAVE_GATES: readonly WaveGate[];
|
|
84
|
+
/**
|
|
85
|
+
* One wave of the apply pipeline: an environment, applied after the waves
|
|
86
|
+
* before it, behind its own gate.
|
|
87
|
+
*/
|
|
88
|
+
export interface WaveConfig {
|
|
89
|
+
/** The environment, by its name in `sql.profiles`. */
|
|
90
|
+
env: string;
|
|
91
|
+
/**
|
|
92
|
+
* When the wave waits for an approval of its plan:
|
|
93
|
+
*
|
|
94
|
+
* - `always` (the default): whenever it has a migration to apply;
|
|
95
|
+
* - `on-destructive`: when a pending step is destructive, a Postgres
|
|
96
|
+
* rewrite or lock-heavy statement, a ClickHouse mutation or rebuild, or
|
|
97
|
+
* an Op or manual step;
|
|
98
|
+
* - `never`: never. Review and branch protection are all that stand in
|
|
99
|
+
* front of it.
|
|
100
|
+
*
|
|
101
|
+
* The pipeline reads it from the commit a change merges onto, never from
|
|
102
|
+
* the change itself.
|
|
103
|
+
*/
|
|
104
|
+
gate?: WaveGate;
|
|
105
|
+
/**
|
|
106
|
+
* The environment that must have applied a migration first: `yodel
|
|
107
|
+
* apply <env>` reads its history (with its reader) and refuses, exit 4,
|
|
108
|
+
* any pending migration it does not record as applied with the same
|
|
109
|
+
* checksum. Default: the wave before this one; `false` for none. Both
|
|
110
|
+
* the working tree's and the base commit's requirement are enforced, so a
|
|
111
|
+
* change cannot drop its own.
|
|
112
|
+
*/
|
|
113
|
+
requires?: string | false;
|
|
114
|
+
/**
|
|
115
|
+
* A tenant set's wave (#56): split it into a deciding job, which plans
|
|
116
|
+
* every tenant and decides the gate once over all of them, and this many
|
|
117
|
+
* share jobs, each applying a slice of the tenants. A share job refuses
|
|
118
|
+
* (exit 4), naming it, a tenant whose plan moved since the decision, and
|
|
119
|
+
* applies the rest. Default 1: one job plans, decides and applies.
|
|
120
|
+
*/
|
|
121
|
+
shares?: number;
|
|
122
|
+
}
|
|
123
|
+
/** A forge `yodel ci` renders pipelines for. */
|
|
124
|
+
export type CiForge = "github" | "gitlab" | "forgejo";
|
|
125
|
+
export declare const CI_FORGES: readonly CiForge[];
|
|
126
|
+
/** `yodel ci` (#65): what the project's pipelines are rendered for. */
|
|
127
|
+
export interface CiConfig {
|
|
128
|
+
/** The forges to render for. Default: all three. A forge left out gets no files, and `yodel ci --check` does not read its old ones. */
|
|
129
|
+
forges?: CiForge[];
|
|
130
|
+
/**
|
|
131
|
+
* The project's own jobs: a module, relative to the project (such as
|
|
132
|
+
* `ci/jobs.ts`), exporting `actions` (jobs declared with the github
|
|
133
|
+
* lexicon, for GitHub and Forgejo) and `gitlab` (the gitlab lexicon's),
|
|
134
|
+
* each keyed by the job's name. `yodel ci` adds them to the pull request
|
|
135
|
+
* pipeline after yodel's own jobs, so they survive every render.
|
|
136
|
+
*/
|
|
137
|
+
jobs?: string;
|
|
138
|
+
/**
|
|
139
|
+
* The image every job runs in (#66): the CI image
|
|
140
|
+
* `ghcr.io/intentius/sql-yodeler:<version>@sha256:<digest>`, pinned by its
|
|
141
|
+
* digest, which carries node, yodel, chant and the lexicons. Jobs then run
|
|
142
|
+
* no `npm ci`. Default: `node:22-bookworm`, and each job runs `npm ci`.
|
|
143
|
+
*/
|
|
144
|
+
image?: string;
|
|
49
145
|
}
|
|
50
146
|
export interface YodelConfig {
|
|
51
147
|
/** Keyed by the environment's name in `sql.profiles`. */
|
|
52
148
|
environments?: Record<string, EnvironmentConfig>;
|
|
149
|
+
/**
|
|
150
|
+
* The apply pipeline's waves, in order. An environment no wave names
|
|
151
|
+
* waits for an approval whenever it has a migration to apply, as under
|
|
152
|
+
* gate `always`.
|
|
153
|
+
*/
|
|
154
|
+
waves?: WaveConfig[];
|
|
53
155
|
/** `yodel lint`'s rule levels: `{ rules: { destructive: "warning" } }`. A misspelled rule name is a type error. */
|
|
54
156
|
lint?: LintConfig;
|
|
55
157
|
/** Rules over the plan (#53) that `yodel plan` reports and `yodel apply` enforces; see {@link PolicyConfig}. */
|
|
56
158
|
policy?: PolicyConfig;
|
|
159
|
+
/**
|
|
160
|
+
* Webhook events (#61): the NAMES of the environment variables holding a
|
|
161
|
+
* webhook's URL and signing key, and optionally a Slack incoming webhook's
|
|
162
|
+
* URL. `{ webhook: "YODEL_WEBHOOK_URL", key: "YODEL_WEBHOOK_KEY" }`.
|
|
163
|
+
*/
|
|
164
|
+
notify?: NotifyConfig;
|
|
165
|
+
/**
|
|
166
|
+
* DDL sources (#67): schema an ORM defines, read from the DDL it prints,
|
|
167
|
+
* keyed by a name. Each is written out as declarations in
|
|
168
|
+
* `<sourceDir>/<name>.generated.ts` before every build. See
|
|
169
|
+
* {@link DdlSource}.
|
|
170
|
+
*/
|
|
171
|
+
sources?: Record<string, DdlSource>;
|
|
172
|
+
/** `yodel ci`: the forges to render the pipelines for, and the project's own jobs; see {@link CiConfig}. */
|
|
173
|
+
ci?: CiConfig;
|
|
57
174
|
}
|
|
58
175
|
/**
|
|
59
176
|
* Rules over the versioned plan (#53). `yodel plan` shows each rule's
|
|
@@ -108,8 +225,13 @@ export interface PolicyPlan {
|
|
|
108
225
|
dialect: "clickhouse" | "postgres";
|
|
109
226
|
/** When the plan is evaluated, ISO 8601 in UTC. */
|
|
110
227
|
now: string;
|
|
111
|
-
/** The migrations the run would apply, in order. */
|
|
228
|
+
/** The migrations the run would apply, in order. For a revert, the one migration reverted, its steps the revert's statements. */
|
|
112
229
|
pending: PolicyMigration[];
|
|
230
|
+
/** Present when the plan is a revert (`yodel revert`): the migration undone and the one it goes back to (null: an empty schema). */
|
|
231
|
+
revert?: {
|
|
232
|
+
id: string;
|
|
233
|
+
to: string | null;
|
|
234
|
+
};
|
|
113
235
|
}
|
|
114
236
|
export interface PolicyMigration {
|
|
115
237
|
id: string;
|
package/dist/config/define.js
CHANGED
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
* });
|
|
16
16
|
* ```
|
|
17
17
|
*/
|
|
18
|
+
export const WAVE_GATES = ["always", "on-destructive", "never"];
|
|
19
|
+
export const CI_FORGES = ["github", "gitlab", "forgejo"];
|
|
18
20
|
/** Returns `config` as is; it types the default export of `yodel.config.ts`. */
|
|
19
21
|
export const defineConfig = (config) => config;
|
|
20
22
|
//# sourceMappingURL=define.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../src/config/define.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../src/config/define.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAwEH,MAAM,CAAC,MAAM,UAAU,GAAwB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;AA6CrF,MAAM,CAAC,MAAM,SAAS,GAAuB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AA6I7E,gFAAgF;AAChF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAmB,EAAe,EAAE,CAAC,MAAM,CAAC"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
* defineConfig({ environments: { <env>: { topology, history, lockTtl } } })
|
|
6
6
|
* loadYodelConfig(dir, profiles) the file, checked; undefined when there is none
|
|
7
7
|
* environmentSettings(project, env) topology, history database, lock TTL, with their fallbacks
|
|
8
|
+
* loadYodelConfigAtBase(dir) the file as the base commit has it (./base.ts)
|
|
8
9
|
*/
|
|
10
|
+
export * from "./base.js";
|
|
9
11
|
export * from "./define.js";
|
|
10
12
|
export * from "./load.js";
|
|
11
13
|
export * from "./settings.js";
|
package/dist/config/index.js
CHANGED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
* defineConfig({ environments: { <env>: { topology, history, lockTtl } } })
|
|
6
6
|
* loadYodelConfig(dir, profiles) the file, checked; undefined when there is none
|
|
7
7
|
* environmentSettings(project, env) topology, history database, lock TTL, with their fallbacks
|
|
8
|
+
* loadYodelConfigAtBase(dir) the file as the base commit has it (./base.ts)
|
|
8
9
|
*/
|
|
10
|
+
export * from "./base.js";
|
|
9
11
|
export * from "./define.js";
|
|
10
12
|
export * from "./load.js";
|
|
11
13
|
export * from "./settings.js";
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
|
package/dist/config/load.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Finding, loading and checking `yodel.config.ts`. The file is optional; a
|
|
3
3
|
* project without one gets `undefined` and every setting's default.
|
|
4
4
|
*/
|
|
5
|
-
import type
|
|
5
|
+
import { type YodelConfig } from "./define.js";
|
|
6
6
|
export declare const CONFIG_FILE = "yodel.config.ts";
|
|
7
7
|
/**
|
|
8
8
|
* Checks a loaded config's shape. `environments` names each environment by
|
package/dist/config/load.js
CHANGED
|
@@ -7,6 +7,10 @@ import { join } from "node:path";
|
|
|
7
7
|
import { pathToFileURL } from "node:url";
|
|
8
8
|
import { parseTopology } from "@intentius/chant-lexicon-sql/clickhouse/topology";
|
|
9
9
|
import { YodelError } from "../project.js";
|
|
10
|
+
import { CI_FORGES, WAVE_GATES } from "./define.js";
|
|
11
|
+
import { notifyConfigProblem } from "../notify/index.js";
|
|
12
|
+
import { checkSources } from "../sources/index.js";
|
|
13
|
+
import { TENANT_NAME } from "../tenants/target.js";
|
|
10
14
|
export const CONFIG_FILE = "yodel.config.ts";
|
|
11
15
|
const isRecord = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
12
16
|
const TOPOLOGY_KINDS = ["single", "cluster", "replicated", "cloud"];
|
|
@@ -39,9 +43,11 @@ function checkEnvironment(value, where) {
|
|
|
39
43
|
if (!isRecord(value))
|
|
40
44
|
throw new YodelError(`${where}: expected an object`);
|
|
41
45
|
for (const k of Object.keys(value)) {
|
|
42
|
-
if (!["topology", "history", "lockTtl", "lockWait"].includes(k))
|
|
43
|
-
throw new YodelError(`${where}.${k}: unknown setting (expected topology, history, lockTtl, lockWait)`);
|
|
46
|
+
if (!["topology", "history", "lockTtl", "lockWait", "tenants"].includes(k))
|
|
47
|
+
throw new YodelError(`${where}.${k}: unknown setting (expected topology, history, lockTtl, lockWait, tenants)`);
|
|
44
48
|
}
|
|
49
|
+
if (value.tenants !== undefined)
|
|
50
|
+
checkTenants(value.tenants, `${where}.tenants`);
|
|
45
51
|
if (value.topology !== undefined)
|
|
46
52
|
checkTopology(value.topology, `${where}.topology`);
|
|
47
53
|
if (value.history !== undefined) {
|
|
@@ -62,6 +68,20 @@ function checkEnvironment(value, where) {
|
|
|
62
68
|
}
|
|
63
69
|
return value;
|
|
64
70
|
}
|
|
71
|
+
function checkTenants(value, where) {
|
|
72
|
+
if (Array.isArray(value)) {
|
|
73
|
+
const bad = value.filter((t) => typeof t !== "string" || !TENANT_NAME.test(t));
|
|
74
|
+
if (bad.length > 0)
|
|
75
|
+
throw new YodelError(`${where}: ${bad.map((b) => JSON.stringify(b)).join(", ")} ${bad.length === 1 ? "is not a tenant name" : "are not tenant names"} (letters, digits and _, not starting with a digit)`);
|
|
76
|
+
if (new Set(value).size !== value.length)
|
|
77
|
+
throw new YodelError(`${where}: a tenant is listed twice`);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const keys = isRecord(value) ? Object.keys(value) : [];
|
|
81
|
+
if (!isRecord(value) || keys.length !== 1 || !["file", "query"].includes(keys[0] ?? "") || typeof value[keys[0] ?? ""] !== "string" || value[keys[0] ?? ""] === "") {
|
|
82
|
+
throw new YodelError(`${where}: expected a list of tenant names, { file: "<path>" } or { query: "<SQL>" }`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
65
85
|
const RULE_ID = /^[a-z0-9][a-z0-9_-]*$/;
|
|
66
86
|
function checkPolicy(value, where, profiles) {
|
|
67
87
|
if (!isRecord(value))
|
|
@@ -117,6 +137,60 @@ function checkPolicy(value, where, profiles) {
|
|
|
117
137
|
throw new YodelError(`${at}.check: expected a function of the plan`);
|
|
118
138
|
}
|
|
119
139
|
}
|
|
140
|
+
const notDeclared = (profiles) => (profiles.length > 0 ? ` (sql.profiles: ${profiles.join(", ")})` : " (it declares no sql.profiles)");
|
|
141
|
+
function checkWaves(value, where, profiles) {
|
|
142
|
+
if (!Array.isArray(value))
|
|
143
|
+
throw new YodelError(`${where}: expected a list of { env, gate }, in the order they apply`);
|
|
144
|
+
const seen = new Set();
|
|
145
|
+
value.forEach((wave, i) => {
|
|
146
|
+
const at = `${where}[${String(i)}]`;
|
|
147
|
+
if (!isRecord(wave))
|
|
148
|
+
throw new YodelError(`${at}: expected { env, gate }`);
|
|
149
|
+
for (const k of Object.keys(wave))
|
|
150
|
+
if (!["env", "gate", "requires", "shares"].includes(k))
|
|
151
|
+
throw new YodelError(`${at}.${k}: unknown setting (expected env, gate, requires, shares)`);
|
|
152
|
+
if (wave.shares !== undefined && !(typeof wave.shares === "number" && Number.isInteger(wave.shares) && wave.shares >= 1))
|
|
153
|
+
throw new YodelError(`${at}.shares: expected a whole number from 1`);
|
|
154
|
+
const env = wave.env;
|
|
155
|
+
if (typeof env !== "string" || env === "")
|
|
156
|
+
throw new YodelError(`${at}.env: expected an environment's name`);
|
|
157
|
+
if (profiles && !profiles.includes(env))
|
|
158
|
+
throw new YodelError(`${at}.env: ${env} is not an environment chant.config.ts declares${notDeclared(profiles)}`);
|
|
159
|
+
if (seen.has(env))
|
|
160
|
+
throw new YodelError(`${at}.env: ${env} has a wave already; an environment is one wave`);
|
|
161
|
+
seen.add(env);
|
|
162
|
+
if (wave.gate !== undefined && !WAVE_GATES.includes(wave.gate)) {
|
|
163
|
+
throw new YodelError(`${at}.gate: ${JSON.stringify(wave.gate)} is not a gate policy (expected ${WAVE_GATES.join(", ")})`);
|
|
164
|
+
}
|
|
165
|
+
const req = wave.requires;
|
|
166
|
+
if (req !== undefined && req !== false) {
|
|
167
|
+
if (typeof req !== "string" || req === "")
|
|
168
|
+
throw new YodelError(`${at}.requires: expected an environment's name, or false`);
|
|
169
|
+
if (req === env)
|
|
170
|
+
throw new YodelError(`${at}.requires: ${env} cannot require itself`);
|
|
171
|
+
if (profiles && !profiles.includes(req))
|
|
172
|
+
throw new YodelError(`${at}.requires: ${req} is not an environment chant.config.ts declares${notDeclared(profiles)}`);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
/** An image reference pinned by digest. */
|
|
177
|
+
const CI_IMAGE = /^[^\s@]+@sha256:[0-9a-f]{64}$/;
|
|
178
|
+
function checkCi(value, where) {
|
|
179
|
+
if (!isRecord(value))
|
|
180
|
+
throw new YodelError(`${where}: expected { forges?, jobs?, image? }`);
|
|
181
|
+
for (const k of Object.keys(value))
|
|
182
|
+
if (!["forges", "jobs", "image"].includes(k))
|
|
183
|
+
throw new YodelError(`${where}.${k}: unknown setting (expected forges, jobs, image)`);
|
|
184
|
+
if (value.image !== undefined && (typeof value.image !== "string" || !CI_IMAGE.test(value.image))) {
|
|
185
|
+
throw new YodelError(`${where}.image: the CI image pinned by its digest, ghcr.io/intentius/sql-yodeler:<version>@sha256:<digest> (the release's image job writes the digest to its summary)`);
|
|
186
|
+
}
|
|
187
|
+
const forges = value.forges;
|
|
188
|
+
if (forges !== undefined && !(Array.isArray(forges) && forges.length > 0 && forges.every((f) => CI_FORGES.includes(f)))) {
|
|
189
|
+
throw new YodelError(`${where}.forges: a list of ${CI_FORGES.join(", ")}`);
|
|
190
|
+
}
|
|
191
|
+
if (value.jobs !== undefined && (typeof value.jobs !== "string" || value.jobs === ""))
|
|
192
|
+
throw new YodelError(`${where}.jobs: the path of the module that declares the project's own jobs, such as "ci/jobs.ts"`);
|
|
193
|
+
}
|
|
120
194
|
/**
|
|
121
195
|
* Checks a loaded config's shape. `environments` names each environment by
|
|
122
196
|
* its `sql.profiles` name; one that chant.config.ts does not declare is an
|
|
@@ -126,11 +200,22 @@ export function checkYodelConfig(value, path, profiles) {
|
|
|
126
200
|
if (!isRecord(value))
|
|
127
201
|
throw new YodelError(`${path}: the default export must be a config object (export default defineConfig({ ... }))`);
|
|
128
202
|
for (const k of Object.keys(value)) {
|
|
129
|
-
if (
|
|
130
|
-
throw new YodelError(`${path}: unknown setting ${k} (expected environments, lint, policy)`);
|
|
203
|
+
if (!["environments", "lint", "policy", "notify", "sources", "waves", "ci"].includes(k))
|
|
204
|
+
throw new YodelError(`${path}: unknown setting ${k} (expected environments, lint, policy, notify, sources, waves, ci)`);
|
|
205
|
+
}
|
|
206
|
+
if (value.ci !== undefined)
|
|
207
|
+
checkCi(value.ci, `${path}: ci`);
|
|
208
|
+
if (value.sources !== undefined)
|
|
209
|
+
checkSources(value.sources, `${path}: sources`);
|
|
210
|
+
if (value.notify !== undefined) {
|
|
211
|
+
const problem = notifyConfigProblem(value.notify);
|
|
212
|
+
if (problem)
|
|
213
|
+
throw new YodelError(`${path}: ${problem}`);
|
|
131
214
|
}
|
|
132
215
|
if (value.policy !== undefined)
|
|
133
216
|
checkPolicy(value.policy, `${path}: policy`, profiles);
|
|
217
|
+
if (value.waves !== undefined)
|
|
218
|
+
checkWaves(value.waves, `${path}: waves`, profiles);
|
|
134
219
|
if (value.lint !== undefined && !isRecord(value.lint))
|
|
135
220
|
throw new YodelError(`${path}: lint: expected an object`);
|
|
136
221
|
if (value.environments !== undefined) {
|
|
@@ -139,7 +224,7 @@ export function checkYodelConfig(value, path, profiles) {
|
|
|
139
224
|
for (const [name, env] of Object.entries(value.environments)) {
|
|
140
225
|
checkEnvironment(env, `${path}: environments.${name}`);
|
|
141
226
|
if (profiles && !profiles.includes(name)) {
|
|
142
|
-
throw new YodelError(`${path}: environments.${name} is not an environment chant.config.ts declares
|
|
227
|
+
throw new YodelError(`${path}: environments.${name} is not an environment chant.config.ts declares${notDeclared(profiles)}`);
|
|
143
228
|
}
|
|
144
229
|
}
|
|
145
230
|
}
|
package/dist/config/load.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
* | lock wait | `environments.<env>.lockWait` (seconds)| | `YODEL_LOCK_WAIT` | 0 |
|
|
11
11
|
*
|
|
12
12
|
* `yodel apply --lock-wait <duration>` sets the lock wait over all three.
|
|
13
|
+
*
|
|
14
|
+
* A tenant (`<env>/<tenant>`, #56) has its environment's settings, its
|
|
15
|
+
* history database suffixed with `_<tenant>`.
|
|
13
16
|
*/
|
|
14
17
|
import { type Topology } from "@intentius/chant-lexicon-sql/clickhouse/topology";
|
|
15
18
|
import type { HistoryTopology } from "../history/topology.js";
|
|
@@ -40,7 +43,7 @@ export declare function parseDuration(text: string, what: string): number;
|
|
|
40
43
|
/** The topology the history's DDL is written for. */
|
|
41
44
|
export declare function historyTopologyOf(t: Topology): HistoryTopology;
|
|
42
45
|
/** The settings of environment `name`; see the module comment for the order. */
|
|
43
|
-
export declare function environmentSettings(project: Pick<Project, "config" | "yodel">,
|
|
46
|
+
export declare function environmentSettings(project: Pick<Project, "config" | "yodel">, target: string, env?: NodeJS.ProcessEnv): EnvironmentSettings;
|
|
44
47
|
/** `cluster:main (yodel.config.ts)`, for a report's header. */
|
|
45
48
|
export declare const describeSettingsTopology: (s: Pick<EnvironmentSettings, "topology" | "topologySource">) => string;
|
|
46
49
|
/**
|
package/dist/config/settings.js
CHANGED
|
@@ -10,12 +10,16 @@
|
|
|
10
10
|
* | lock wait | `environments.<env>.lockWait` (seconds)| | `YODEL_LOCK_WAIT` | 0 |
|
|
11
11
|
*
|
|
12
12
|
* `yodel apply --lock-wait <duration>` sets the lock wait over all three.
|
|
13
|
+
*
|
|
14
|
+
* A tenant (`<env>/<tenant>`, #56) has its environment's settings, its
|
|
15
|
+
* history database suffixed with `_<tenant>`.
|
|
13
16
|
*/
|
|
14
17
|
import { toTopology, topologyLabel } from "@intentius/chant-lexicon-sql/clickhouse/topology";
|
|
15
18
|
import { DEFAULT_HISTORY_DATABASE } from "../history/ddl.js";
|
|
16
19
|
import { DEFAULT_LOCK_TTL_MS } from "../history/lock.js";
|
|
17
20
|
import { YodelError } from "../project.js";
|
|
18
21
|
import { CONFIG_FILE } from "./load.js";
|
|
22
|
+
import { splitTarget } from "../tenants/target.js";
|
|
19
23
|
/** The variable that sets the lock wait (a duration, as {@link parseDuration} reads it). */
|
|
20
24
|
export const LOCK_WAIT_ENV = "YODEL_LOCK_WAIT";
|
|
21
25
|
const UNITS = { ms: 1, s: 1000, m: 60_000, h: 3_600_000 };
|
|
@@ -46,7 +50,9 @@ export function historyTopologyOf(t) {
|
|
|
46
50
|
return t.kind === "cluster" ? { kind: "cluster", cluster: t.cluster } : t;
|
|
47
51
|
}
|
|
48
52
|
/** The settings of environment `name`; see the module comment for the order. */
|
|
49
|
-
export function environmentSettings(project,
|
|
53
|
+
export function environmentSettings(project, target, env = process.env) {
|
|
54
|
+
// A tenant, <env>/<tenant>, has its environment's settings, and a history of its own (#56).
|
|
55
|
+
const { env: name, tenant } = splitTarget(target);
|
|
50
56
|
const own = project.yodel?.config.environments?.[name];
|
|
51
57
|
const profile = project.config.sql?.profiles?.[name];
|
|
52
58
|
let topology;
|
|
@@ -85,7 +91,7 @@ export function environmentSettings(project, name, env = process.env) {
|
|
|
85
91
|
topology,
|
|
86
92
|
topologySource,
|
|
87
93
|
historyTopology: historyTopologyOf(topology),
|
|
88
|
-
historyDatabase: own?.history?.database ?? (env.YODEL_HISTORY_DATABASE || DEFAULT_HISTORY_DATABASE)
|
|
94
|
+
historyDatabase: `${own?.history?.database ?? (env.YODEL_HISTORY_DATABASE || DEFAULT_HISTORY_DATABASE)}${tenant !== undefined ? `_${tenant}` : ""}`,
|
|
89
95
|
lockTtlMs,
|
|
90
96
|
lockWaitMs,
|
|
91
97
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/config/settings.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/config/settings.ts"],"names":[],"mappings":"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"}
|
package/dist/exit.js
CHANGED
|
@@ -20,7 +20,7 @@ export const EXIT_CODES = [
|
|
|
20
20
|
[EXIT_ERROR, "an error"],
|
|
21
21
|
[EXIT_NEEDS_OP, "something yodel will not do itself (a change that needs an Op it does not run, a manual step); for yodel drift, drift found"],
|
|
22
22
|
[EXIT_OUTSTANDING, "something outstanding: apply stopped at its approval gate, status found pending migrations, lint found errors"],
|
|
23
|
-
[EXIT_REFUSED, "refused, nothing done: a checksum mismatch, an applied migration gone from the directory, an out-of-order migration, a fork or another problem in the migrations directory"],
|
|
23
|
+
[EXIT_REFUSED, "refused, nothing done: a checksum mismatch, an applied migration gone from the directory, an out-of-order migration, a fork or another problem in the migrations directory, a migration the environment it must run on first has not applied"],
|
|
24
24
|
[EXIT_LOCKED, "another apply holds the lock"],
|
|
25
25
|
];
|
|
26
26
|
/** Why `yodel plan` exits 0 with pending migrations, where `yodel status` exits 3. */
|
package/dist/exit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit.js","sourceRoot":"","sources":["../src/exit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAC5B,0EAA0E;AAC1E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,2EAA2E;AAC3E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,6BAA6B;AAC7B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,oCAAoC;AACpC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAE7B,kDAAkD;AAClD,MAAM,CAAC,MAAM,UAAU,GAA6C;IAClE,CAAC,OAAO,EAAE,wBAAwB,CAAC;IACnC,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,aAAa,EAAE,6HAA6H,CAAC;IAC9I,CAAC,gBAAgB,EAAE,+GAA+G,CAAC;IACnI,CAAC,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"exit.js","sourceRoot":"","sources":["../src/exit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAC5B,0EAA0E;AAC1E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,2EAA2E;AAC3E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,6BAA6B;AAC7B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,oCAAoC;AACpC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAE7B,kDAAkD;AAClD,MAAM,CAAC,MAAM,UAAU,GAA6C;IAClE,CAAC,OAAO,EAAE,wBAAwB,CAAC;IACnC,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,aAAa,EAAE,6HAA6H,CAAC;IAC9I,CAAC,gBAAgB,EAAE,+GAA+G,CAAC;IACnI,CAAC,YAAY,EAAE,8OAA8O,CAAC;IAC9P,CAAC,WAAW,EAAE,8BAA8B,CAAC;CAC9C,CAAC;AAEF,sFAAsF;AACtF,MAAM,CAAC,MAAM,iBAAiB,GAC5B,4NAA4N,CAAC"}
|
|
@@ -14,6 +14,24 @@ export declare const pgIdent: (name: string) => string;
|
|
|
14
14
|
export declare const pgLiteral: (value: string) => string;
|
|
15
15
|
/** The history table's columns, in the order {@link HISTORY_COLUMNS} (ClickHouse) has them. */
|
|
16
16
|
export declare const PG_HISTORY_COLUMNS: readonly (readonly [name: string, type: string])[];
|
|
17
|
+
/**
|
|
18
|
+
* The CHECK constraints of {@link PG_HISTORY_COLUMNS} by column, as a table
|
|
19
|
+
* made before `yodel revert` (#55) lacks them: {@link pgWidenChecks} widens
|
|
20
|
+
* such a table's to these, in place.
|
|
21
|
+
*/
|
|
22
|
+
export declare const PG_CHECKS: {
|
|
23
|
+
readonly kind: "kind IN ('migration', 'statement', 'step', 'revert')";
|
|
24
|
+
readonly status: "status IN ('started', 'succeeded', 'failed', 'reverted')";
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* The statements that widen an older history table's CHECK constraints to
|
|
28
|
+
* {@link PG_CHECKS}, given each CHECK constraint's name and definition
|
|
29
|
+
* (`pg_get_constraintdef`). None when they already allow every value.
|
|
30
|
+
*/
|
|
31
|
+
export declare function pgWidenChecks(schema: string, constraints: ReadonlyArray<{
|
|
32
|
+
name: string;
|
|
33
|
+
def: string;
|
|
34
|
+
}>): string[];
|
|
17
35
|
/** The columns a row write names: all but `recorded_at`, which is the server's. */
|
|
18
36
|
export declare const PG_WRITTEN_COLUMNS: string[];
|
|
19
37
|
/** `<schema>.history`, quoted. */
|
|
@@ -17,13 +17,13 @@ export const pgLiteral = (value) => `'${value.replace(/'/g, "''")}'`;
|
|
|
17
17
|
export const PG_HISTORY_COLUMNS = [
|
|
18
18
|
["seq", "bigint NOT NULL PRIMARY KEY"],
|
|
19
19
|
["run_id", "text NOT NULL"],
|
|
20
|
-
["kind", "text NOT NULL CHECK (kind IN ('migration', 'statement', 'step'))"],
|
|
20
|
+
["kind", "text NOT NULL CHECK (kind IN ('migration', 'statement', 'step', 'revert'))"],
|
|
21
21
|
["migration_id", "text NOT NULL"],
|
|
22
22
|
["parent", "text NOT NULL DEFAULT ''"],
|
|
23
23
|
["checksum", "text NOT NULL DEFAULT ''"],
|
|
24
24
|
["statement_index", "integer NOT NULL"],
|
|
25
25
|
["statement_sha", "text NOT NULL DEFAULT ''"],
|
|
26
|
-
["status", "text NOT NULL CHECK (status IN ('started', 'succeeded', 'failed'))"],
|
|
26
|
+
["status", "text NOT NULL CHECK (status IN ('started', 'succeeded', 'failed', 'reverted'))"],
|
|
27
27
|
["error", "text NOT NULL DEFAULT ''"],
|
|
28
28
|
["applied_by", "text NOT NULL DEFAULT ''"],
|
|
29
29
|
["plan_digest", "text NOT NULL DEFAULT ''"],
|
|
@@ -31,6 +31,31 @@ export const PG_HISTORY_COLUMNS = [
|
|
|
31
31
|
["note", "text NOT NULL DEFAULT ''"],
|
|
32
32
|
["recorded_at", "timestamptz NOT NULL DEFAULT pg_catalog.clock_timestamp()"],
|
|
33
33
|
];
|
|
34
|
+
/**
|
|
35
|
+
* The CHECK constraints of {@link PG_HISTORY_COLUMNS} by column, as a table
|
|
36
|
+
* made before `yodel revert` (#55) lacks them: {@link pgWidenChecks} widens
|
|
37
|
+
* such a table's to these, in place.
|
|
38
|
+
*/
|
|
39
|
+
export const PG_CHECKS = {
|
|
40
|
+
kind: "kind IN ('migration', 'statement', 'step', 'revert')",
|
|
41
|
+
status: "status IN ('started', 'succeeded', 'failed', 'reverted')",
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* The statements that widen an older history table's CHECK constraints to
|
|
45
|
+
* {@link PG_CHECKS}, given each CHECK constraint's name and definition
|
|
46
|
+
* (`pg_get_constraintdef`). None when they already allow every value.
|
|
47
|
+
*/
|
|
48
|
+
export function pgWidenChecks(schema, constraints) {
|
|
49
|
+
const out = [];
|
|
50
|
+
for (const [column, check] of Object.entries(PG_CHECKS)) {
|
|
51
|
+
const value = column === "kind" ? "'revert'" : "'reverted'";
|
|
52
|
+
const c = constraints.find((x) => new RegExp(`\\b${column}\\b`).test(x.def));
|
|
53
|
+
if (!c || c.def.includes(value))
|
|
54
|
+
continue;
|
|
55
|
+
out.push(`ALTER TABLE ${pgHistoryTable(schema)} DROP CONSTRAINT ${pgIdent(c.name)}, ADD CONSTRAINT ${pgIdent(c.name)} CHECK (${check})`);
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
34
59
|
/** The columns a row write names: all but `recorded_at`, which is the server's. */
|
|
35
60
|
export const PG_WRITTEN_COLUMNS = PG_HISTORY_COLUMNS.map(([name]) => name).filter((n) => n !== "recorded_at");
|
|
36
61
|
/** `<schema>.history`, quoted. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ddl.js","sourceRoot":"","sources":["../../../src/history/postgres/ddl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,4CAA4C;AAC5C,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AAEjF,sFAAsF;AACtF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AAErF,+FAA+F;AAC/F,MAAM,CAAC,MAAM,kBAAkB,GAAuD;IACpF,CAAC,KAAK,EAAE,6BAA6B,CAAC;IACtC,CAAC,QAAQ,EAAE,eAAe,CAAC;IAC3B,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"ddl.js","sourceRoot":"","sources":["../../../src/history/postgres/ddl.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,8 @@ export declare class PostgresHistoryStore implements HistoryStoreLike {
|
|
|
26
26
|
exists(): Promise<boolean>;
|
|
27
27
|
/** Creates the schema and table when they are not there. */
|
|
28
28
|
ensure(): Promise<void>;
|
|
29
|
+
/** A table made before `yodel revert` (#55) takes its rows only once its CHECK constraints are widened; this widens them, once. */
|
|
30
|
+
allowRevert(): Promise<void>;
|
|
29
31
|
/** Every row, in seq order. Postgres reads are consistent, so the `sync` option the ClickHouse store takes changes nothing here. */
|
|
30
32
|
rows(): Promise<HistoryRow[]>;
|
|
31
33
|
state(): Promise<HistoryState>;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
import { deriveState } from "../rows.js";
|
|
11
11
|
import { fromRaw } from "../store.js";
|
|
12
12
|
import { HISTORY_TABLE } from "../ddl.js";
|
|
13
|
-
import { pgHistoryDdl, pgHistoryTable, PG_HISTORY_COLUMNS, PG_WRITTEN_COLUMNS } from "./ddl.js";
|
|
13
|
+
import { pgHistoryDdl, pgHistoryTable, pgWidenChecks, PG_HISTORY_COLUMNS, PG_WRITTEN_COLUMNS } from "./ddl.js";
|
|
14
14
|
/** The history's rows read back, `recorded_at` in the ClickHouse table's form (`YYYY-MM-DD hh:mm:ss.ffffff`, UTC). */
|
|
15
15
|
const SELECT = PG_HISTORY_COLUMNS.map(([name]) => name === "recorded_at" ? `pg_catalog.to_char(recorded_at AT TIME ZONE 'UTC', 'YYYY-MM-DD HH24:MI:SS.US') AS recorded_at` : name === "seq" ? "seq::text AS seq" : name).join(", ");
|
|
16
16
|
export class PostgresHistoryStore {
|
|
@@ -35,6 +35,12 @@ export class PostgresHistoryStore {
|
|
|
35
35
|
for (const sql of pgHistoryDdl(this.location.schema))
|
|
36
36
|
await this.client.query(sql);
|
|
37
37
|
}
|
|
38
|
+
/** A table made before `yodel revert` (#55) takes its rows only once its CHECK constraints are widened; this widens them, once. */
|
|
39
|
+
async allowRevert() {
|
|
40
|
+
const constraints = await this.client.query("SELECT c.conname AS name, pg_catalog.pg_get_constraintdef(c.oid) AS def FROM pg_catalog.pg_constraint c JOIN pg_catalog.pg_class t ON t.oid = c.conrelid JOIN pg_catalog.pg_namespace n ON n.oid = t.relnamespace WHERE n.nspname = $1 AND t.relname = $2 AND c.contype = 'c'", [this.location.schema, HISTORY_TABLE]);
|
|
41
|
+
for (const sql of pgWidenChecks(this.location.schema, constraints))
|
|
42
|
+
await this.client.query(sql);
|
|
43
|
+
}
|
|
38
44
|
/** Every row, in seq order. Postgres reads are consistent, so the `sync` option the ClickHouse store takes changes nothing here. */
|
|
39
45
|
async rows() {
|
|
40
46
|
if (!(await this.exists()))
|