@substrat-run/cli 0.43.0 → 0.45.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/dist/cli.js +194 -10
- package/dist/cli.js.map +1 -1
- package/dist/connections.d.ts +13 -0
- package/dist/connections.d.ts.map +1 -0
- package/dist/connections.js +8 -0
- package/dist/connections.js.map +1 -0
- package/dist/data-loss-check.d.ts +70 -0
- package/dist/data-loss-check.d.ts.map +1 -0
- package/dist/data-loss-check.js +260 -0
- package/dist/data-loss-check.js.map +1 -0
- package/dist/data-loss-replay-child.d.ts +27 -0
- package/dist/data-loss-replay-child.d.ts.map +1 -0
- package/dist/data-loss-replay-child.js +71 -0
- package/dist/data-loss-replay-child.js.map +1 -0
- package/dist/promote.d.ts +16 -1
- package/dist/promote.d.ts.map +1 -1
- package/dist/promote.js +87 -11
- package/dist/promote.js.map +1 -1
- package/dist/push.d.ts +32 -6
- package/dist/push.d.ts.map +1 -1
- package/dist/push.js +94 -32
- package/dist/push.js.map +1 -1
- package/dist/scope.d.ts +23 -2
- package/dist/scope.d.ts.map +1 -1
- package/dist/scope.js +63 -7
- package/dist/scope.js.map +1 -1
- package/dist/store-driver.d.ts +59 -0
- package/dist/store-driver.d.ts.map +1 -0
- package/dist/store-driver.js +163 -0
- package/dist/store-driver.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `substrat store-driver upload | rollout | rollback | status --driver <driver>` (D-63, #2300). Staff
|
|
3
|
+
* only, and a write must be made from a person's sign-in (`substrat login`): the control plane
|
|
4
|
+
* refuses the service token.
|
|
5
|
+
*
|
|
6
|
+
* - `upload` packs the driver's package from `--dir` and stores it. The control plane names the
|
|
7
|
+
* release by its sha256 and says whether this repo pins it yet; bytes may go up first.
|
|
8
|
+
* - `rollout --sha256` moves every vertical to a stored, pinned release, after a canary. A big
|
|
9
|
+
* fleet takes more than one request: the command says so, and running it again continues.
|
|
10
|
+
* - `rollback` returns the driver to the immediately previous good release.
|
|
11
|
+
*
|
|
12
|
+
* What is packed is the driver's own package only: every `driver_<name>/…/*.py` under `--dir`, by
|
|
13
|
+
* its path relative to it. `__pycache__` is skipped. Anything else is refused by name, vendored
|
|
14
|
+
* packages included: a release is one `driver_` package (the platform's module rule), so a driver
|
|
15
|
+
* that needs a third-party package cannot be published yet.
|
|
16
|
+
*/
|
|
17
|
+
import { spawnSync } from 'node:child_process';
|
|
18
|
+
import { lstatSync, readdirSync, readFileSync } from 'node:fs';
|
|
19
|
+
import { join, relative, sep } from 'node:path';
|
|
20
|
+
import { STORE_RELEASE_MAX_BYTES } from '@substrat-run/contracts';
|
|
21
|
+
import { planeFor } from './plane.js';
|
|
22
|
+
const DRIVER_MODULE = /^driver_[a-z0-9_]+\/(?:[A-Za-z_][A-Za-z0-9_]*\/)*[A-Za-z_][A-Za-z0-9_]*\.py$/;
|
|
23
|
+
function base64(bytes) {
|
|
24
|
+
let text = '';
|
|
25
|
+
for (let i = 0; i < bytes.length; i += 0x8000)
|
|
26
|
+
text += String.fromCharCode(...bytes.subarray(i, i + 0x8000));
|
|
27
|
+
return btoa(text);
|
|
28
|
+
}
|
|
29
|
+
/** How deep, and how many files, a driver's package may go: past either it is not one package. */
|
|
30
|
+
const MAX_DEPTH = 16;
|
|
31
|
+
const MAX_FILES = 2000;
|
|
32
|
+
/**
|
|
33
|
+
* Every file under `dir`, by its path relative to it, `__pycache__` and `.pyc` left out. A symbolic
|
|
34
|
+
* link is refused, not followed: it could pack a file from outside `dir`, or loop forever.
|
|
35
|
+
*/
|
|
36
|
+
export function packedFilesOf(dir) {
|
|
37
|
+
const out = [];
|
|
38
|
+
const walk = (at, depth) => {
|
|
39
|
+
if (depth > MAX_DEPTH)
|
|
40
|
+
throw new Error(`'${relative(dir, at)}' is nested more than ${MAX_DEPTH} directories deep`);
|
|
41
|
+
for (const name of readdirSync(at).sort()) {
|
|
42
|
+
const path = join(at, name);
|
|
43
|
+
const stat = lstatSync(path);
|
|
44
|
+
if (stat.isSymbolicLink())
|
|
45
|
+
throw new Error(`'${relative(dir, path)}' is a symbolic link; a release packs files, not links`);
|
|
46
|
+
if (stat.isDirectory()) {
|
|
47
|
+
if (name !== '__pycache__')
|
|
48
|
+
walk(path, depth + 1);
|
|
49
|
+
}
|
|
50
|
+
else if (!name.endsWith('.pyc')) {
|
|
51
|
+
out.push(relative(dir, path).split(sep).join('/'));
|
|
52
|
+
if (out.length > MAX_FILES)
|
|
53
|
+
throw new Error(`'${dir}' holds more than ${MAX_FILES} files`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
walk(dir, 0);
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The commit `dir` is checked out at, for the files about to be packed. Refused unless every one
|
|
62
|
+
* of them is tracked and unchanged there: an untracked, ignored or edited file is not that
|
|
63
|
+
* commit, so the bundle would carry bytes the commit a reviewer reads does not.
|
|
64
|
+
*/
|
|
65
|
+
export function sourceCommitOf(dir, files) {
|
|
66
|
+
const git = (...args) => spawnSync('git', ['-C', dir, ...args], { encoding: 'utf8' });
|
|
67
|
+
const head = git('rev-parse', 'HEAD');
|
|
68
|
+
if (head.status !== 0)
|
|
69
|
+
throw new Error(`'${dir}' is not in a git checkout; pass --commit <sha>`);
|
|
70
|
+
const tracked = git('ls-files', '-z', '--', '.');
|
|
71
|
+
if (tracked.status !== 0)
|
|
72
|
+
throw new Error(`git ls-files failed in '${dir}'`);
|
|
73
|
+
const known = new Set(tracked.stdout.split('\0').filter(Boolean));
|
|
74
|
+
const untracked = files.filter((file) => !known.has(file));
|
|
75
|
+
if (untracked.length > 0) {
|
|
76
|
+
throw new Error(`${untracked.join(', ')} ${untracked.length === 1 ? 'is' : 'are'} not committed (untracked or ignored), so the bundle is not commit ${head.stdout.trim()}`);
|
|
77
|
+
}
|
|
78
|
+
const dirty = git('status', '--porcelain', '--', '.');
|
|
79
|
+
if (dirty.status !== 0 || dirty.stdout.trim() !== '') {
|
|
80
|
+
throw new Error(`'${dir}' has uncommitted changes, so the bundle is not commit ${head.stdout.trim()}; commit them, or pass --commit`);
|
|
81
|
+
}
|
|
82
|
+
return head.stdout.trim();
|
|
83
|
+
}
|
|
84
|
+
/** The driver's package under `dir`, as the upload body. `entry` is the module with the class. */
|
|
85
|
+
export function packStoreDriverDir(dir, entry, sourceCommit) {
|
|
86
|
+
const files = packedFilesOf(dir);
|
|
87
|
+
const refused = files.filter((path) => !DRIVER_MODULE.test(path));
|
|
88
|
+
if (refused.length > 0) {
|
|
89
|
+
throw new Error(`only the driver's own package is published (driver_<name>/…/*.py); refused: ${refused.join(', ')}. ` +
|
|
90
|
+
'Vendored packages are not supported: a release is one driver_ package.');
|
|
91
|
+
}
|
|
92
|
+
const packages = new Set(files.map((path) => path.split('/')[0]));
|
|
93
|
+
if (packages.size !== 1)
|
|
94
|
+
throw new Error(`'${dir}' must hold exactly one driver_ package, not ${[...packages].join(', ') || 'none'}`);
|
|
95
|
+
if (!files.includes(entry))
|
|
96
|
+
throw new Error(`'${dir}' has no ${entry}`);
|
|
97
|
+
let total = 0;
|
|
98
|
+
const modules = files.map((name) => {
|
|
99
|
+
const content = readFileSync(join(dir, name));
|
|
100
|
+
total += content.byteLength;
|
|
101
|
+
return { name, contentBase64: base64(content) };
|
|
102
|
+
});
|
|
103
|
+
if (total > STORE_RELEASE_MAX_BYTES)
|
|
104
|
+
throw new Error(`the package is ${total} bytes; a release carries at most ${STORE_RELEASE_MAX_BYTES}`);
|
|
105
|
+
return { sourceCommit, entry, modules };
|
|
106
|
+
}
|
|
107
|
+
/** A release is named by its sha256 as `upload` printed it; anything else is refused before a request. */
|
|
108
|
+
export const isReleaseSha = (value) => value !== undefined && /^[0-9a-f]{64}$/.test(value);
|
|
109
|
+
export const uploadStoreDriverRelease = (input) => planeFor(input.controlPlaneUrl, input.header).uploadStoreDriverRelease(input.driver, input.body);
|
|
110
|
+
export const rollOutStoreDriver = (input) => planeFor(input.controlPlaneUrl, input.header).rollOutStoreDriver(input.driver, input.sha256);
|
|
111
|
+
export const rollBackStoreDriver = (input) => planeFor(input.controlPlaneUrl, input.header).rollBackStoreDriver(input.driver);
|
|
112
|
+
export const storeDriverStatus = (input) => planeFor(input.controlPlaneUrl, input.header).getStoreDriver(input.driver);
|
|
113
|
+
export const rebuildStoreDriver = (input) => planeFor(input.controlPlaneUrl, input.header).rebuildStoreDriver(input.driver, { deployFinished: input.deployFinished === true });
|
|
114
|
+
/**
|
|
115
|
+
* Whether every script of the driver is built from what the control plane builds from now (#2309).
|
|
116
|
+
* An old key is revoked only once this reads `current`: until then a script on the list below may
|
|
117
|
+
* still accept it.
|
|
118
|
+
*/
|
|
119
|
+
export function storeDriverRebuildLines(rebuild) {
|
|
120
|
+
const walk = rebuild.walk;
|
|
121
|
+
// Why it reads as it does: when these lists were first walked towards, and when the next automatic walk is.
|
|
122
|
+
const timing = walk && walk.fingerprint === rebuild.fingerprint
|
|
123
|
+
? [` first walked towards ${walk.fingerprintSince}${rebuild.nextWalk ? `; next automatic re-walk ${rebuild.nextWalk}` : ''}`]
|
|
124
|
+
: [];
|
|
125
|
+
if (rebuild.current && rebuild.reverifying) {
|
|
126
|
+
return [` scripts: current (re-verifying: a walk since ${walk?.startedAt} re-checks every script; last proved ${walk?.verifiedAt})`, ...timing];
|
|
127
|
+
}
|
|
128
|
+
if (rebuild.current) {
|
|
129
|
+
const by = walk?.attestedBy ? `, deploy attested finished by ${walk.attestedBy}` : '';
|
|
130
|
+
return [` scripts: current (every script is built from ${rebuild.fingerprint.slice(0, 12)}, walk finished ${walk?.finishedAt}${by})`, ...timing];
|
|
131
|
+
}
|
|
132
|
+
if (rebuild.settling) {
|
|
133
|
+
return [
|
|
134
|
+
` scripts: settling: every script was current when walked (${walk?.finishedAt ?? 'just now'}), but the control plane's deploy may still`,
|
|
135
|
+
` have been rolling out then. It is walked again from ${rebuild.settling}; once the deploy serves only the new version,`,
|
|
136
|
+
` \`substrat store-driver rebuild --driver <driver> --deploy-finished\` walks it at once and attests that.`,
|
|
137
|
+
...timing,
|
|
138
|
+
];
|
|
139
|
+
}
|
|
140
|
+
const shown = rebuild.pending.slice(0, 10);
|
|
141
|
+
return [
|
|
142
|
+
` scripts: NOT current: ${rebuild.pending.length} may still be built from older keys or code (target ${rebuild.fingerprint.slice(0, 12)})`,
|
|
143
|
+
...(shown.length ? [` pending: ${shown.join(', ')}${rebuild.pending.length > shown.length ? `, … ${rebuild.pending.length - shown.length} more` : ''}`] : []),
|
|
144
|
+
...(walk?.failures ?? []).slice(0, 10).map((f) => ` failed: ${f.vertical}: ${f.detail}`),
|
|
145
|
+
...timing,
|
|
146
|
+
];
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* What `store-driver status` prints. "Rolls back to" is the server's `rollbackTarget`, never the
|
|
150
|
+
* current release's previous good one: after a diverged or paused rollout it is the current
|
|
151
|
+
* release, and a rollback still under way continues to its own target.
|
|
152
|
+
*/
|
|
153
|
+
export function storeDriverStatusLines(driver, view) {
|
|
154
|
+
return [
|
|
155
|
+
`${driver}: current ${view.current?.sha256 ?? 'none'}, rolls back to ${view.rollbackTarget ?? 'nothing'}`,
|
|
156
|
+
...(view.unfinishedRollback
|
|
157
|
+
? [` a rollback to ${view.unfinishedRollback} stopped part way: run \`substrat store-driver rollback\` again to finish it`]
|
|
158
|
+
: []),
|
|
159
|
+
...view.rollouts.slice(-10).map((r) => ` #${r.seq} ${r.action} ${r.sha256} ${r.state}${r.detail ? ` — ${r.detail}` : ''}`),
|
|
160
|
+
...(view.rebuild ? storeDriverRebuildLines(view.rebuild) : []),
|
|
161
|
+
];
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=store-driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-driver.js","sourceRoot":"","sources":["../src/store-driver.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@substrat-run/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.45.0",
|
|
4
4
|
"description": "The substrat CLI — authenticated deploy tooling: push a vertical to the platform, manage its versions and channels",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
"@babel/parser": "^7.29.7",
|
|
32
32
|
"esbuild": "^0.28.2",
|
|
33
33
|
"@substrat-run/boundary-lint": "^0.8.0",
|
|
34
|
-
"@substrat-run/
|
|
35
|
-
"@substrat-run/
|
|
36
|
-
"@substrat-run/control-plane-client": "^0.
|
|
34
|
+
"@substrat-run/contracts": "^0.149.0",
|
|
35
|
+
"@substrat-run/model-view": "^0.2.53",
|
|
36
|
+
"@substrat-run/control-plane-client": "^0.3.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^22.20.5",
|