@intentius/sql-yodeler 0.2.0 → 0.4.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/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 +87 -0
- package/dist/chant/access.js +169 -0
- package/dist/chant/access.js.map +1 -0
- package/dist/chant/build.js +7 -0
- package/dist/chant/build.js.map +1 -1
- 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/render.d.ts +333 -0
- package/dist/ci/render.js +885 -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/cleanup/index.d.ts +86 -0
- package/dist/cleanup/index.js +207 -0
- package/dist/cleanup/index.js.map +1 -0
- package/dist/commands/apply.d.ts +113 -0
- package/dist/commands/apply.js +370 -30
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/approve.d.ts +13 -0
- package/dist/commands/approve.js +239 -13
- 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 +130 -0
- package/dist/commands/ci.js.map +1 -0
- package/dist/commands/cleanup.d.ts +13 -0
- package/dist/commands/cleanup.js +138 -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/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 +52 -5
- package/dist/commands/drift.js.map +1 -1
- package/dist/commands/index.js +16 -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 +39 -7
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/new.js +133 -34
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/override.js +48 -16
- package/dist/commands/override.js.map +1 -1
- package/dist/commands/plan.js +47 -6
- 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/commands/test.d.ts +3 -0
- package/dist/commands/test.js +164 -0
- package/dist/commands/test.js.map +1 -0
- 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 +240 -3
- package/dist/config/define.js +4 -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 +156 -7
- package/dist/config/load.js.map +1 -1
- package/dist/config/settings.d.ts +22 -1
- package/dist/config/settings.js +34 -2
- 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/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 +8 -1
- package/dist/index.js +3 -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/live.d.ts +4 -0
- package/dist/init/live.js +16 -0
- package/dist/init/live.js.map +1 -1
- 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/check.js +38 -6
- 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 +2 -0
- package/dist/lint/index.js +2 -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/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 +51 -6
- package/dist/lint/rules.js +23 -6
- 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.d.ts +45 -0
- package/dist/migrations/checkpoint.js +108 -0
- package/dist/migrations/checkpoint.js.map +1 -0
- 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 -7
- 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 +21 -0
- package/dist/migrations/routines.js +30 -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 +7 -1
- package/dist/pr/model.js +29 -7
- package/dist/pr/model.js.map +1 -1
- package/dist/pr/render.d.ts +4 -1
- package/dist/pr/render.js +49 -9
- 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 +35 -2
- package/dist/project.js +62 -2
- 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 +14 -3
- 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 +219 -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 +7 -2
- package/dist/schemas.js +7 -2
- package/dist/schemas.js.map +1 -1
- package/dist/sources/ddl.d.ts +48 -0
- package/dist/sources/ddl.js +53 -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/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 +38 -25
- package/dist/steps/postgres-migration.js +49 -32
- 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 +41 -0
- package/dist/tenants/index.js +121 -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/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 +16 -0
- package/dist/versioned/engine.js +20 -6
- 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/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 +37 -4
- package/dist/versioned/state.js.map +1 -1
- package/dist/waves/index.d.ts +224 -0
- package/dist/waves/index.js +353 -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 +34 -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/cleanup.schema.json +40 -0
- package/schemas/drift.schema.json +26 -1
- package/schemas/event.schema.json +36 -0
- package/schemas/lint-rules.schema.json +4 -0
- package/schemas/lint.schema.json +4 -0
- package/schemas/new.schema.json +41 -3
- package/schemas/plan.schema.json +157 -0
- package/schemas/report.schema.json +114 -0
- package/schemas/revert.schema.json +69 -0
- package/schemas/status.schema.json +64 -3
- package/schemas/test.schema.json +41 -0
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,239 @@ 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
|
+
* Steps around apply (#64): checks run before the migrations are applied
|
|
65
|
+
* (replication lag, long transactions, disk headroom) and after (smoke
|
|
66
|
+
* queries). Read from yodel.config.ts at the base commit, never from the
|
|
67
|
+
* change, so a pull request cannot add a step that runs with the writer.
|
|
68
|
+
* Each outcome is recorded in the history. See {@link ApplySteps}.
|
|
69
|
+
*/
|
|
70
|
+
steps?: ApplySteps;
|
|
71
|
+
/**
|
|
72
|
+
* Whether yodel plans, applies and compares access control in this
|
|
73
|
+
* environment (chant's `sql.profiles.<env>.access`). On Postgres:
|
|
74
|
+
* row-level security, policies, the roles the schema declares, grants and
|
|
75
|
+
* default privileges. Off, the access declarations are left out of the
|
|
76
|
+
* plan and the server's access is not read. On, the declared privileges
|
|
77
|
+
* are the whole of them: one granted by hand is revoked. Passwords and
|
|
78
|
+
* role memberships are the environment's and are never declared. The
|
|
79
|
+
* declarative apply and drift run chant, which reads chant.config.ts, so
|
|
80
|
+
* there the two must agree. On ClickHouse (#46): users, roles, row
|
|
81
|
+
* policies and grants; chant's apply has no switch, so off, the
|
|
82
|
+
* declarative path is refused when `src/` declares any, and on, `yodel
|
|
83
|
+
* init --from` adopts them. Default: `sql.profiles.<env>.access` in
|
|
84
|
+
* chant.config.ts, then off.
|
|
85
|
+
*/
|
|
86
|
+
access?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Which approvals of the migrations Op's gate count (#48), for `yodel
|
|
89
|
+
* apply <env>` outside the apply pipeline's waves:
|
|
90
|
+
*
|
|
91
|
+
* - `ledger` (the default): any `chant approve` of the plan digest;
|
|
92
|
+
* - `sealed`: only an approval sealed with `chant approve --sign` (or
|
|
93
|
+
* `yodel approve --sign`) by a key the signers file
|
|
94
|
+
* (`.chant/allowed_signers`) at the base commit lists for the approver.
|
|
95
|
+
*
|
|
96
|
+
* Read from yodel.config.ts at the base commit, never from the change.
|
|
97
|
+
* Default: the environment's wave's `approval` when that is `sealed`, else
|
|
98
|
+
* `ledger`. A wave's `pr-review` is the wave's alone.
|
|
99
|
+
*/
|
|
100
|
+
approval?: EnvironmentApprovalMode;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Which approvals of a gate's plan digest count (#48), chant's wave
|
|
104
|
+
* `approval`:
|
|
105
|
+
*
|
|
106
|
+
* - `ledger`: any `chant approve` of the digest on `chant/lifecycle`;
|
|
107
|
+
* - `pr-review`: also an approving review of the merged pull request's head
|
|
108
|
+
* by a writer other than its author, when that head planned the digest;
|
|
109
|
+
* - `sealed`: only an approval sealed by a key the signers file at the base
|
|
110
|
+
* commit lists for its approver.
|
|
111
|
+
*/
|
|
112
|
+
export type ApprovalMode = "ledger" | "pr-review" | "sealed";
|
|
113
|
+
export declare const APPROVAL_MODES: readonly ApprovalMode[];
|
|
114
|
+
/** The modes the migrations Op's gate takes: `pr-review` needs the pipeline's waves. */
|
|
115
|
+
export type EnvironmentApprovalMode = Exclude<ApprovalMode, "pr-review">;
|
|
116
|
+
export declare const ENVIRONMENT_APPROVAL_MODES: readonly EnvironmentApprovalMode[];
|
|
117
|
+
/** `steps` of an environment: run in order, `before` under the lock before the first migration, `after` after the last. */
|
|
118
|
+
export interface ApplySteps {
|
|
119
|
+
before?: ApplyStep[];
|
|
120
|
+
after?: ApplyStep[];
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* One step: a read-only SQL query on the environment's server, judged like a
|
|
124
|
+
* migration's pre-migration check (`expect`, default `empty`: no rows), or a
|
|
125
|
+
* shell command run in the project directory with `YODEL_ENV` and
|
|
126
|
+
* `YODEL_STEP` (`before` or `after`) set, which passes when it exits 0.
|
|
127
|
+
*
|
|
128
|
+
* ```ts
|
|
129
|
+
* steps: {
|
|
130
|
+
* before: [{ name: "no-long-transactions", sql: "SELECT pid FROM pg_stat_activity WHERE xact_start < now() - interval '5 minutes'", onFailure: "approve" }],
|
|
131
|
+
* after: [{ name: "smoke", command: "./scripts/smoke.sh" }],
|
|
132
|
+
* }
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
export interface ApplyStep {
|
|
136
|
+
/** Names it in output and in the history: lowercase letters, digits, - and _. */
|
|
137
|
+
name: string;
|
|
138
|
+
sql?: string;
|
|
139
|
+
/** What `sql` must return: `empty` (the default), `true`, or a number in `{ min, max }`. */
|
|
140
|
+
expect?: "empty" | "true" | {
|
|
141
|
+
min?: number;
|
|
142
|
+
max?: number;
|
|
143
|
+
};
|
|
144
|
+
command?: string;
|
|
145
|
+
/**
|
|
146
|
+
* A failing `before` step: `fail` (the default) refuses the apply, exit 4;
|
|
147
|
+
* `approve` holds the environment's wave for a person instead, whatever
|
|
148
|
+
* its gate, until someone approves the plan with the step failing. An
|
|
149
|
+
* `after` step that fails fails the run (exit 1); the migrations stay
|
|
150
|
+
* applied.
|
|
151
|
+
*/
|
|
152
|
+
onFailure?: "fail" | "approve";
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* The tenants of an environment: a list of names, a file of them (one per
|
|
156
|
+
* line, or a JSON array), or a read-only SQL query whose first column lists
|
|
157
|
+
* them, run on the environment's server with its profile (its reader
|
|
158
|
+
* outside an apply job).
|
|
159
|
+
*
|
|
160
|
+
* ```ts
|
|
161
|
+
* tenants: ["acme", "globex"]
|
|
162
|
+
* tenants: { file: "tenants.txt" }
|
|
163
|
+
* tenants: { query: "SELECT nspname FROM pg_namespace WHERE nspname LIKE 'tenant_%'" }
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
export type TenantSet = string[] | {
|
|
167
|
+
file: string;
|
|
168
|
+
} | {
|
|
169
|
+
query: string;
|
|
170
|
+
};
|
|
171
|
+
/** When an environment's wave waits for an approval (chant's wave gate policy). */
|
|
172
|
+
export type WaveGate = "always" | "on-destructive" | "never";
|
|
173
|
+
export declare const WAVE_GATES: readonly WaveGate[];
|
|
174
|
+
/**
|
|
175
|
+
* One wave of the apply pipeline: an environment, applied after the waves
|
|
176
|
+
* before it, behind its own gate.
|
|
177
|
+
*/
|
|
178
|
+
export interface WaveConfig {
|
|
179
|
+
/** The environment, by its name in `sql.profiles`. */
|
|
180
|
+
env: string;
|
|
181
|
+
/**
|
|
182
|
+
* When the wave waits for an approval of its plan:
|
|
183
|
+
*
|
|
184
|
+
* - `always` (the default): whenever it has a migration to apply;
|
|
185
|
+
* - `on-destructive`: when a pending step is destructive, a Postgres
|
|
186
|
+
* rewrite or lock-heavy statement, a ClickHouse mutation or rebuild, or
|
|
187
|
+
* an Op or manual step;
|
|
188
|
+
* - `never`: never. Review and branch protection are all that stand in
|
|
189
|
+
* front of it.
|
|
190
|
+
*
|
|
191
|
+
* The pipeline reads it from the commit a change merges onto, never from
|
|
192
|
+
* the change itself.
|
|
193
|
+
*/
|
|
194
|
+
gate?: WaveGate;
|
|
195
|
+
/**
|
|
196
|
+
* The environment that must have applied a migration first: `yodel
|
|
197
|
+
* apply <env>` reads its history (with its reader) and refuses, exit 4,
|
|
198
|
+
* any pending migration it does not record as applied with the same
|
|
199
|
+
* checksum. Default: the wave before this one; `false` for none. Both
|
|
200
|
+
* the working tree's and the base commit's requirement are enforced, so a
|
|
201
|
+
* change cannot drop its own.
|
|
202
|
+
*/
|
|
203
|
+
requires?: string | false;
|
|
204
|
+
/**
|
|
205
|
+
* A tenant set's wave (#56): split it into a deciding job, which plans
|
|
206
|
+
* every tenant and decides the gate once over all of them, and this many
|
|
207
|
+
* share jobs, each applying a slice of the tenants. A share job refuses
|
|
208
|
+
* (exit 4), naming it, a tenant whose plan moved since the decision, and
|
|
209
|
+
* applies the rest. Default 1: one job plans, decides and applies.
|
|
210
|
+
*/
|
|
211
|
+
shares?: number;
|
|
212
|
+
/**
|
|
213
|
+
* Which approvals of the wave's digest count (#48): `ledger` (the
|
|
214
|
+
* default), `pr-review` or `sealed`; see {@link ApprovalMode}. Read, like
|
|
215
|
+
* `gate`, from the commit a change merges onto. Under `pr-review`, `yodel
|
|
216
|
+
* ci` adds the pull request job that records the plans each head makes
|
|
217
|
+
* (`chant run wave --record-plans`).
|
|
218
|
+
*/
|
|
219
|
+
approval?: ApprovalMode;
|
|
220
|
+
}
|
|
221
|
+
/** A forge `yodel ci` renders pipelines for. */
|
|
222
|
+
export type CiForge = "github" | "gitlab" | "forgejo";
|
|
223
|
+
export declare const CI_FORGES: readonly CiForge[];
|
|
224
|
+
/** `yodel ci` (#65): what the project's pipelines are rendered for. */
|
|
225
|
+
export interface CiConfig {
|
|
226
|
+
/** 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. */
|
|
227
|
+
forges?: CiForge[];
|
|
228
|
+
/**
|
|
229
|
+
* The project's own jobs: a module, relative to the project (such as
|
|
230
|
+
* `ci/jobs.ts`), exporting `actions` (jobs declared with the github
|
|
231
|
+
* lexicon, for GitHub and Forgejo) and `gitlab` (the gitlab lexicon's),
|
|
232
|
+
* each keyed by the job's name. `yodel ci` adds them to the pull request
|
|
233
|
+
* pipeline after yodel's own jobs, so they survive every render.
|
|
234
|
+
*/
|
|
235
|
+
jobs?: string;
|
|
236
|
+
/**
|
|
237
|
+
* The image every job runs in (#66): the CI image
|
|
238
|
+
* `ghcr.io/intentius/sql-yodeler:<version>@sha256:<digest>`, pinned by its
|
|
239
|
+
* digest, which carries node, yodel, chant and the lexicons. Jobs then run
|
|
240
|
+
* no `npm ci`. Default: `node:22-bookworm`, and each job runs `npm ci`.
|
|
241
|
+
*/
|
|
242
|
+
image?: string;
|
|
243
|
+
/**
|
|
244
|
+
* A scheduled job that starts again an apply wave whose approval has
|
|
245
|
+
* arrived (#47): `chant run resume --op yodel-apply`, which re-runs the
|
|
246
|
+
* GitHub run, dispatches the Forgejo workflow or retries the GitLab job.
|
|
247
|
+
* It approves nothing. `schedule` is a five-field cron, such as
|
|
248
|
+
* `"*\/10 * * * *"`. GitHub uses the job's token (`actions: write`);
|
|
249
|
+
* Forgejo the `CHANT_FORGE_TOKEN` secret (`write:repository`); GitLab runs
|
|
250
|
+
* it in a pipeline schedule you create, with `GITLAB_TOKEN` (the `api`
|
|
251
|
+
* scope, Developer role). Without it, `yodel approve` resumes the job.
|
|
252
|
+
*/
|
|
253
|
+
resume?: {
|
|
254
|
+
schedule: string;
|
|
255
|
+
};
|
|
49
256
|
}
|
|
50
257
|
export interface YodelConfig {
|
|
51
258
|
/** Keyed by the environment's name in `sql.profiles`. */
|
|
52
259
|
environments?: Record<string, EnvironmentConfig>;
|
|
260
|
+
/**
|
|
261
|
+
* The apply pipeline's waves, in order. An environment no wave names
|
|
262
|
+
* waits for an approval whenever it has a migration to apply, as under
|
|
263
|
+
* gate `always`.
|
|
264
|
+
*/
|
|
265
|
+
waves?: WaveConfig[];
|
|
53
266
|
/** `yodel lint`'s rule levels: `{ rules: { destructive: "warning" } }`. A misspelled rule name is a type error. */
|
|
54
267
|
lint?: LintConfig;
|
|
55
268
|
/** Rules over the plan (#53) that `yodel plan` reports and `yodel apply` enforces; see {@link PolicyConfig}. */
|
|
56
269
|
policy?: PolicyConfig;
|
|
270
|
+
/**
|
|
271
|
+
* Webhook events (#61): the NAMES of the environment variables holding a
|
|
272
|
+
* webhook's URL and signing key, and optionally a Slack incoming webhook's
|
|
273
|
+
* URL. `{ webhook: "YODEL_WEBHOOK_URL", key: "YODEL_WEBHOOK_KEY" }`.
|
|
274
|
+
*/
|
|
275
|
+
notify?: NotifyConfig;
|
|
276
|
+
/**
|
|
277
|
+
* DDL sources (#67): schema an ORM defines, read from the DDL it prints,
|
|
278
|
+
* keyed by a name. Each is written out as declarations in
|
|
279
|
+
* `<sourceDir>/<name>.generated.ts` before every build. See
|
|
280
|
+
* {@link DdlSource}.
|
|
281
|
+
*/
|
|
282
|
+
sources?: Record<string, DdlSource>;
|
|
283
|
+
/** `yodel ci`: the forges to render the pipelines for, and the project's own jobs; see {@link CiConfig}. */
|
|
284
|
+
ci?: CiConfig;
|
|
57
285
|
}
|
|
58
286
|
/**
|
|
59
287
|
* Rules over the versioned plan (#53). `yodel plan` shows each rule's
|
|
@@ -108,8 +336,13 @@ export interface PolicyPlan {
|
|
|
108
336
|
dialect: "clickhouse" | "postgres";
|
|
109
337
|
/** When the plan is evaluated, ISO 8601 in UTC. */
|
|
110
338
|
now: string;
|
|
111
|
-
/** The migrations the run would apply, in order. */
|
|
339
|
+
/** The migrations the run would apply, in order. For a revert, the one migration reverted, its steps the revert's statements. */
|
|
112
340
|
pending: PolicyMigration[];
|
|
341
|
+
/** Present when the plan is a revert (`yodel revert`): the migration undone and the one it goes back to (null: an empty schema). */
|
|
342
|
+
revert?: {
|
|
343
|
+
id: string;
|
|
344
|
+
to: string | null;
|
|
345
|
+
};
|
|
113
346
|
}
|
|
114
347
|
export interface PolicyMigration {
|
|
115
348
|
id: string;
|
|
@@ -138,11 +371,15 @@ export interface PolicyStep {
|
|
|
138
371
|
/** An Op step's Op. */
|
|
139
372
|
op?: string;
|
|
140
373
|
}
|
|
141
|
-
/** The rules `lint.rules` can set: every lint rule,
|
|
142
|
-
export type LintRuleName = LintRuleId | "replay"
|
|
374
|
+
/** The rules `lint.rules` can set: every lint rule, the replay check's, and the sql lexicon's schema checks (`SQLPG101`, `SQLCH113`). */
|
|
375
|
+
export type LintRuleName = LintRuleId | "replay" | `SQLPG${number}` | `SQLCH${number}`;
|
|
376
|
+
/** A naming rule: a preset, or a regular expression the whole name must match. */
|
|
377
|
+
export type NamingRuleConfig = "snake_case" | "camelCase" | "PascalCase" | (string & {});
|
|
143
378
|
export interface LintConfig {
|
|
144
379
|
/** Each rule's level. The integrity rules (fork, directory, checksum, unreadable-object) are always errors. */
|
|
145
380
|
rules?: Partial<Record<LintRuleName, LevelSetting>>;
|
|
381
|
+
/** The names a migration adds, per kind of object (rule `naming`): `{ table: "snake_case", index: "[a-z_]+_idx" }`. */
|
|
382
|
+
naming?: Partial<Record<"table" | "column" | "index" | "constraint", NamingRuleConfig>>;
|
|
146
383
|
}
|
|
147
384
|
/** Returns `config` as is; it types the default export of `yodel.config.ts`. */
|
|
148
385
|
export declare const defineConfig: (config: YodelConfig) => YodelConfig;
|
package/dist/config/define.js
CHANGED
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
* });
|
|
16
16
|
* ```
|
|
17
17
|
*/
|
|
18
|
+
export const APPROVAL_MODES = ["ledger", "pr-review", "sealed"];
|
|
19
|
+
export const ENVIRONMENT_APPROVAL_MODES = ["ledger", "sealed"];
|
|
20
|
+
export const WAVE_GATES = ["always", "on-destructive", "never"];
|
|
21
|
+
export const CI_FORGES = ["github", "gitlab", "forgejo"];
|
|
18
22
|
/** Returns `config` as is; it types the default export of `yodel.config.ts`. */
|
|
19
23
|
export const defineConfig = (config) => config;
|
|
20
24
|
//# 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;AAyGH,MAAM,CAAC,MAAM,cAAc,GAA4B,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AAKzF,MAAM,CAAC,MAAM,0BAA0B,GAAuC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAuDnG,MAAM,CAAC,MAAM,UAAU,GAAwB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;AAqDrF,MAAM,CAAC,MAAM,SAAS,GAAuB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AA6J7E,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
|
@@ -2,11 +2,17 @@
|
|
|
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";
|
|
11
|
+
import { APPROVAL_MODES, CI_FORGES, ENVIRONMENT_APPROVAL_MODES, WAVE_GATES } from "./define.js";
|
|
12
|
+
import { notifyConfigProblem } from "../notify/index.js";
|
|
13
|
+
import { checkSources } from "../sources/index.js";
|
|
14
|
+
import { TENANT_NAME } from "../tenants/target.js";
|
|
15
|
+
import { checksProblem } from "../migrations/checks.js";
|
|
10
16
|
export const CONFIG_FILE = "yodel.config.ts";
|
|
11
17
|
const isRecord = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
12
18
|
const TOPOLOGY_KINDS = ["single", "cluster", "replicated", "cloud"];
|
|
@@ -39,9 +45,18 @@ function checkEnvironment(value, where) {
|
|
|
39
45
|
if (!isRecord(value))
|
|
40
46
|
throw new YodelError(`${where}: expected an object`);
|
|
41
47
|
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)`);
|
|
48
|
+
if (!["topology", "history", "lockTtl", "lockWait", "tenants", "steps", "access", "approval"].includes(k))
|
|
49
|
+
throw new YodelError(`${where}.${k}: unknown setting (expected topology, history, lockTtl, lockWait, tenants, steps, access, approval)`);
|
|
44
50
|
}
|
|
51
|
+
if (value.approval !== undefined && !ENVIRONMENT_APPROVAL_MODES.includes(value.approval)) {
|
|
52
|
+
throw new YodelError(value.approval === "pr-review"
|
|
53
|
+
? `${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 ")}`
|
|
54
|
+
: `${where}.approval: ${JSON.stringify(value.approval)} is not an approval mode (expected ${ENVIRONMENT_APPROVAL_MODES.join(" or ")})`);
|
|
55
|
+
}
|
|
56
|
+
if (value.tenants !== undefined)
|
|
57
|
+
checkTenants(value.tenants, `${where}.tenants`);
|
|
58
|
+
if (value.steps !== undefined)
|
|
59
|
+
checkApplySteps(value.steps, `${where}.steps`);
|
|
45
60
|
if (value.topology !== undefined)
|
|
46
61
|
checkTopology(value.topology, `${where}.topology`);
|
|
47
62
|
if (value.history !== undefined) {
|
|
@@ -60,8 +75,68 @@ function checkEnvironment(value, where) {
|
|
|
60
75
|
if (value.lockWait !== undefined && !(typeof value.lockWait === "number" && Number.isFinite(value.lockWait) && value.lockWait >= 0)) {
|
|
61
76
|
throw new YodelError(`${where}.lockWait: expected a number of seconds, 0 or more`);
|
|
62
77
|
}
|
|
78
|
+
if (value.access !== undefined && typeof value.access !== "boolean")
|
|
79
|
+
throw new YodelError(`${where}.access: expected true or false`);
|
|
63
80
|
return value;
|
|
64
81
|
}
|
|
82
|
+
function checkTenants(value, where) {
|
|
83
|
+
if (Array.isArray(value)) {
|
|
84
|
+
const bad = value.filter((t) => typeof t !== "string" || !TENANT_NAME.test(t));
|
|
85
|
+
if (bad.length > 0)
|
|
86
|
+
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)`);
|
|
87
|
+
if (new Set(value).size !== value.length)
|
|
88
|
+
throw new YodelError(`${where}: a tenant is listed twice`);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const keys = isRecord(value) ? Object.keys(value) : [];
|
|
92
|
+
if (!isRecord(value) || keys.length !== 1 || !["file", "query"].includes(keys[0] ?? "") || typeof value[keys[0] ?? ""] !== "string" || value[keys[0] ?? ""] === "") {
|
|
93
|
+
throw new YodelError(`${where}: expected a list of tenant names, { file: "<path>" } or { query: "<SQL>" }`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const STEP_NAME = /^[a-z0-9][a-z0-9_-]*$/;
|
|
97
|
+
function checkApplySteps(value, where) {
|
|
98
|
+
if (!isRecord(value))
|
|
99
|
+
throw new YodelError(`${where}: expected { before?: [...], after?: [...] }`);
|
|
100
|
+
for (const k of Object.keys(value))
|
|
101
|
+
if (k !== "before" && k !== "after")
|
|
102
|
+
throw new YodelError(`${where}.${k}: unknown setting (expected before, after)`);
|
|
103
|
+
const seen = new Set();
|
|
104
|
+
for (const when of ["before", "after"]) {
|
|
105
|
+
const list = value[when];
|
|
106
|
+
if (list === undefined)
|
|
107
|
+
continue;
|
|
108
|
+
if (!Array.isArray(list))
|
|
109
|
+
throw new YodelError(`${where}.${when}: expected a list of steps`);
|
|
110
|
+
list.forEach((step, i) => {
|
|
111
|
+
const at = `${where}.${when}[${String(i)}]`;
|
|
112
|
+
if (!isRecord(step))
|
|
113
|
+
throw new YodelError(`${at}: expected { name, sql } or { name, command }`);
|
|
114
|
+
for (const k of Object.keys(step))
|
|
115
|
+
if (!["name", "sql", "expect", "command", "onFailure"].includes(k))
|
|
116
|
+
throw new YodelError(`${at}.${k}: unknown setting (expected name, sql, expect, command, onFailure)`);
|
|
117
|
+
if (typeof step.name !== "string" || !STEP_NAME.test(step.name))
|
|
118
|
+
throw new YodelError(`${at}.name: lowercase letters, digits, - and _, got ${JSON.stringify(step.name)}`);
|
|
119
|
+
if (seen.has(step.name))
|
|
120
|
+
throw new YodelError(`${at}.name: two steps are named ${step.name}`);
|
|
121
|
+
seen.add(step.name);
|
|
122
|
+
const sql = typeof step.sql === "string" && step.sql.trim() !== "";
|
|
123
|
+
const command = typeof step.command === "string" && step.command.trim() !== "";
|
|
124
|
+
if (sql === command)
|
|
125
|
+
throw new YodelError(`${at} (${step.name}): give sql or command, one of them`);
|
|
126
|
+
if (step.expect !== undefined) {
|
|
127
|
+
if (!sql)
|
|
128
|
+
throw new YodelError(`${at}.expect: only a sql step has an expect`);
|
|
129
|
+
const problem = checksProblem([{ name: step.name, sql: step.sql, expect: step.expect }]);
|
|
130
|
+
if (problem)
|
|
131
|
+
throw new YodelError(`${at}.expect: ${problem.replace(/^checks\[0\] \([^)]*\): /, "")}`);
|
|
132
|
+
}
|
|
133
|
+
if (step.onFailure !== undefined && step.onFailure !== "fail" && step.onFailure !== "approve")
|
|
134
|
+
throw new YodelError(`${at}.onFailure: "fail" or "approve", got ${JSON.stringify(step.onFailure)}`);
|
|
135
|
+
if (step.onFailure === "approve" && when === "after")
|
|
136
|
+
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"`);
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
65
140
|
const RULE_ID = /^[a-z0-9][a-z0-9_-]*$/;
|
|
66
141
|
function checkPolicy(value, where, profiles) {
|
|
67
142
|
if (!isRecord(value))
|
|
@@ -117,6 +192,67 @@ function checkPolicy(value, where, profiles) {
|
|
|
117
192
|
throw new YodelError(`${at}.check: expected a function of the plan`);
|
|
118
193
|
}
|
|
119
194
|
}
|
|
195
|
+
const notDeclared = (profiles) => (profiles.length > 0 ? ` (sql.profiles: ${profiles.join(", ")})` : " (it declares no sql.profiles)");
|
|
196
|
+
function checkWaves(value, where, profiles) {
|
|
197
|
+
if (!Array.isArray(value))
|
|
198
|
+
throw new YodelError(`${where}: expected a list of { env, gate }, in the order they apply`);
|
|
199
|
+
const seen = new Set();
|
|
200
|
+
value.forEach((wave, i) => {
|
|
201
|
+
const at = `${where}[${String(i)}]`;
|
|
202
|
+
if (!isRecord(wave))
|
|
203
|
+
throw new YodelError(`${at}: expected { env, gate }`);
|
|
204
|
+
for (const k of Object.keys(wave))
|
|
205
|
+
if (!["env", "gate", "requires", "shares", "approval"].includes(k))
|
|
206
|
+
throw new YodelError(`${at}.${k}: unknown setting (expected env, gate, requires, shares, approval)`);
|
|
207
|
+
if (wave.approval !== undefined && !APPROVAL_MODES.includes(wave.approval)) {
|
|
208
|
+
throw new YodelError(`${at}.approval: ${JSON.stringify(wave.approval)} is not an approval mode (expected ${APPROVAL_MODES.join(", ")})`);
|
|
209
|
+
}
|
|
210
|
+
if (wave.shares !== undefined && !(typeof wave.shares === "number" && Number.isInteger(wave.shares) && wave.shares >= 1))
|
|
211
|
+
throw new YodelError(`${at}.shares: expected a whole number from 1`);
|
|
212
|
+
const env = wave.env;
|
|
213
|
+
if (typeof env !== "string" || env === "")
|
|
214
|
+
throw new YodelError(`${at}.env: expected an environment's name`);
|
|
215
|
+
if (profiles && !profiles.includes(env))
|
|
216
|
+
throw new YodelError(`${at}.env: ${env} is not an environment chant.config.ts declares${notDeclared(profiles)}`);
|
|
217
|
+
if (seen.has(env))
|
|
218
|
+
throw new YodelError(`${at}.env: ${env} has a wave already; an environment is one wave`);
|
|
219
|
+
seen.add(env);
|
|
220
|
+
if (wave.gate !== undefined && !WAVE_GATES.includes(wave.gate)) {
|
|
221
|
+
throw new YodelError(`${at}.gate: ${JSON.stringify(wave.gate)} is not a gate policy (expected ${WAVE_GATES.join(", ")})`);
|
|
222
|
+
}
|
|
223
|
+
const req = wave.requires;
|
|
224
|
+
if (req !== undefined && req !== false) {
|
|
225
|
+
if (typeof req !== "string" || req === "")
|
|
226
|
+
throw new YodelError(`${at}.requires: expected an environment's name, or false`);
|
|
227
|
+
if (req === env)
|
|
228
|
+
throw new YodelError(`${at}.requires: ${env} cannot require itself`);
|
|
229
|
+
if (profiles && !profiles.includes(req))
|
|
230
|
+
throw new YodelError(`${at}.requires: ${req} is not an environment chant.config.ts declares${notDeclared(profiles)}`);
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
/** An image reference pinned by digest. */
|
|
235
|
+
const CI_IMAGE = /^[^\s@]+@sha256:[0-9a-f]{64}$/;
|
|
236
|
+
function checkCi(value, where) {
|
|
237
|
+
if (!isRecord(value))
|
|
238
|
+
throw new YodelError(`${where}: expected { forges?, jobs?, image?, resume? }`);
|
|
239
|
+
for (const k of Object.keys(value))
|
|
240
|
+
if (!["forges", "jobs", "image", "resume"].includes(k))
|
|
241
|
+
throw new YodelError(`${where}.${k}: unknown setting (expected forges, jobs, image, resume)`);
|
|
242
|
+
const resume = value.resume;
|
|
243
|
+
if (resume !== undefined && !(isRecord(resume) && Object.keys(resume).every((k) => k === "schedule") && typeof resume.schedule === "string" && resume.schedule.trim().split(/\s+/).length === 5)) {
|
|
244
|
+
throw new YodelError(`${where}.resume: { schedule } with a five-field cron, such as { schedule: "*/10 * * * *" }`);
|
|
245
|
+
}
|
|
246
|
+
if (value.image !== undefined && (typeof value.image !== "string" || !CI_IMAGE.test(value.image))) {
|
|
247
|
+
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)`);
|
|
248
|
+
}
|
|
249
|
+
const forges = value.forges;
|
|
250
|
+
if (forges !== undefined && !(Array.isArray(forges) && forges.length > 0 && forges.every((f) => CI_FORGES.includes(f)))) {
|
|
251
|
+
throw new YodelError(`${where}.forges: a list of ${CI_FORGES.join(", ")}`);
|
|
252
|
+
}
|
|
253
|
+
if (value.jobs !== undefined && (typeof value.jobs !== "string" || value.jobs === ""))
|
|
254
|
+
throw new YodelError(`${where}.jobs: the path of the module that declares the project's own jobs, such as "ci/jobs.ts"`);
|
|
255
|
+
}
|
|
120
256
|
/**
|
|
121
257
|
* Checks a loaded config's shape. `environments` names each environment by
|
|
122
258
|
* its `sql.profiles` name; one that chant.config.ts does not declare is an
|
|
@@ -126,11 +262,22 @@ export function checkYodelConfig(value, path, profiles) {
|
|
|
126
262
|
if (!isRecord(value))
|
|
127
263
|
throw new YodelError(`${path}: the default export must be a config object (export default defineConfig({ ... }))`);
|
|
128
264
|
for (const k of Object.keys(value)) {
|
|
129
|
-
if (
|
|
130
|
-
throw new YodelError(`${path}: unknown setting ${k} (expected environments, lint, policy)`);
|
|
265
|
+
if (!["environments", "lint", "policy", "notify", "sources", "waves", "ci"].includes(k))
|
|
266
|
+
throw new YodelError(`${path}: unknown setting ${k} (expected environments, lint, policy, notify, sources, waves, ci)`);
|
|
267
|
+
}
|
|
268
|
+
if (value.ci !== undefined)
|
|
269
|
+
checkCi(value.ci, `${path}: ci`);
|
|
270
|
+
if (value.sources !== undefined)
|
|
271
|
+
checkSources(value.sources, `${path}: sources`);
|
|
272
|
+
if (value.notify !== undefined) {
|
|
273
|
+
const problem = notifyConfigProblem(value.notify);
|
|
274
|
+
if (problem)
|
|
275
|
+
throw new YodelError(`${path}: ${problem}`);
|
|
131
276
|
}
|
|
132
277
|
if (value.policy !== undefined)
|
|
133
278
|
checkPolicy(value.policy, `${path}: policy`, profiles);
|
|
279
|
+
if (value.waves !== undefined)
|
|
280
|
+
checkWaves(value.waves, `${path}: waves`, profiles);
|
|
134
281
|
if (value.lint !== undefined && !isRecord(value.lint))
|
|
135
282
|
throw new YodelError(`${path}: lint: expected an object`);
|
|
136
283
|
if (value.environments !== undefined) {
|
|
@@ -139,7 +286,7 @@ export function checkYodelConfig(value, path, profiles) {
|
|
|
139
286
|
for (const [name, env] of Object.entries(value.environments)) {
|
|
140
287
|
checkEnvironment(env, `${path}: environments.${name}`);
|
|
141
288
|
if (profiles && !profiles.includes(name)) {
|
|
142
|
-
throw new YodelError(`${path}: environments.${name} is not an environment chant.config.ts declares
|
|
289
|
+
throw new YodelError(`${path}: environments.${name} is not an environment chant.config.ts declares${notDeclared(profiles)}`);
|
|
143
290
|
}
|
|
144
291
|
}
|
|
145
292
|
}
|
|
@@ -152,7 +299,9 @@ export async function loadYodelConfig(dir, profiles) {
|
|
|
152
299
|
return undefined;
|
|
153
300
|
let mod;
|
|
154
301
|
try {
|
|
155
|
-
|
|
302
|
+
// 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.
|
|
303
|
+
const version = createHash("sha256").update(readFileSync(path)).digest("hex").slice(0, 16);
|
|
304
|
+
mod = (await import(`${pathToFileURL(path).href}?yodel=${version}`));
|
|
156
305
|
}
|
|
157
306
|
catch (e) {
|
|
158
307
|
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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"}
|