@intentius/sql-yodeler 0.3.0 → 0.5.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 +2 -2
- package/dist/apply-steps/index.d.ts +65 -0
- package/dist/apply-steps/index.js +106 -0
- package/dist/apply-steps/index.js.map +1 -0
- package/dist/approval-mode/index.d.ts +78 -0
- package/dist/approval-mode/index.js +105 -0
- package/dist/approval-mode/index.js.map +1 -0
- package/dist/chant/access.d.ts +84 -0
- package/dist/chant/access.js +155 -0
- package/dist/chant/access.js.map +1 -0
- package/dist/chant/drift.d.ts +17 -1
- package/dist/chant/drift.js +55 -2
- package/dist/chant/drift.js.map +1 -1
- package/dist/chant/plan.d.ts +18 -2
- package/dist/chant/plan.js +21 -3
- package/dist/chant/plan.js.map +1 -1
- package/dist/ci/login.d.ts +78 -0
- package/dist/ci/login.js +199 -0
- package/dist/ci/login.js.map +1 -0
- package/dist/ci/render.d.ts +64 -10
- package/dist/ci/render.js +385 -88
- package/dist/ci/render.js.map +1 -1
- package/dist/cleanup/index.d.ts +92 -0
- package/dist/cleanup/index.js +213 -0
- package/dist/cleanup/index.js.map +1 -0
- package/dist/commands/apply.js +178 -20
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/approve.d.ts +13 -0
- package/dist/commands/approve.js +206 -24
- package/dist/commands/approve.js.map +1 -1
- package/dist/commands/ci.js +12 -0
- package/dist/commands/ci.js.map +1 -1
- package/dist/commands/cleanup.d.ts +13 -0
- package/dist/commands/cleanup.js +158 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.js +136 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/drift.js +33 -3
- package/dist/commands/drift.js.map +1 -1
- package/dist/commands/index.js +6 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.js +98 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/lint.js +67 -10
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/new.js +135 -54
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/plan.js +39 -5
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/test.d.ts +3 -0
- package/dist/commands/test.js +164 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/config/define.d.ts +175 -2
- package/dist/config/define.js +2 -0
- package/dist/config/define.js.map +1 -1
- package/dist/config/load.js +78 -10
- package/dist/config/load.js.map +1 -1
- package/dist/config/settings.d.ts +20 -0
- package/dist/config/settings.js +28 -0
- package/dist/config/settings.js.map +1 -1
- package/dist/credentials.d.ts +119 -0
- package/dist/credentials.js +119 -0
- package/dist/credentials.js.map +1 -0
- package/dist/exit.js +1 -1
- package/dist/exit.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/init/adopt.js +1 -1
- package/dist/init/adopt.js.map +1 -1
- package/dist/init/clickhouse-access.d.ts +64 -0
- package/dist/init/clickhouse-access.js +211 -0
- package/dist/init/clickhouse-access.js.map +1 -0
- package/dist/init/index.d.ts +2 -0
- package/dist/init/index.js +2 -0
- package/dist/init/index.js.map +1 -1
- package/dist/init/live.d.ts +4 -0
- package/dist/init/live.js +16 -0
- package/dist/init/live.js.map +1 -1
- package/dist/init/second.d.ts +70 -0
- package/dist/init/second.js +149 -0
- package/dist/init/second.js.map +1 -0
- package/dist/lint/access.d.ts +18 -0
- package/dist/lint/access.js +34 -0
- package/dist/lint/access.js.map +1 -0
- package/dist/lint/annotations.d.ts +49 -0
- package/dist/lint/annotations.js +82 -0
- package/dist/lint/annotations.js.map +1 -0
- package/dist/lint/check.js +25 -7
- package/dist/lint/check.js.map +1 -1
- package/dist/lint/config.d.ts +7 -1
- package/dist/lint/config.js +11 -5
- package/dist/lint/config.js.map +1 -1
- package/dist/lint/index.d.ts +4 -0
- package/dist/lint/index.js +4 -0
- package/dist/lint/index.js.map +1 -1
- package/dist/lint/naming.d.ts +62 -0
- package/dist/lint/naming.js +138 -0
- package/dist/lint/naming.js.map +1 -0
- package/dist/lint/rules.d.ts +37 -4
- package/dist/lint/rules.js +16 -4
- package/dist/lint/rules.js.map +1 -1
- package/dist/lint/schema-checks.d.ts +63 -0
- package/dist/lint/schema-checks.js +128 -0
- package/dist/lint/schema-checks.js.map +1 -0
- package/dist/lint/statements.d.ts +22 -1
- package/dist/lint/statements.js +40 -1
- package/dist/lint/statements.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.js +0 -2
- package/dist/migrations/checkpoint.js.map +1 -1
- package/dist/migrations/checks.d.ts +19 -1
- package/dist/migrations/checks.js +15 -0
- package/dist/migrations/checks.js.map +1 -1
- package/dist/migrations/create.d.ts +13 -4
- package/dist/migrations/create.js +24 -9
- package/dist/migrations/create.js.map +1 -1
- package/dist/migrations/routines.d.ts +5 -15
- package/dist/migrations/routines.js +5 -30
- package/dist/migrations/routines.js.map +1 -1
- package/dist/pr/model.d.ts +4 -1
- package/dist/pr/model.js +13 -5
- package/dist/pr/model.js.map +1 -1
- package/dist/pr/render.d.ts +4 -1
- package/dist/pr/render.js +22 -8
- package/dist/pr/render.js.map +1 -1
- package/dist/pr/tenants.d.ts +37 -0
- package/dist/pr/tenants.js +138 -0
- package/dist/pr/tenants.js.map +1 -0
- package/dist/probe.d.ts +27 -0
- package/dist/probe.js +106 -0
- package/dist/probe.js.map +1 -0
- package/dist/project.d.ts +16 -0
- package/dist/project.js +29 -1
- package/dist/project.js.map +1 -1
- package/dist/replay/clickhouse.d.ts +31 -0
- package/dist/replay/clickhouse.js +103 -6
- package/dist/replay/clickhouse.js.map +1 -1
- package/dist/replay/replay.d.ts +5 -2
- package/dist/replay/replay.js.map +1 -1
- package/dist/report/audit.d.ts +1 -1
- package/dist/report/audit.js +20 -3
- package/dist/report/audit.js.map +1 -1
- package/dist/schemas.d.ts +3 -1
- package/dist/schemas.js +2 -0
- package/dist/schemas.js.map +1 -1
- package/dist/sources/ddl.d.ts +15 -20
- package/dist/sources/ddl.js +34 -328
- package/dist/sources/ddl.js.map +1 -1
- package/dist/sources/index.js +2 -2
- package/dist/sources/index.js.map +1 -1
- package/dist/steps/backfill.d.ts +40 -5
- package/dist/steps/backfill.js +128 -8
- package/dist/steps/backfill.js.map +1 -1
- package/dist/steps/index.d.ts +19 -1
- package/dist/steps/index.js +34 -7
- package/dist/steps/index.js.map +1 -1
- package/dist/steps/kinds.d.ts +42 -4
- package/dist/steps/kinds.js +88 -14
- package/dist/steps/kinds.js.map +1 -1
- package/dist/steps/postgres-migration.d.ts +3 -0
- package/dist/steps/postgres-migration.js +7 -3
- package/dist/steps/postgres-migration.js.map +1 -1
- package/dist/steps/rebuild.d.ts +15 -6
- package/dist/steps/rebuild.js +12 -9
- package/dist/steps/rebuild.js.map +1 -1
- package/dist/tenants/index.d.ts +2 -1
- package/dist/tenants/index.js +3 -4
- package/dist/tenants/index.js.map +1 -1
- package/dist/tenants/wave.d.ts +128 -0
- package/dist/tenants/wave.js +254 -0
- package/dist/tenants/wave.js.map +1 -0
- package/dist/testing/define.d.ts +62 -0
- package/dist/testing/define.js +32 -0
- package/dist/testing/define.js.map +1 -0
- package/dist/testing/files.d.ts +5 -0
- package/dist/testing/files.js +18 -0
- package/dist/testing/files.js.map +1 -0
- package/dist/testing/report.d.ts +14 -0
- package/dist/testing/report.js +83 -0
- package/dist/testing/report.js.map +1 -0
- package/dist/testing/run.d.ts +104 -0
- package/dist/testing/run.js +328 -0
- package/dist/testing/run.js.map +1 -0
- package/dist/versioned/approval.d.ts +6 -0
- package/dist/versioned/approval.js +11 -5
- package/dist/versioned/approval.js.map +1 -1
- package/dist/versioned/checks.d.ts +8 -2
- package/dist/versioned/checks.js +34 -13
- package/dist/versioned/checks.js.map +1 -1
- package/dist/versioned/driver.d.ts +2 -2
- package/dist/versioned/engine.d.ts +10 -0
- package/dist/versioned/engine.js +8 -4
- package/dist/versioned/engine.js.map +1 -1
- package/dist/versioned/explain.d.ts +2 -0
- package/dist/versioned/explain.js +3 -1
- package/dist/versioned/explain.js.map +1 -1
- package/dist/versioned/op.d.ts +4 -0
- package/dist/versioned/op.js +5 -2
- package/dist/versioned/op.js.map +1 -1
- package/dist/versioned/state.js +1 -1
- package/dist/versioned/state.js.map +1 -1
- package/dist/waves/index.d.ts +58 -13
- package/dist/waves/index.js +109 -24
- package/dist/waves/index.js.map +1 -1
- package/dist/waves/record.d.ts +10 -0
- package/dist/waves/record.js.map +1 -1
- package/package.json +8 -7
- package/schemas/apply.schema.json +1 -1
- package/schemas/cleanup.schema.json +40 -0
- package/schemas/init.schema.json +51 -22
- package/schemas/lint-rules.schema.json +4 -0
- package/schemas/new.schema.json +41 -3
- package/schemas/plan.schema.json +39 -0
- package/schemas/report.schema.json +1 -1
- package/schemas/test.schema.json +41 -0
package/dist/waves/index.js
CHANGED
|
@@ -25,15 +25,17 @@
|
|
|
25
25
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
26
26
|
import { dirname, join, resolve } from "node:path";
|
|
27
27
|
import { baseRef, loadYodelConfigAtBase } from "../config/base.js";
|
|
28
|
-
import { stepFindings } from "../lint/statements.js";
|
|
28
|
+
import { createdObjects, stepFindings } from "../lint/statements.js";
|
|
29
29
|
import { YodelError } from "../project.js";
|
|
30
30
|
import { describeStep } from "../steps/kinds.js";
|
|
31
31
|
import { EXIT_REFUSED } from "../exit.js";
|
|
32
32
|
import { currentDigest, inspect, selectToApply } from "../versioned/engine.js";
|
|
33
33
|
import { gitLedger, NOT_APPROVED, verifyApproval } from "../versioned/approval.js";
|
|
34
34
|
import { WAVES_PIPELINE } from "./record.js";
|
|
35
|
-
import { enforcePromotion, promotionEvidence, readPromotions } from "./promotion.js";
|
|
35
|
+
import { enforcePromotion, promotionEvidence, readPromotions, requiredEnvironments } from "./promotion.js";
|
|
36
36
|
import { baseEnvironment, splitTarget } from "../tenants/target.js";
|
|
37
|
+
import { heldSteps, runApplySteps, stepsAtBase, stepsRefusal } from "../apply-steps/index.js";
|
|
38
|
+
import { describeApprovalMode, portFor, signFlag, waveApproval } from "../approval-mode/index.js";
|
|
37
39
|
export * from "./promotion.js";
|
|
38
40
|
export * from "./record.js";
|
|
39
41
|
/** The waves spec the CI script writes and every wave job reads. */
|
|
@@ -46,18 +48,21 @@ export function waveGate(config, env) {
|
|
|
46
48
|
const wave = config?.waves?.find((w) => w.env === baseEnvironment(env));
|
|
47
49
|
return wave ? { gate: wave.gate ?? DEFAULT_WAVE_GATE, declared: true } : { gate: DEFAULT_WAVE_GATE, declared: false };
|
|
48
50
|
}
|
|
49
|
-
const GATED_RULES = new Set(["destructive", "pg-rewrite", "pg-lock", "ch-mutation", "ch-rebuild"]);
|
|
51
|
+
const GATED_RULES = new Set(["destructive", "pg-rewrite", "pg-lock", "pg-access", "ch-mutation", "ch-rebuild", "ch-access"]);
|
|
50
52
|
/**
|
|
51
53
|
* The steps of `pending` that `on-destructive` waits on: a destructive
|
|
52
|
-
* statement or Op step, a Postgres rewrite or lock-heavy statement,
|
|
54
|
+
* statement or Op step, a Postgres rewrite or lock-heavy statement, one
|
|
55
|
+
* that takes access away (a revoke, a policy dropped, row-level security
|
|
56
|
+
* turned off; on ClickHouse a revoke), a
|
|
53
57
|
* ClickHouse mutation or rebuild (lint's statement rules, whatever their
|
|
54
58
|
* level or silences), and any Op or manual step.
|
|
55
59
|
*/
|
|
56
60
|
export function destructiveSteps(dialect, pending) {
|
|
57
61
|
const out = [];
|
|
58
62
|
for (const p of pending) {
|
|
63
|
+
const created = dialect === "postgres" ? createdObjects(p.migration.document.steps) : undefined;
|
|
59
64
|
p.migration.document.steps.forEach((step, i) => {
|
|
60
|
-
const rules = stepFindings(dialect, step).map((f) => f.rule).filter((r) => GATED_RULES.has(r));
|
|
65
|
+
const rules = stepFindings(dialect, step, created ? { created } : {}).map((f) => f.rule).filter((r) => GATED_RULES.has(r));
|
|
61
66
|
const why = rules[0] ?? (step.kind === "op" ? "op-step" : step.kind === "manual" ? "manual-step" : undefined);
|
|
62
67
|
if (why)
|
|
63
68
|
out.push({ migration: p.id, step: i, what: describeStep(step), why: [...new Set([why, ...rules])].join(", ") });
|
|
@@ -75,18 +80,35 @@ export async function gateAtBase(project, env) {
|
|
|
75
80
|
const at = await loadYodelConfigAtBase(project.dir);
|
|
76
81
|
return { ...waveGate(at.config, env), at };
|
|
77
82
|
}
|
|
83
|
+
export { RECORD_PLANS_ENV } from "../approval-mode/index.js";
|
|
84
|
+
/** The promotion evidence a wave plans with once each environment it requires has applied `pending`: what {@link enforcePromotion} lets through. */
|
|
85
|
+
async function evidenceAfterPromotion(project, env, pending) {
|
|
86
|
+
if (pending.length === 0)
|
|
87
|
+
return [];
|
|
88
|
+
return (await requiredEnvironments(project, env)).map((r) => ({ env: r.env, applied: pending.map((p) => ({ id: p.id, checksum: p.checksum })) }));
|
|
89
|
+
}
|
|
78
90
|
/** The wave plan for one environment, now. A refusal (out of order, a checksum) throws, as `--digest` does. */
|
|
79
91
|
export async function planWave(project, venv, ordered, options) {
|
|
80
92
|
const { status } = await inspect(venv, ordered);
|
|
81
93
|
const toApply = selectToApply(status, options.allowOutOfOrder);
|
|
82
94
|
// Before the gate: a pending migration the required environment has not applied refuses here (exit 4).
|
|
83
|
-
|
|
95
|
+
// Planned for a review (#48), the wave is planned as after the merge, when the environments before it have run.
|
|
96
|
+
const requires = options.forReview === true ? await evidenceAfterPromotion(project, venv.environment, toApply) : promotionEvidence(await enforcePromotion(project, venv.environment, ordered, toApply));
|
|
84
97
|
const migrations = await currentDigest(venv, status, toApply);
|
|
85
98
|
const { gate, at } = await gateAtBase(project, venv.environment);
|
|
86
99
|
const steps = destructiveSteps(project.dialect === "postgres" ? "postgres" : "clickhouse", toApply);
|
|
87
|
-
|
|
100
|
+
// The before steps (#64), as the base commit declares them: one that fails refuses; one that fails with onFailure approve holds the wave for a person.
|
|
101
|
+
// A command is not run here (#107): it may have side effects, so it runs once, under the lock (yodel apply --wave-apply), and the plan shows that it will.
|
|
102
|
+
const before = toApply.length > 0 && options.forReview !== true ? ((await stepsAtBase(project, venv.environment)).steps?.before ?? []) : [];
|
|
103
|
+
const outcomes = before.length > 0 ? await runApplySteps(venv.driver, before, "before", { dir: project.dir, env: venv.environment, commands: "plan" }) : [];
|
|
104
|
+
const refusal = stepsRefusal(venv.environment, outcomes, "as the wave was planned");
|
|
105
|
+
if (refusal)
|
|
106
|
+
throw refusal;
|
|
107
|
+
const held = heldSteps(outcomes);
|
|
108
|
+
// A held step is what on-destructive waits on too; the gate never is held by --wave-apply (verifyWaveDecision).
|
|
109
|
+
const destructive = steps.length > 0 || held.length > 0;
|
|
88
110
|
return {
|
|
89
|
-
planDigest: await wavePlanDigest({ environment: venv.environment, migrations, gate, destructive, requires }),
|
|
111
|
+
planDigest: await wavePlanDigest({ environment: venv.environment, migrations, gate, destructive, requires, ...(held.length > 0 ? { held } : {}) }),
|
|
90
112
|
destructive,
|
|
91
113
|
empty: toApply.length === 0,
|
|
92
114
|
environment: venv.environment,
|
|
@@ -96,8 +118,44 @@ export async function planWave(project, venv, ordered, options) {
|
|
|
96
118
|
pending: toApply.map((p) => p.id),
|
|
97
119
|
destructiveSteps: steps,
|
|
98
120
|
requires,
|
|
121
|
+
...(outcomes.length > 0 ? { steps: outcomes } : {}),
|
|
122
|
+
...(held.length > 0 ? { held } : {}),
|
|
99
123
|
};
|
|
100
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* The wave plan digest `--wave-plan` would write for `venv` now, without
|
|
127
|
+
* running the `before` steps: what `yodel plan` and `yodel approve` show of
|
|
128
|
+
* a tenant set's wave (#56), where each tenant is a run. A plan with nothing
|
|
129
|
+
* pending requires nothing, as {@link planWave} has it; a pending migration
|
|
130
|
+
* the required environment has not applied makes it `blocked`, where
|
|
131
|
+
* `planWave` would refuse.
|
|
132
|
+
*/
|
|
133
|
+
export async function viewWavePlan(project, venv, ordered, options = {}) {
|
|
134
|
+
const { status } = await inspect(venv, ordered, { sync: false });
|
|
135
|
+
const toApply = selectToApply(status, options.allowOutOfOrder === true);
|
|
136
|
+
const promotions = toApply.length > 0 ? await readPromotions(project, venv.environment, ordered, toApply) : [];
|
|
137
|
+
const blocked = promotions.some((p) => p.migrations.some((m) => m.ran !== "applied"));
|
|
138
|
+
const migrations = await currentDigest(venv, status, toApply);
|
|
139
|
+
const { gate } = await gateAtBase(project, venv.environment);
|
|
140
|
+
const steps = destructiveSteps(project.dialect === "postgres" ? "postgres" : "clickhouse", toApply);
|
|
141
|
+
const destructive = steps.length > 0;
|
|
142
|
+
return {
|
|
143
|
+
planDigest: await wavePlanDigest({ environment: venv.environment, migrations, gate, destructive, requires: promotionEvidence(promotions) }),
|
|
144
|
+
destructive,
|
|
145
|
+
empty: toApply.length === 0,
|
|
146
|
+
pending: toApply.map((p) => p.id),
|
|
147
|
+
destructiveSteps: steps,
|
|
148
|
+
promotions,
|
|
149
|
+
blocked,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/** `--wave-apply` found the wave plan moved since the wave was decided: nothing was applied. */
|
|
153
|
+
export class WavePlanMoved extends YodelError {
|
|
154
|
+
constructor(message) {
|
|
155
|
+
super(message, 1);
|
|
156
|
+
this.name = "WavePlanMoved";
|
|
157
|
+
}
|
|
158
|
+
}
|
|
101
159
|
/** `--wave-plan <file>`: writes the plan file. */
|
|
102
160
|
export async function writeWavePlan(project, venv, ordered, file, options) {
|
|
103
161
|
const plan = await planWave(project, venv, ordered, options);
|
|
@@ -129,9 +187,10 @@ function waveOf(spec, env, specFile) {
|
|
|
129
187
|
* Throws unless chant's decision for `env`'s wave lets `planDigest` apply:
|
|
130
188
|
* the decision names this plan for `env`, and either the gate ledger holds
|
|
131
189
|
* an approval of the wave's set digest, or the wave's policy at the base
|
|
132
|
-
* commit needs no approval for these plans.
|
|
190
|
+
* commit needs no approval for these plans. A plan with `held` steps (#64)
|
|
191
|
+
* needs that approval whatever the policy.
|
|
133
192
|
*/
|
|
134
|
-
export async function verifyWaveDecision(cwd, specFile, env, planDigest) {
|
|
193
|
+
export async function verifyWaveDecision(cwd, specFile, env, planDigest, held = []) {
|
|
135
194
|
const specPath = resolve(cwd, specFile);
|
|
136
195
|
const spec = readJson(specPath, "the waves spec");
|
|
137
196
|
const { k, name } = waveOf(spec, env, specFile);
|
|
@@ -143,25 +202,49 @@ export async function verifyWaveDecision(cwd, specFile, env, planDigest) {
|
|
|
143
202
|
const { waveSetDigest } = await import("@intentius/chant/gated-waves");
|
|
144
203
|
if (waveSetDigest(decision.members) !== decision.digest)
|
|
145
204
|
throw new YodelError(`refused: chant's decision for wave ${String(k)} does not hold the digest of its own members; nothing was applied`, NOT_APPROVED);
|
|
205
|
+
// The policy and the approval mode (#48), asked of chant's rule again rather than trusting the record,
|
|
206
|
+
// at yodel's base (../config/base.ts), never at a base the spec in the change names.
|
|
207
|
+
const { opWaveNeedsApproval, readOpWavePolicy } = await import("@intentius/chant/op");
|
|
208
|
+
const policy = readOpWavePolicy(specFile, name, baseRef(cwd).ref, cwd);
|
|
209
|
+
const ledger = async () => portFor(await gitLedger(cwd), policy.approval, cwd, policy.base);
|
|
210
|
+
const how = policy.approval === "ledger" ? "" : `, approval ${policy.approval}`;
|
|
146
211
|
if (decision.status === "approved") {
|
|
147
|
-
const by = await verifyApproval(await
|
|
212
|
+
const by = await verifyApproval(await ledger(), { name: spec.name, filePath: specFile, gate: decision.gate, quorum: false }, decision.digest);
|
|
148
213
|
return {
|
|
149
|
-
line: `wave ${String(k)} (${name}): approved by ${by.resolvedBy} at ${by.timestamp}`,
|
|
150
|
-
wave: { wave: k, op: spec.name, gate: decision.gate, digest: decision.digest, status: "approved" },
|
|
214
|
+
line: `wave ${String(k)} (${name}): approved by ${by.resolvedBy} at ${by.timestamp}${how}${by.review ? ` (the review of #${String(by.review.pr)} at ${by.review.head.slice(0, 12)})` : ""}`,
|
|
215
|
+
wave: { wave: k, op: spec.name, gate: decision.gate, digest: decision.digest, status: "approved", ...evidence(policy.approval, by) },
|
|
151
216
|
};
|
|
152
217
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
218
|
+
if (held.length > 0) {
|
|
219
|
+
// A before step failed with onFailure approve: a person approves this plan, whatever the gate.
|
|
220
|
+
try {
|
|
221
|
+
const by = await verifyApproval(await ledger(), { name: spec.name, filePath: specFile, gate: decision.gate, quorum: false }, decision.digest);
|
|
222
|
+
return {
|
|
223
|
+
line: `wave ${String(k)} (${name}): held by ${held.join(", ")}, approved by ${by.resolvedBy} at ${by.timestamp}${how}`,
|
|
224
|
+
wave: { wave: k, op: spec.name, gate: decision.gate, digest: decision.digest, status: "approved", ...evidence(policy.approval, by) },
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
throw new YodelError(`refused: ${env}'s before step${held.length === 1 ? "" : "s"} ${held.join(", ")} failed with onFailure approve, so wave ${String(k)} (${name}) waits for a person under any gate. Nothing was applied. ` +
|
|
229
|
+
`Approve it with: chant approve ${spec.name} ${decision.gate} --plan ${decision.digest}${signFlag(policy.approval)}`, NOT_APPROVED);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
157
232
|
if (decision.status !== "not-required" || opWaveNeedsApproval(policy.policy, decision.members)) {
|
|
158
|
-
throw new YodelError(`refused: wave ${String(k)} (${name}) needs an approval of ${decision.digest} under gate ${policy.policy} (read at ${policy.base.slice(0, 12)}), and chant's gate ledger has none. Nothing was applied.`, NOT_APPROVED);
|
|
233
|
+
throw new YodelError(`refused: wave ${String(k)} (${name}) needs an approval of ${decision.digest} under gate ${policy.policy}${how} (read at ${policy.base.slice(0, 12)}), and chant's gate ledger has none${policy.approval === "sealed" ? " that is sealed by a signer at base" : ""}. Nothing was applied.`, NOT_APPROVED);
|
|
159
234
|
}
|
|
160
235
|
return {
|
|
161
236
|
line: `wave ${String(k)} (${name}): gate ${policy.policy} at ${policy.base.slice(0, 12)} needs no approval for this plan`,
|
|
162
237
|
wave: { wave: k, op: spec.name, gate: decision.gate, digest: decision.digest, status: "not-required", policy: policy.policy, base: policy.base },
|
|
163
238
|
};
|
|
164
239
|
}
|
|
240
|
+
/** What the history records of how an approval counted (#48): the mode, the review or the signer. */
|
|
241
|
+
function evidence(approval, by) {
|
|
242
|
+
return {
|
|
243
|
+
...(approval !== "ledger" ? { approval } : {}),
|
|
244
|
+
...(by.review ? { review: by.review } : {}),
|
|
245
|
+
...(by.signer !== undefined ? { signer: by.signer } : {}),
|
|
246
|
+
};
|
|
247
|
+
}
|
|
165
248
|
/** Where chant run wave writes a run's plan file (chant's opWavePlanPath). */
|
|
166
249
|
export const wavePlanPath = (op, wave, target) => `.chant/op-waves/${op}/wave-${String(wave)}/${target.replace(/[^A-Za-z0-9._-]/g, "_")}.plan.json`;
|
|
167
250
|
/**
|
|
@@ -196,17 +279,17 @@ export async function forecastWave(cwd, specFile, plan) {
|
|
|
196
279
|
const digest = waveSetDigest(members);
|
|
197
280
|
const gate = waveGateName(spec.gate ?? spec.name, k);
|
|
198
281
|
const policy = readOpWavePolicy(specFile, name, baseRef(cwd).ref, cwd);
|
|
199
|
-
let waits = opWaveNeedsApproval(policy.policy, members);
|
|
282
|
+
let waits = opWaveNeedsApproval(policy.policy, members) || (plan.held?.length ?? 0) > 0;
|
|
200
283
|
if (waits) {
|
|
201
284
|
try {
|
|
202
|
-
await verifyApproval(await gitLedger(cwd), { name: spec.name, filePath: specFile, gate, quorum: false }, digest);
|
|
285
|
+
await verifyApproval(await portFor(await gitLedger(cwd), policy.approval, cwd, policy.base), { name: spec.name, filePath: specFile, gate, quorum: false }, digest);
|
|
203
286
|
waits = false;
|
|
204
287
|
}
|
|
205
288
|
catch {
|
|
206
|
-
// No approval of this digest: chant waits.
|
|
289
|
+
// No approval of this digest that counts: chant waits (under pr-review, unless the merged pull request's review approves it).
|
|
207
290
|
}
|
|
208
291
|
}
|
|
209
|
-
return { wave: k, name, gate, digest, policy: policy.policy, base: policy.base, waits, approve: `chant approve ${spec.name} ${gate} --plan ${digest}
|
|
292
|
+
return { wave: k, name, gate, digest, policy: policy.policy, base: policy.base, waits, approve: `chant approve ${spec.name} ${gate} --plan ${digest}${signFlag(policy.approval)}`, approval: policy.approval };
|
|
210
293
|
}
|
|
211
294
|
/** Reads a plan file `--wave-plan` wrote. */
|
|
212
295
|
export function readWavePlan(file) {
|
|
@@ -237,6 +320,7 @@ export async function waveView(project, env, ordered, pending, migrations) {
|
|
|
237
320
|
const { waveSetDigest, waveGateName } = await import("@intentius/chant/gated-waves");
|
|
238
321
|
const digest = waveSetDigest([{ member: env, planDigest }]);
|
|
239
322
|
const waits = !blocked && pending.length > 0 && (gate === "always" || (gate === "on-destructive" && destructive));
|
|
323
|
+
const approval = waveApproval(at.config, env);
|
|
240
324
|
return {
|
|
241
325
|
wave: k,
|
|
242
326
|
gate,
|
|
@@ -246,7 +330,8 @@ export async function waveView(project, env, ordered, pending, migrations) {
|
|
|
246
330
|
waits,
|
|
247
331
|
planDigest,
|
|
248
332
|
digest,
|
|
249
|
-
approve: `chant approve ${WAVES_PIPELINE} ${waveGateName(WAVES_PIPELINE, k)} --plan ${digest}`,
|
|
333
|
+
approve: `chant approve ${WAVES_PIPELINE} ${waveGateName(WAVES_PIPELINE, k)} --plan ${digest}${signFlag(approval)}`,
|
|
334
|
+
...(approval !== "ledger" ? { approval } : {}),
|
|
250
335
|
promotions,
|
|
251
336
|
blocked,
|
|
252
337
|
};
|
|
@@ -263,6 +348,6 @@ export function describeWave(w, code = (s) => s) {
|
|
|
263
348
|
return `The apply pipeline applies this in wave ${String(w.wave)} with no approval (${at}${why}).`;
|
|
264
349
|
}
|
|
265
350
|
const why = w.gate === "on-destructive" ? `: ${w.destructiveSteps.map((d) => `${d.migration} step ${String(d.step)} (${d.why})`).join(", ")}` : "";
|
|
266
|
-
return `The apply pipeline waits in wave ${String(w.wave)} for an approval of ${code(w.digest)} (${at}${why})
|
|
351
|
+
return `The apply pipeline waits in wave ${String(w.wave)} for an approval of ${code(w.digest)} (${at}${why}).${w.approval && w.approval !== "ledger" ? ` ${describeApprovalMode(w.approval, code)}` : ""}`;
|
|
267
352
|
}
|
|
268
353
|
//# sourceMappingURL=index.js.map
|
package/dist/waves/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/waves/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/waves/index.ts"],"names":[],"mappings":"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"}
|
package/dist/waves/record.d.ts
CHANGED
|
@@ -19,6 +19,16 @@ export interface WaveRecord {
|
|
|
19
19
|
/** For `not-required`: the policy and the commit it was read at. */
|
|
20
20
|
policy?: string;
|
|
21
21
|
base?: string;
|
|
22
|
+
/** Which approvals counted (#48), when not `ledger`. */
|
|
23
|
+
approval?: string;
|
|
24
|
+
/** Under `pr-review`, the review that approved the wave: the pull request, the head it approved and its approvers. */
|
|
25
|
+
review?: {
|
|
26
|
+
pr: number;
|
|
27
|
+
head: string;
|
|
28
|
+
approvers: string[];
|
|
29
|
+
};
|
|
30
|
+
/** Under `sealed`, the signer whose seal verified. */
|
|
31
|
+
signer?: string;
|
|
22
32
|
}
|
|
23
33
|
/** Reads `note.wave` from a history row's note, or undefined. */
|
|
24
34
|
export declare function waveRecordOf(note: string): WaveRecord | undefined;
|
package/dist/waves/record.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/waves/record.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/waves/record.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;AA4B5C,iEAAiE;AACjE,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,CAAC,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoC,CAAC,IAAI,CAAC;QACpE,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACnH,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,KAAK,cAAc;YAAE,OAAO,SAAS,CAAC;QAC7E,OAAO,CAAe,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentius/sql-yodeler",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Schema management and migrations for ClickHouse and Postgres, on chant's sql lexicon",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -41,20 +41,21 @@
|
|
|
41
41
|
"claims": "npm run build && tsx scenarios/run.ts",
|
|
42
42
|
"release": "bash scripts/release.sh",
|
|
43
43
|
"workflows": "tsx .github/src/render.ts",
|
|
44
|
+
"templates:check": "tsx scripts/templates-check.ts",
|
|
44
45
|
"claims:page": "tsx scenarios/status-page.ts",
|
|
45
46
|
"bench": "npm run build && tsx bench/run.ts"
|
|
46
47
|
},
|
|
47
48
|
"dependencies": {
|
|
48
|
-
"@intentius/chant": "^0.
|
|
49
|
-
"@intentius/chant-lexicon-forgejo": "^0.
|
|
50
|
-
"@intentius/chant-lexicon-github": "^0.
|
|
51
|
-
"@intentius/chant-lexicon-gitlab": "^0.
|
|
52
|
-
"@intentius/chant-lexicon-sql": "^0.
|
|
49
|
+
"@intentius/chant": "^0.120.0",
|
|
50
|
+
"@intentius/chant-lexicon-forgejo": "^0.120.0",
|
|
51
|
+
"@intentius/chant-lexicon-github": "^0.120.0",
|
|
52
|
+
"@intentius/chant-lexicon-gitlab": "^0.120.0",
|
|
53
|
+
"@intentius/chant-lexicon-sql": "^0.120.0",
|
|
53
54
|
"tsx": "^4.23.15"
|
|
54
55
|
},
|
|
55
56
|
"devDependencies": {
|
|
56
57
|
"@eslint/js": "^10.0.1",
|
|
57
|
-
"@intentius/chant-lexicon-docker": "^0.
|
|
58
|
+
"@intentius/chant-lexicon-docker": "^0.120.0",
|
|
58
59
|
"@types/node": "^22.20.5",
|
|
59
60
|
"@types/pg": "^8.23.1",
|
|
60
61
|
"ajv": "^8.20.0",
|
|
@@ -419,7 +419,7 @@
|
|
|
419
419
|
"type": "string"
|
|
420
420
|
},
|
|
421
421
|
"why": {
|
|
422
|
-
"description": "The lint rules that class it (destructive, pg-rewrite, pg-lock, ch-mutation, ch-rebuild), or op-step, manual-step.",
|
|
422
|
+
"description": "The lint rules that class it (destructive, pg-rewrite, pg-lock, pg-access, ch-mutation, ch-rebuild, ch-access), or op-step, manual-step.",
|
|
423
423
|
"type": "string"
|
|
424
424
|
}
|
|
425
425
|
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://intentius.io/sql-yodeler/schemas/v1/cleanup.schema.json",
|
|
4
|
+
"title": "yodel cleanup <env> --json",
|
|
5
|
+
"description": "Version 1. What steps kept in the environment (a rebuild's old table, a column migration's old column), each with its retention date and whether it is due, the digest an approval of the drop binds when something is due, and what was dropped. Within a version, fields are only added; a reader ignores fields it does not know.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["environment", "now", "retained", "due", "dropped"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"environment": { "type": "string" },
|
|
11
|
+
"now": { "description": "The server's clock when it was read (ISO 8601).", "type": "string" },
|
|
12
|
+
"retained": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"items": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"additionalProperties": false,
|
|
17
|
+
"required": ["kind", "name", "of", "due", "identity"],
|
|
18
|
+
"properties": {
|
|
19
|
+
"kind": { "enum": ["table", "column"] },
|
|
20
|
+
"name": { "description": "db.table__chant_old, or schema.table.column.", "type": "string" },
|
|
21
|
+
"of": { "description": "The rebuild (db.table) or column migration (schema.table.column) that kept it.", "type": "string" },
|
|
22
|
+
"retainUntil": { "description": "Its retention date (ISO 8601), from its comment; absent when its comment has none, and then it is never due.", "type": "string" },
|
|
23
|
+
"due": { "type": "boolean" },
|
|
24
|
+
"identity": { "description": "The table's UUID, or the column's table oid and attribute number.", "type": "string" },
|
|
25
|
+
"trigger": {
|
|
26
|
+
"description": "Postgres: the dual-write trigger and function dropped with the column.",
|
|
27
|
+
"type": "object",
|
|
28
|
+
"additionalProperties": false,
|
|
29
|
+
"required": ["name", "fn"],
|
|
30
|
+
"properties": { "name": { "type": "string" }, "fn": { "type": "string" } }
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"due": { "type": "integer", "minimum": 0 },
|
|
36
|
+
"planDigest": { "description": "When something is due: the digest an approval of the drop binds.", "type": "string" },
|
|
37
|
+
"approve": { "description": "When something is due and not approved: the command that approves it.", "type": "string" },
|
|
38
|
+
"dropped": { "$ref": "common.schema.json#/$defs/stringList" }
|
|
39
|
+
}
|
|
40
|
+
}
|
package/schemas/init.schema.json
CHANGED
|
@@ -1,31 +1,60 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://intentius.io/sql-yodeler/schemas/v1/init.schema.json",
|
|
4
|
-
"title": "yodel init --from <env> --json",
|
|
5
|
-
"description": "Version 1.
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
"required": ["environment", "dialect", "status", "objects", "schemaFiles", "migration", "recorded", "warnings"],
|
|
9
|
-
"properties": {
|
|
10
|
-
"environment": { "type": "string" },
|
|
11
|
-
"dialect": { "$ref": "common.schema.json#/$defs/dialect" },
|
|
12
|
-
"status": { "const": "adopted" },
|
|
13
|
-
"objects": { "description": "The objects read, as <kind> <name>.", "$ref": "common.schema.json#/$defs/stringList" },
|
|
14
|
-
"schemaFiles": { "description": "The declaration files written, relative to the project.", "$ref": "common.schema.json#/$defs/stringList" },
|
|
15
|
-
"migration": {
|
|
16
|
-
"description": "The baseline migration.",
|
|
4
|
+
"title": "yodel init --from <env> --json, yodel init --baseline <env> --json",
|
|
5
|
+
"description": "Version 1. With --from, what adopting a live database wrote: the declarations, the baseline migration, and the history row that records it applied. With --baseline, the record of the project's baseline in another environment: gated, recorded or failed. Within a version, fields are only added; a reader ignores fields it does not know.",
|
|
6
|
+
"oneOf": [
|
|
7
|
+
{
|
|
17
8
|
"type": "object",
|
|
18
9
|
"additionalProperties": false,
|
|
19
|
-
"required": ["
|
|
20
|
-
"properties": {
|
|
10
|
+
"required": ["environment", "dialect", "status", "objects", "schemaFiles", "migration", "recorded", "warnings"],
|
|
11
|
+
"properties": {
|
|
12
|
+
"environment": { "type": "string" },
|
|
13
|
+
"dialect": { "$ref": "common.schema.json#/$defs/dialect" },
|
|
14
|
+
"status": { "const": "adopted" },
|
|
15
|
+
"objects": { "description": "The objects read, as <kind> <name>.", "$ref": "common.schema.json#/$defs/stringList" },
|
|
16
|
+
"schemaFiles": { "description": "The declaration files written, relative to the project.", "$ref": "common.schema.json#/$defs/stringList" },
|
|
17
|
+
"migration": {
|
|
18
|
+
"description": "The baseline migration.",
|
|
19
|
+
"type": "object",
|
|
20
|
+
"additionalProperties": false,
|
|
21
|
+
"required": ["path", "id", "checksum", "statements"],
|
|
22
|
+
"properties": { "path": { "type": "string" }, "id": { "type": "string" }, "checksum": { "type": "string" }, "statements": { "type": "integer" } }
|
|
23
|
+
},
|
|
24
|
+
"recorded": {
|
|
25
|
+
"description": "The baseline's history row.",
|
|
26
|
+
"type": "object",
|
|
27
|
+
"additionalProperties": false,
|
|
28
|
+
"required": ["history", "seq", "note", "appliedBy"],
|
|
29
|
+
"properties": { "history": { "type": "string" }, "seq": { "type": "integer" }, "note": { "type": "string" }, "appliedBy": { "type": "string" } }
|
|
30
|
+
},
|
|
31
|
+
"warnings": { "$ref": "common.schema.json#/$defs/stringList" }
|
|
32
|
+
}
|
|
21
33
|
},
|
|
22
|
-
|
|
23
|
-
"description": "
|
|
34
|
+
{
|
|
35
|
+
"description": "yodel init --baseline <env>.",
|
|
24
36
|
"type": "object",
|
|
25
37
|
"additionalProperties": false,
|
|
26
|
-
"required": ["
|
|
27
|
-
"properties": {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
38
|
+
"required": ["environment", "dialect", "status", "migration", "planDigest", "op"],
|
|
39
|
+
"properties": {
|
|
40
|
+
"environment": { "type": "string" },
|
|
41
|
+
"dialect": { "$ref": "common.schema.json#/$defs/dialect" },
|
|
42
|
+
"status": { "enum": ["gated", "recorded", "failed"] },
|
|
43
|
+
"migration": {
|
|
44
|
+
"description": "The baseline: the project's first migration.",
|
|
45
|
+
"type": "object",
|
|
46
|
+
"additionalProperties": false,
|
|
47
|
+
"required": ["id", "checksum"],
|
|
48
|
+
"properties": { "id": { "type": "string" }, "checksum": { "type": "string" } }
|
|
49
|
+
},
|
|
50
|
+
"planDigest": { "description": "The record's digest: the baseline, the empty history and the live schema.", "type": "string" },
|
|
51
|
+
"op": { "type": "string" },
|
|
52
|
+
"gate": { "type": "string" },
|
|
53
|
+
"approve": { "type": "string" },
|
|
54
|
+
"gatePlanDigest": { "type": "string" },
|
|
55
|
+
"history": { "description": "Where the baseline's row was recorded (status recorded).", "type": "string" },
|
|
56
|
+
"exitCode": { "type": "integer" }
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
]
|
|
31
60
|
}
|
|
@@ -41,6 +41,10 @@
|
|
|
41
41
|
"description": "The dialect it applies to; both when absent.",
|
|
42
42
|
"$ref": "common.schema.json#/$defs/dialect"
|
|
43
43
|
},
|
|
44
|
+
"schema": {
|
|
45
|
+
"description": "One of the sql lexicon's schema checks, run on each migration's recorded schema.",
|
|
46
|
+
"type": "boolean"
|
|
47
|
+
},
|
|
44
48
|
"configured": {
|
|
45
49
|
"description": "The level in this project.",
|
|
46
50
|
"enum": [
|
package/schemas/new.schema.json
CHANGED
|
@@ -24,7 +24,13 @@
|
|
|
24
24
|
"type": "object",
|
|
25
25
|
"additionalProperties": false,
|
|
26
26
|
"required": ["op", "object", "name", "rules"],
|
|
27
|
-
"properties": {
|
|
27
|
+
"properties": {
|
|
28
|
+
"op": { "type": "string" },
|
|
29
|
+
"object": { "type": "string" },
|
|
30
|
+
"name": { "type": "string" },
|
|
31
|
+
"rules": { "$ref": "common.schema.json#/$defs/stringList" },
|
|
32
|
+
"retain": { "description": "A column rename or type change, or a rebuild: how long it keeps the old column or table after the switch (--retain).", "type": "string" }
|
|
33
|
+
}
|
|
28
34
|
}
|
|
29
35
|
},
|
|
30
36
|
"manual": {
|
|
@@ -38,11 +44,43 @@
|
|
|
38
44
|
}
|
|
39
45
|
},
|
|
40
46
|
"hints": { "$ref": "common.schema.json#/$defs/stringList" },
|
|
41
|
-
"checks": { "type": "array", "items": { "$ref": "common.schema.json#/$defs/check" } }
|
|
47
|
+
"checks": { "type": "array", "items": { "$ref": "common.schema.json#/$defs/check" } },
|
|
48
|
+
"prechecks": {
|
|
49
|
+
"description": "Postgres: the statements that can fail on the rows already there, each with the pre-check yodel apply runs before the first statement; it must return 0.",
|
|
50
|
+
"type": "array",
|
|
51
|
+
"items": {
|
|
52
|
+
"type": "object",
|
|
53
|
+
"additionalProperties": false,
|
|
54
|
+
"required": ["name", "step", "sql", "detail"],
|
|
55
|
+
"properties": {
|
|
56
|
+
"name": { "type": "string" },
|
|
57
|
+
"step": { "type": "integer", "minimum": 0 },
|
|
58
|
+
"sql": { "type": "string" },
|
|
59
|
+
"detail": { "type": "string" }
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"access": {
|
|
64
|
+
"description": "The steps about access control (Postgres: policies, row-level security, roles, grants, revokes, default privileges; ClickHouse: users, roles, row policies, grants, revokes), each with its rule and class; takesAway says why one takes access away.",
|
|
65
|
+
"type": "array",
|
|
66
|
+
"items": {
|
|
67
|
+
"type": "object",
|
|
68
|
+
"additionalProperties": false,
|
|
69
|
+
"required": ["step", "object", "name"],
|
|
70
|
+
"properties": {
|
|
71
|
+
"step": { "type": "integer", "minimum": 0 },
|
|
72
|
+
"object": { "type": "string" },
|
|
73
|
+
"name": { "type": "string" },
|
|
74
|
+
"rule": { "type": "string" },
|
|
75
|
+
"class": { "type": "string" },
|
|
76
|
+
"takesAway": { "type": "string" }
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
42
80
|
}
|
|
43
81
|
},
|
|
44
82
|
"template": {
|
|
45
|
-
"description": "--backfill
|
|
83
|
+
"description": "--backfill's form (backfills/<name>.json, or the file it names) is not there: the template was written to it, and no migration.",
|
|
46
84
|
"type": "object",
|
|
47
85
|
"additionalProperties": false,
|
|
48
86
|
"required": ["written", "template"],
|