@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/config/load.js
CHANGED
|
@@ -2,15 +2,18 @@
|
|
|
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 {
|
|
5
|
+
import { createHash } from "node:crypto";
|
|
6
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
6
7
|
import { join } from "node:path";
|
|
7
8
|
import { pathToFileURL } from "node:url";
|
|
8
9
|
import { parseTopology } from "@intentius/chant-lexicon-sql/clickhouse/topology";
|
|
9
10
|
import { YodelError } from "../project.js";
|
|
10
|
-
import { CI_FORGES, WAVE_GATES } from "./define.js";
|
|
11
|
+
import { APPROVAL_MODES, CI_FORGES, ENVIRONMENT_APPROVAL_MODES, WAVE_GATES } from "./define.js";
|
|
11
12
|
import { notifyConfigProblem } from "../notify/index.js";
|
|
12
13
|
import { checkSources } from "../sources/index.js";
|
|
13
14
|
import { TENANT_NAME } from "../tenants/target.js";
|
|
15
|
+
import { checksProblem } from "../migrations/checks.js";
|
|
16
|
+
import { loginProblem } from "../ci/login.js";
|
|
14
17
|
export const CONFIG_FILE = "yodel.config.ts";
|
|
15
18
|
const isRecord = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
16
19
|
const TOPOLOGY_KINDS = ["single", "cluster", "replicated", "cloud"];
|
|
@@ -43,11 +46,18 @@ function checkEnvironment(value, where) {
|
|
|
43
46
|
if (!isRecord(value))
|
|
44
47
|
throw new YodelError(`${where}: expected an object`);
|
|
45
48
|
for (const k of Object.keys(value)) {
|
|
46
|
-
if (!["topology", "history", "lockTtl", "lockWait", "tenants"].includes(k))
|
|
47
|
-
throw new YodelError(`${where}.${k}: unknown setting (expected topology, history, lockTtl, lockWait, tenants)`);
|
|
49
|
+
if (!["topology", "history", "lockTtl", "lockWait", "tenants", "steps", "access", "approval"].includes(k))
|
|
50
|
+
throw new YodelError(`${where}.${k}: unknown setting (expected topology, history, lockTtl, lockWait, tenants, steps, access, approval)`);
|
|
51
|
+
}
|
|
52
|
+
if (value.approval !== undefined && !ENVIRONMENT_APPROVAL_MODES.includes(value.approval)) {
|
|
53
|
+
throw new YodelError(value.approval === "pr-review"
|
|
54
|
+
? `${where}.approval: pr-review is a wave's (waves[].approval): the pull request's pipeline records the plans a review approves for the apply pipeline's waves, not for the migrations Op; expected ${ENVIRONMENT_APPROVAL_MODES.join(" or ")}`
|
|
55
|
+
: `${where}.approval: ${JSON.stringify(value.approval)} is not an approval mode (expected ${ENVIRONMENT_APPROVAL_MODES.join(" or ")})`);
|
|
48
56
|
}
|
|
49
57
|
if (value.tenants !== undefined)
|
|
50
58
|
checkTenants(value.tenants, `${where}.tenants`);
|
|
59
|
+
if (value.steps !== undefined)
|
|
60
|
+
checkApplySteps(value.steps, `${where}.steps`);
|
|
51
61
|
if (value.topology !== undefined)
|
|
52
62
|
checkTopology(value.topology, `${where}.topology`);
|
|
53
63
|
if (value.history !== undefined) {
|
|
@@ -66,6 +76,8 @@ function checkEnvironment(value, where) {
|
|
|
66
76
|
if (value.lockWait !== undefined && !(typeof value.lockWait === "number" && Number.isFinite(value.lockWait) && value.lockWait >= 0)) {
|
|
67
77
|
throw new YodelError(`${where}.lockWait: expected a number of seconds, 0 or more`);
|
|
68
78
|
}
|
|
79
|
+
if (value.access !== undefined && typeof value.access !== "boolean")
|
|
80
|
+
throw new YodelError(`${where}.access: expected true or false`);
|
|
69
81
|
return value;
|
|
70
82
|
}
|
|
71
83
|
function checkTenants(value, where) {
|
|
@@ -82,6 +94,50 @@ function checkTenants(value, where) {
|
|
|
82
94
|
throw new YodelError(`${where}: expected a list of tenant names, { file: "<path>" } or { query: "<SQL>" }`);
|
|
83
95
|
}
|
|
84
96
|
}
|
|
97
|
+
const STEP_NAME = /^[a-z0-9][a-z0-9_-]*$/;
|
|
98
|
+
function checkApplySteps(value, where) {
|
|
99
|
+
if (!isRecord(value))
|
|
100
|
+
throw new YodelError(`${where}: expected { before?: [...], after?: [...] }`);
|
|
101
|
+
for (const k of Object.keys(value))
|
|
102
|
+
if (k !== "before" && k !== "after")
|
|
103
|
+
throw new YodelError(`${where}.${k}: unknown setting (expected before, after)`);
|
|
104
|
+
const seen = new Set();
|
|
105
|
+
for (const when of ["before", "after"]) {
|
|
106
|
+
const list = value[when];
|
|
107
|
+
if (list === undefined)
|
|
108
|
+
continue;
|
|
109
|
+
if (!Array.isArray(list))
|
|
110
|
+
throw new YodelError(`${where}.${when}: expected a list of steps`);
|
|
111
|
+
list.forEach((step, i) => {
|
|
112
|
+
const at = `${where}.${when}[${String(i)}]`;
|
|
113
|
+
if (!isRecord(step))
|
|
114
|
+
throw new YodelError(`${at}: expected { name, sql } or { name, command }`);
|
|
115
|
+
for (const k of Object.keys(step))
|
|
116
|
+
if (!["name", "sql", "expect", "command", "onFailure"].includes(k))
|
|
117
|
+
throw new YodelError(`${at}.${k}: unknown setting (expected name, sql, expect, command, onFailure)`);
|
|
118
|
+
if (typeof step.name !== "string" || !STEP_NAME.test(step.name))
|
|
119
|
+
throw new YodelError(`${at}.name: lowercase letters, digits, - and _, got ${JSON.stringify(step.name)}`);
|
|
120
|
+
if (seen.has(step.name))
|
|
121
|
+
throw new YodelError(`${at}.name: two steps are named ${step.name}`);
|
|
122
|
+
seen.add(step.name);
|
|
123
|
+
const sql = typeof step.sql === "string" && step.sql.trim() !== "";
|
|
124
|
+
const command = typeof step.command === "string" && step.command.trim() !== "";
|
|
125
|
+
if (sql === command)
|
|
126
|
+
throw new YodelError(`${at} (${step.name}): give sql or command, one of them`);
|
|
127
|
+
if (step.expect !== undefined) {
|
|
128
|
+
if (!sql)
|
|
129
|
+
throw new YodelError(`${at}.expect: only a sql step has an expect`);
|
|
130
|
+
const problem = checksProblem([{ name: step.name, sql: step.sql, expect: step.expect }]);
|
|
131
|
+
if (problem)
|
|
132
|
+
throw new YodelError(`${at}.expect: ${problem.replace(/^checks\[0\] \([^)]*\): /, "")}`);
|
|
133
|
+
}
|
|
134
|
+
if (step.onFailure !== undefined && step.onFailure !== "fail" && step.onFailure !== "approve")
|
|
135
|
+
throw new YodelError(`${at}.onFailure: "fail" or "approve", got ${JSON.stringify(step.onFailure)}`);
|
|
136
|
+
if (step.onFailure === "approve" && when === "after")
|
|
137
|
+
throw new YodelError(`${at}.onFailure: an after step runs once the migrations are applied, so there is nothing left to hold for approval; use "fail"`);
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
85
141
|
const RULE_ID = /^[a-z0-9][a-z0-9_-]*$/;
|
|
86
142
|
function checkPolicy(value, where, profiles) {
|
|
87
143
|
if (!isRecord(value))
|
|
@@ -147,8 +203,11 @@ function checkWaves(value, where, profiles) {
|
|
|
147
203
|
if (!isRecord(wave))
|
|
148
204
|
throw new YodelError(`${at}: expected { env, gate }`);
|
|
149
205
|
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)`);
|
|
206
|
+
if (!["env", "gate", "requires", "shares", "approval"].includes(k))
|
|
207
|
+
throw new YodelError(`${at}.${k}: unknown setting (expected env, gate, requires, shares, approval)`);
|
|
208
|
+
if (wave.approval !== undefined && !APPROVAL_MODES.includes(wave.approval)) {
|
|
209
|
+
throw new YodelError(`${at}.approval: ${JSON.stringify(wave.approval)} is not an approval mode (expected ${APPROVAL_MODES.join(", ")})`);
|
|
210
|
+
}
|
|
152
211
|
if (wave.shares !== undefined && !(typeof wave.shares === "number" && Number.isInteger(wave.shares) && wave.shares >= 1))
|
|
153
212
|
throw new YodelError(`${at}.shares: expected a whole number from 1`);
|
|
154
213
|
const env = wave.env;
|
|
@@ -177,10 +236,17 @@ function checkWaves(value, where, profiles) {
|
|
|
177
236
|
const CI_IMAGE = /^[^\s@]+@sha256:[0-9a-f]{64}$/;
|
|
178
237
|
function checkCi(value, where) {
|
|
179
238
|
if (!isRecord(value))
|
|
180
|
-
throw new YodelError(`${where}: expected { forges?, jobs?, image? }`);
|
|
239
|
+
throw new YodelError(`${where}: expected { forges?, jobs?, image?, resume?, login? }`);
|
|
181
240
|
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)`);
|
|
241
|
+
if (!["forges", "jobs", "image", "resume", "login"].includes(k))
|
|
242
|
+
throw new YodelError(`${where}.${k}: unknown setting (expected forges, jobs, image, resume, login)`);
|
|
243
|
+
const login = value.login === undefined ? undefined : loginProblem(value.login, `${where}.login`);
|
|
244
|
+
if (login)
|
|
245
|
+
throw new YodelError(login);
|
|
246
|
+
const resume = value.resume;
|
|
247
|
+
if (resume !== undefined && !(isRecord(resume) && Object.keys(resume).every((k) => k === "schedule") && typeof resume.schedule === "string" && resume.schedule.trim().split(/\s+/).length === 5)) {
|
|
248
|
+
throw new YodelError(`${where}.resume: { schedule } with a five-field cron, such as { schedule: "*/10 * * * *" }`);
|
|
249
|
+
}
|
|
184
250
|
if (value.image !== undefined && (typeof value.image !== "string" || !CI_IMAGE.test(value.image))) {
|
|
185
251
|
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
252
|
}
|
|
@@ -237,7 +303,9 @@ export async function loadYodelConfig(dir, profiles) {
|
|
|
237
303
|
return undefined;
|
|
238
304
|
let mod;
|
|
239
305
|
try {
|
|
240
|
-
|
|
306
|
+
// The file's hash in the URL: a process that loads it again after an edit (the MCP server, a claim) reads the edit, not the first import.
|
|
307
|
+
const version = createHash("sha256").update(readFileSync(path)).digest("hex").slice(0, 16);
|
|
308
|
+
mod = (await import(`${pathToFileURL(path).href}?yodel=${version}`));
|
|
241
309
|
}
|
|
242
310
|
catch (e) {
|
|
243
311
|
throw new YodelError(`${path}: ${e instanceof Error ? e.message : String(e)}`);
|
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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"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* | history database | `environments.<env>.history.database` | | `YODEL_HISTORY_DATABASE`| `yodeler`|
|
|
9
9
|
* | lock TTL | `environments.<env>.lockTtl` (seconds) | | `YODEL_LOCK_TTL` | 900 |
|
|
10
10
|
* | lock wait | `environments.<env>.lockWait` (seconds)| | `YODEL_LOCK_WAIT` | 0 |
|
|
11
|
+
* | access | `environments.<env>.access` | `sql.profiles.<env>.access` | | off |
|
|
11
12
|
*
|
|
12
13
|
* `yodel apply --lock-wait <duration>` sets the lock wait over all three.
|
|
13
14
|
*
|
|
@@ -54,3 +55,22 @@ export declare const describeSettingsTopology: (s: Pick<EnvironmentSettings, "to
|
|
|
54
55
|
* (an unset profile topology is a single node, as chant renders it).
|
|
55
56
|
*/
|
|
56
57
|
export declare function declarativeTopologyRefusal(project: Pick<Project, "config" | "yodel">, name: string): YodelError | undefined;
|
|
58
|
+
/** Whether yodel manages access control in environment `name`, and where that came from (`yodel.config.ts`, `sql.profiles.<env>.access` or `default`). */
|
|
59
|
+
export declare function environmentAccess(own: {
|
|
60
|
+
access?: boolean;
|
|
61
|
+
} | undefined, profile: {
|
|
62
|
+
access?: unknown;
|
|
63
|
+
} | undefined, name: string): {
|
|
64
|
+
access: boolean;
|
|
65
|
+
source: string;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* The declarative apply (the project's ApplyOp, run by `chant run`) and
|
|
69
|
+
* `chant lifecycle diff` read chant.config.ts themselves, so an `access`
|
|
70
|
+
* set in yodel.config.ts that chant.config.ts does not say would be
|
|
71
|
+
* ignored there. It is refused unless the profile says the same; yodel's own
|
|
72
|
+
* plan, `yodel new`, lint and `yodel init --from` use yodel.config.ts's.
|
|
73
|
+
*/
|
|
74
|
+
export declare function declarativeAccessRefusal(project: Pick<Project, "configPath" | "yodel" | "profileAccess">, name: string): YodelError | undefined;
|
|
75
|
+
/** The declarative path's refusals for environment `name`: on ClickHouse the topology's, then on either dialect the access switch's. */
|
|
76
|
+
export declare const declarativeRefusal: (project: Pick<Project, "config" | "configPath" | "yodel" | "profileAccess" | "dialect">, name: string) => YodelError | undefined;
|
package/dist/config/settings.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* | history database | `environments.<env>.history.database` | | `YODEL_HISTORY_DATABASE`| `yodeler`|
|
|
9
9
|
* | lock TTL | `environments.<env>.lockTtl` (seconds) | | `YODEL_LOCK_TTL` | 900 |
|
|
10
10
|
* | lock wait | `environments.<env>.lockWait` (seconds)| | `YODEL_LOCK_WAIT` | 0 |
|
|
11
|
+
* | access | `environments.<env>.access` | `sql.profiles.<env>.access` | | off |
|
|
11
12
|
*
|
|
12
13
|
* `yodel apply --lock-wait <duration>` sets the lock wait over all three.
|
|
13
14
|
*
|
|
@@ -118,5 +119,32 @@ export function declarativeTopologyRefusal(project, name) {
|
|
|
118
119
|
return new YodelError(`${CONFIG_FILE} sets environments.${name}.topology to ${topologyLabel(ours)}, but the declarative path plans and applies through chant, which reads sql.profiles.${name}.topology ` +
|
|
119
120
|
`(${profile === undefined ? "unset, so a single node" : topologyLabel(chants)}). Set sql.profiles.${name}.topology to the same in chant.config.ts, or leave the topology to chant.config.ts.`);
|
|
120
121
|
}
|
|
122
|
+
/** Whether yodel manages access control in environment `name`, and where that came from (`yodel.config.ts`, `sql.profiles.<env>.access` or `default`). */
|
|
123
|
+
export function environmentAccess(own, profile, name) {
|
|
124
|
+
if (own?.access !== undefined)
|
|
125
|
+
return { access: own.access, source: CONFIG_FILE };
|
|
126
|
+
if (typeof profile?.access === "boolean")
|
|
127
|
+
return { access: profile.access, source: `sql.profiles.${name}.access` };
|
|
128
|
+
return { access: false, source: "default" };
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* The declarative apply (the project's ApplyOp, run by `chant run`) and
|
|
132
|
+
* `chant lifecycle diff` read chant.config.ts themselves, so an `access`
|
|
133
|
+
* set in yodel.config.ts that chant.config.ts does not say would be
|
|
134
|
+
* ignored there. It is refused unless the profile says the same; yodel's own
|
|
135
|
+
* plan, `yodel new`, lint and `yodel init --from` use yodel.config.ts's.
|
|
136
|
+
*/
|
|
137
|
+
export function declarativeAccessRefusal(project, name) {
|
|
138
|
+
const own = project.yodel?.config.environments?.[name]?.access;
|
|
139
|
+
if (own === undefined)
|
|
140
|
+
return undefined;
|
|
141
|
+
const chants = project.profileAccess?.[name] === true;
|
|
142
|
+
if (own === chants)
|
|
143
|
+
return undefined;
|
|
144
|
+
return new YodelError(`${CONFIG_FILE} sets environments.${name}.access to ${String(own)}, but the declarative path applies through chant, which reads sql.profiles.${name}.access in ${project.configPath} ` +
|
|
145
|
+
`(${project.profileAccess?.[name] === undefined ? "unset, so off" : String(chants)}). Set sql.profiles.${name}.access to ${String(own)} as well, or leave access to chant.config.ts.`);
|
|
146
|
+
}
|
|
147
|
+
/** The declarative path's refusals for environment `name`: on ClickHouse the topology's, then on either dialect the access switch's. */
|
|
148
|
+
export const declarativeRefusal = (project, name) => (project.dialect === "clickhouse" ? declarativeTopologyRefusal(project, name) : undefined) ?? declarativeAccessRefusal(project, name);
|
|
121
149
|
const sorted = (t) => Object.entries(t).sort(([a], [b]) => a.localeCompare(b));
|
|
122
150
|
//# sourceMappingURL=settings.js.map
|
|
@@ -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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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The reader and the writer of an environment (#50), for a project's
|
|
3
|
+
* `chant.config.ts`:
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { credentials } from "@intentius/sql-yodeler";
|
|
7
|
+
*
|
|
8
|
+
* profiles: {
|
|
9
|
+
* dev: { url: "postgres://127.0.0.1:5432/app", ...credentials("dev", "postgres"), schemas: ["app"] },
|
|
10
|
+
* prod: {
|
|
11
|
+
* url: "postgres://db.abc.us-east-1.rds.amazonaws.com:5432/app",
|
|
12
|
+
* ...credentials("prod", "postgres", { writer: { password: { token: "rds-iam" } } }),
|
|
13
|
+
* schemas: ["app"],
|
|
14
|
+
* },
|
|
15
|
+
* }
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* `YODEL_CREDENTIALS` picks the role a process connects as: the reader
|
|
19
|
+
* unless it is `writer` (every environment) or `writer:<env>` (that one).
|
|
20
|
+
* Only an environment's apply job sets it. Each role reads its user and its
|
|
21
|
+
* password from a variable, by default `<ENV>_<DIALECT>_READER_USER`,
|
|
22
|
+
* `..._READER_PASSWORD`, `..._WRITER_USER` and `..._WRITER_PASSWORD`
|
|
23
|
+
* (`DEV_POSTGRES_READER_USER`), the names `yodel ci` maps the forge's
|
|
24
|
+
* secrets to. A role's password can instead be a short-lived token, minted
|
|
25
|
+
* by chant's sql lexicon when a connection needs it: `{ token: "rds-iam" }`,
|
|
26
|
+
* `{ token: "cloud-sql-iam" }` or `{ token: "entra" }` (Postgres), or
|
|
27
|
+
* `{ token: "command", command: ["./mint.sh"] }` (either dialect).
|
|
28
|
+
*
|
|
29
|
+
* The profile carries both roles under a symbol chant does not read, so
|
|
30
|
+
* yodel sees the reader and the writer from one evaluation of the config:
|
|
31
|
+
* it refuses (exit 4) an environment whose two roles are the same user or
|
|
32
|
+
* read the same variable, and `yodel ci` gives each job the variables, and
|
|
33
|
+
* the cloud identity, of the role it runs as.
|
|
34
|
+
*/
|
|
35
|
+
/** A value read from an environment variable, as chant's profiles name one. */
|
|
36
|
+
export interface EnvRef {
|
|
37
|
+
env: string;
|
|
38
|
+
}
|
|
39
|
+
/** A short-lived password, minted by chant's sql lexicon when a connection needs one. */
|
|
40
|
+
export type TokenSource = {
|
|
41
|
+
token: "rds-iam";
|
|
42
|
+
region?: string;
|
|
43
|
+
ttlSeconds?: number;
|
|
44
|
+
} | {
|
|
45
|
+
token: "cloud-sql-iam";
|
|
46
|
+
ttlSeconds?: number;
|
|
47
|
+
} | {
|
|
48
|
+
token: "entra";
|
|
49
|
+
ttlSeconds?: number;
|
|
50
|
+
} | {
|
|
51
|
+
token: "command";
|
|
52
|
+
command: string[];
|
|
53
|
+
ttlSeconds?: number;
|
|
54
|
+
};
|
|
55
|
+
/** The token sources that mint from a cloud identity, which a CI job gets over OIDC. */
|
|
56
|
+
export type CloudToken = Exclude<TokenSource["token"], "command">;
|
|
57
|
+
export declare const CLOUD_TOKENS: readonly CloudToken[];
|
|
58
|
+
export type Role = "reader" | "writer";
|
|
59
|
+
export declare const ROLES: readonly Role[];
|
|
60
|
+
/** One role's user and password. Either left out is read from its default variable. */
|
|
61
|
+
export interface RoleCredentials {
|
|
62
|
+
user?: EnvRef;
|
|
63
|
+
password?: EnvRef | TokenSource;
|
|
64
|
+
}
|
|
65
|
+
export type CredentialsDialect = "clickhouse" | "postgres";
|
|
66
|
+
/** Both roles of one environment, as {@link credentials} recorded them. */
|
|
67
|
+
export interface Credentials {
|
|
68
|
+
env: string;
|
|
69
|
+
dialect: CredentialsDialect;
|
|
70
|
+
/** The role this process connects as. */
|
|
71
|
+
role: Role;
|
|
72
|
+
reader: {
|
|
73
|
+
user: EnvRef;
|
|
74
|
+
password: EnvRef | TokenSource;
|
|
75
|
+
};
|
|
76
|
+
writer: {
|
|
77
|
+
user: EnvRef;
|
|
78
|
+
password: EnvRef | TokenSource;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/** Where a profile made by {@link credentials} keeps both roles. A symbol, so chant's strict profile schema does not see it. */
|
|
82
|
+
export declare const CREDENTIALS: unique symbol;
|
|
83
|
+
/** What {@link credentials} returns: the chosen role's `user` and `password`, to spread into the profile. */
|
|
84
|
+
export interface ProfileCredentials {
|
|
85
|
+
user: EnvRef;
|
|
86
|
+
password: EnvRef | TokenSource;
|
|
87
|
+
[CREDENTIALS]: Credentials;
|
|
88
|
+
}
|
|
89
|
+
/** DEV_POSTGRES for dev on Postgres: what an environment's variables start with. */
|
|
90
|
+
export declare const credentialsPrefix: (env: string, dialect: CredentialsDialect) => string;
|
|
91
|
+
/** The role `YODEL_CREDENTIALS` picks for `env`: the writer under `writer` or `writer:<env>`, else the reader. */
|
|
92
|
+
export declare function roleOf(env: string, value?: string | undefined): Role;
|
|
93
|
+
/**
|
|
94
|
+
* The profile's `user` and `password` for the role `YODEL_CREDENTIALS`
|
|
95
|
+
* picks, with both roles recorded for yodel. `roles` replaces a role's
|
|
96
|
+
* user or password; what it leaves out is read from the default variable.
|
|
97
|
+
*/
|
|
98
|
+
export declare function credentials(env: string, dialect: CredentialsDialect, roles?: {
|
|
99
|
+
reader?: RoleCredentials;
|
|
100
|
+
writer?: RoleCredentials;
|
|
101
|
+
}): ProfileCredentials;
|
|
102
|
+
/** The roles a profile made by {@link credentials} carries; undefined for any other profile. */
|
|
103
|
+
export declare function credentialsOf(profile: unknown): Credentials | undefined;
|
|
104
|
+
/** The variables a role reads its user and password from (a token source reads none). */
|
|
105
|
+
export declare function roleVariables(c: Credentials, role: Role): string[];
|
|
106
|
+
/** The cloud token source a role's password is minted by, if it is one. */
|
|
107
|
+
export declare function cloudToken(c: Credentials, role: Role): CloudToken | undefined;
|
|
108
|
+
/** How a role's password is got, for a message: `DEV_POSTGRES_READER_PASSWORD` or `a rds-iam token`. */
|
|
109
|
+
export declare function describePassword(p: EnvRef | TokenSource): string;
|
|
110
|
+
/**
|
|
111
|
+
* Why environment `c.env`'s reader and writer are not two identities, or
|
|
112
|
+
* undefined when they are: both name the same user variable, both users
|
|
113
|
+
* resolve to the same name in `processEnv`, or both read the same password
|
|
114
|
+
* variable (a job holding the reader's would hold the writer's). The
|
|
115
|
+
* message names the variables and the user.
|
|
116
|
+
*/
|
|
117
|
+
export declare function sharedCredentials(c: Credentials, processEnv?: NodeJS.ProcessEnv): string | undefined;
|
|
118
|
+
/** The first refusal among a config's profiles, checked in order; see {@link sharedCredentials}. */
|
|
119
|
+
export declare function sharedCredentialsIn(profiles: Record<string, unknown>, processEnv?: NodeJS.ProcessEnv): string | undefined;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The reader and the writer of an environment (#50), for a project's
|
|
3
|
+
* `chant.config.ts`:
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { credentials } from "@intentius/sql-yodeler";
|
|
7
|
+
*
|
|
8
|
+
* profiles: {
|
|
9
|
+
* dev: { url: "postgres://127.0.0.1:5432/app", ...credentials("dev", "postgres"), schemas: ["app"] },
|
|
10
|
+
* prod: {
|
|
11
|
+
* url: "postgres://db.abc.us-east-1.rds.amazonaws.com:5432/app",
|
|
12
|
+
* ...credentials("prod", "postgres", { writer: { password: { token: "rds-iam" } } }),
|
|
13
|
+
* schemas: ["app"],
|
|
14
|
+
* },
|
|
15
|
+
* }
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* `YODEL_CREDENTIALS` picks the role a process connects as: the reader
|
|
19
|
+
* unless it is `writer` (every environment) or `writer:<env>` (that one).
|
|
20
|
+
* Only an environment's apply job sets it. Each role reads its user and its
|
|
21
|
+
* password from a variable, by default `<ENV>_<DIALECT>_READER_USER`,
|
|
22
|
+
* `..._READER_PASSWORD`, `..._WRITER_USER` and `..._WRITER_PASSWORD`
|
|
23
|
+
* (`DEV_POSTGRES_READER_USER`), the names `yodel ci` maps the forge's
|
|
24
|
+
* secrets to. A role's password can instead be a short-lived token, minted
|
|
25
|
+
* by chant's sql lexicon when a connection needs it: `{ token: "rds-iam" }`,
|
|
26
|
+
* `{ token: "cloud-sql-iam" }` or `{ token: "entra" }` (Postgres), or
|
|
27
|
+
* `{ token: "command", command: ["./mint.sh"] }` (either dialect).
|
|
28
|
+
*
|
|
29
|
+
* The profile carries both roles under a symbol chant does not read, so
|
|
30
|
+
* yodel sees the reader and the writer from one evaluation of the config:
|
|
31
|
+
* it refuses (exit 4) an environment whose two roles are the same user or
|
|
32
|
+
* read the same variable, and `yodel ci` gives each job the variables, and
|
|
33
|
+
* the cloud identity, of the role it runs as.
|
|
34
|
+
*/
|
|
35
|
+
export const CLOUD_TOKENS = ["rds-iam", "cloud-sql-iam", "entra"];
|
|
36
|
+
export const ROLES = ["reader", "writer"];
|
|
37
|
+
/** Where a profile made by {@link credentials} keeps both roles. A symbol, so chant's strict profile schema does not see it. */
|
|
38
|
+
export const CREDENTIALS = Symbol.for("@intentius/sql-yodeler/credentials");
|
|
39
|
+
/** DEV_POSTGRES for dev on Postgres: what an environment's variables start with. */
|
|
40
|
+
export const credentialsPrefix = (env, dialect) => `${env.toUpperCase().replace(/[^A-Z0-9]/g, "_")}_${dialect.toUpperCase()}`;
|
|
41
|
+
/** The role `YODEL_CREDENTIALS` picks for `env`: the writer under `writer` or `writer:<env>`, else the reader. */
|
|
42
|
+
export function roleOf(env, value = process.env.YODEL_CREDENTIALS) {
|
|
43
|
+
return value === "writer" || value === `writer:${env}` ? "writer" : "reader";
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The profile's `user` and `password` for the role `YODEL_CREDENTIALS`
|
|
47
|
+
* picks, with both roles recorded for yodel. `roles` replaces a role's
|
|
48
|
+
* user or password; what it leaves out is read from the default variable.
|
|
49
|
+
*/
|
|
50
|
+
export function credentials(env, dialect, roles = {}) {
|
|
51
|
+
const prefix = credentialsPrefix(env, dialect);
|
|
52
|
+
const of = (role) => {
|
|
53
|
+
const r = roles[role] ?? {};
|
|
54
|
+
const upper = role.toUpperCase();
|
|
55
|
+
return { user: r.user ?? { env: `${prefix}_${upper}_USER` }, password: r.password ?? { env: `${prefix}_${upper}_PASSWORD` } };
|
|
56
|
+
};
|
|
57
|
+
const role = roleOf(env);
|
|
58
|
+
const recorded = { env, dialect, role, reader: of("reader"), writer: of("writer") };
|
|
59
|
+
const chosen = recorded[role];
|
|
60
|
+
return { user: chosen.user, password: chosen.password, [CREDENTIALS]: recorded };
|
|
61
|
+
}
|
|
62
|
+
/** The roles a profile made by {@link credentials} carries; undefined for any other profile. */
|
|
63
|
+
export function credentialsOf(profile) {
|
|
64
|
+
if (typeof profile !== "object" || profile === null)
|
|
65
|
+
return undefined;
|
|
66
|
+
const c = profile[CREDENTIALS];
|
|
67
|
+
return typeof c === "object" && c !== null ? c : undefined;
|
|
68
|
+
}
|
|
69
|
+
const isEnvRef = (v) => typeof v === "object" && v !== null && typeof v.env === "string";
|
|
70
|
+
/** The variables a role reads its user and password from (a token source reads none). */
|
|
71
|
+
export function roleVariables(c, role) {
|
|
72
|
+
const r = c[role];
|
|
73
|
+
return [r.user, r.password].filter(isEnvRef).map((v) => v.env);
|
|
74
|
+
}
|
|
75
|
+
/** The cloud token source a role's password is minted by, if it is one. */
|
|
76
|
+
export function cloudToken(c, role) {
|
|
77
|
+
const p = c[role].password;
|
|
78
|
+
return !isEnvRef(p) && CLOUD_TOKENS.includes(p.token) ? p.token : undefined;
|
|
79
|
+
}
|
|
80
|
+
/** How a role's password is got, for a message: `DEV_POSTGRES_READER_PASSWORD` or `a rds-iam token`. */
|
|
81
|
+
export function describePassword(p) {
|
|
82
|
+
if (isEnvRef(p))
|
|
83
|
+
return p.env;
|
|
84
|
+
return p.token === "command" ? `a command token (${p.command[0] ?? ""})` : `a ${p.token} token`;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Why environment `c.env`'s reader and writer are not two identities, or
|
|
88
|
+
* undefined when they are: both name the same user variable, both users
|
|
89
|
+
* resolve to the same name in `processEnv`, or both read the same password
|
|
90
|
+
* variable (a job holding the reader's would hold the writer's). The
|
|
91
|
+
* message names the variables and the user.
|
|
92
|
+
*/
|
|
93
|
+
export function sharedCredentials(c, processEnv = process.env) {
|
|
94
|
+
const where = `sql.profiles.${c.env}`;
|
|
95
|
+
const { reader, writer } = c;
|
|
96
|
+
if (reader.user.env === writer.user.env) {
|
|
97
|
+
return `${where}: the reader and the writer read their user from the same variable, ${reader.user.env}, so a job that holds the reader holds the writer. Give the writer a user of its own (${credentialsPrefix(c.env, c.dialect)}_WRITER_USER).`;
|
|
98
|
+
}
|
|
99
|
+
const r = processEnv[reader.user.env];
|
|
100
|
+
const w = processEnv[writer.user.env];
|
|
101
|
+
if (r !== undefined && r !== "" && r === w) {
|
|
102
|
+
return `${where}: the reader (${reader.user.env}) and the writer (${writer.user.env}) are the same user, ${r}, so a job that holds the reader can write. Give each role its own database user.`;
|
|
103
|
+
}
|
|
104
|
+
if (isEnvRef(reader.password) && isEnvRef(writer.password) && reader.password.env === writer.password.env) {
|
|
105
|
+
return `${where}: the reader and the writer read their password from the same variable, ${reader.password.env}, so a job that holds the reader holds the writer's password. Give the writer a password variable of its own.`;
|
|
106
|
+
}
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
/** The first refusal among a config's profiles, checked in order; see {@link sharedCredentials}. */
|
|
110
|
+
export function sharedCredentialsIn(profiles, processEnv = process.env) {
|
|
111
|
+
for (const profile of Object.values(profiles)) {
|
|
112
|
+
const c = credentialsOf(profile);
|
|
113
|
+
const why = c ? sharedCredentials(c, processEnv) : undefined;
|
|
114
|
+
if (why)
|
|
115
|
+
return why;
|
|
116
|
+
}
|
|
117
|
+
return undefined;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAiBH,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;AAIzF,MAAM,CAAC,MAAM,KAAK,GAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAoB3D,gIAAgI;AAChI,MAAM,CAAC,MAAM,WAAW,GAAkB,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAU,CAAC;AASpG,oFAAoF;AACpF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,OAA2B,EAAU,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;AAElK,kHAAkH;AAClH,MAAM,UAAU,MAAM,CAAC,GAAW,EAAE,QAA4B,OAAO,CAAC,GAAG,CAAC,iBAAiB;IAC3F,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC/E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,OAA2B,EAAE,QAAgE,EAAE;IACtI,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,CAAC,IAAU,EAAE,EAAE;QACxB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,WAAW,EAAE,EAAE,CAAC;IAChI,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAgB,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;IACjG,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC;AACnF,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACtE,MAAM,CAAC,GAAI,OAAmC,CAAC,WAAW,CAAC,CAAC;IAC5D,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAE,CAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,OAAQ,CAAuB,CAAC,GAAG,KAAK,QAAQ,CAAC;AAEtI,yFAAyF;AACzF,MAAM,UAAU,aAAa,CAAC,CAAc,EAAE,IAAU;IACtD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjE,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CAAC,CAAc,EAAE,IAAU;IACnD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAK,YAAkC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,KAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;AACrH,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,gBAAgB,CAAC,CAAuB;IACtD,IAAI,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC;IAC9B,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,QAAQ,CAAC;AAClG,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAc,EAAE,aAAgC,OAAO,CAAC,GAAG;IAC3F,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,OAAO,GAAG,KAAK,uEAAuE,MAAM,CAAC,IAAI,CAAC,GAAG,yFAAyF,iBAAiB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACpP,CAAC;IACD,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,GAAG,KAAK,iBAAiB,MAAM,CAAC,IAAI,CAAC,GAAG,qBAAqB,MAAM,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,mFAAmF,CAAC;IAClM,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC1G,OAAO,GAAG,KAAK,2EAA2E,MAAM,CAAC,QAAQ,CAAC,GAAG,+GAA+G,CAAC;IAC/N,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,mBAAmB,CAAC,QAAiC,EAAE,aAAgC,OAAO,CAAC,GAAG;IAChH,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
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, a migration the environment it must run on first has not applied"],
|
|
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, an environment whose reader and writer are one identity"],
|
|
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,uSAAuS,CAAC;IACvT,CAAC,WAAW,EAAE,8BAA8B,CAAC;CAC9C,CAAC;AAEF,sFAAsF;AACtF,MAAM,CAAC,MAAM,iBAAiB,GAC5B,4NAA4N,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,11 @@
|
|
|
7
7
|
* ```
|
|
8
8
|
*/
|
|
9
9
|
export { defineConfig } from "./config/define.js";
|
|
10
|
-
export
|
|
10
|
+
export { credentials, roleOf } from "./credentials.js";
|
|
11
|
+
export type { CloudToken, Credentials, EnvRef, ProfileCredentials, Role, RoleCredentials, TokenSource } from "./credentials.js";
|
|
12
|
+
export type { ApprovalMode, AwsLogin, AzureLogin, CiLogin, CloudLogins, EnvironmentApprovalMode, EnvironmentConfig, GcpLogin, PolicyConfig, PolicyMigration, PolicyPlan, PolicyRule, PolicyStep, NotifyConfig, Topology, TopologySetting, YodelConfig } from "./config/define.js";
|
|
11
13
|
export { verifyWebhook, signWebhook } from "./notify/verify.js";
|
|
12
14
|
export type { NotifyEvent, NotifyEventKind } from "./notify/index.js";
|
|
13
15
|
export type { DdlSource } from "./sources/index.js";
|
|
16
|
+
export { defineTests, expectError, expectRows, expectValue } from "./testing/define.js";
|
|
17
|
+
export type { ErrorExpectation, Expectation, RowsExpectation, TestCase, ValueExpectation } from "./testing/define.js";
|
package/dist/index.js
CHANGED
|
@@ -7,5 +7,7 @@
|
|
|
7
7
|
* ```
|
|
8
8
|
*/
|
|
9
9
|
export { defineConfig } from "./config/define.js";
|
|
10
|
+
export { credentials, roleOf } from "./credentials.js";
|
|
10
11
|
export { verifyWebhook, signWebhook } from "./notify/verify.js";
|
|
12
|
+
export { defineTests, expectError, expectRows, expectValue } from "./testing/define.js";
|
|
11
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC"}
|