@substrat-run/control-plane-api 0.165.0 → 0.167.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/api.d.ts +25 -2
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +496 -49
- package/dist/api.js.map +1 -1
- package/dist/connection-binding-options.d.ts +13 -0
- package/dist/connection-binding-options.d.ts.map +1 -1
- package/dist/connection-binding-options.js +17 -0
- package/dist/connection-binding-options.js.map +1 -1
- package/dist/deploy.d.ts +2 -4
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +0 -2
- package/dist/deploy.js.map +1 -1
- package/dist/github-app.d.ts +31 -0
- package/dist/github-app.d.ts.map +1 -0
- package/dist/github-app.js +86 -0
- package/dist/github-app.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/source-builds.d.ts +6 -0
- package/dist/source-builds.d.ts.map +1 -0
- package/dist/source-builds.js +55 -0
- package/dist/source-builds.js.map +1 -0
- package/dist/staff-client.d.ts +2 -2
- package/dist/staff-client.d.ts.map +1 -1
- package/dist/staff-client.js.map +1 -1
- package/dist/store-rebuild.d.ts +7 -2
- package/dist/store-rebuild.d.ts.map +1 -1
- package/dist/store-rebuild.js +6 -3
- package/dist/store-rebuild.js.map +1 -1
- package/dist/store-releases.d.ts +56 -7
- package/dist/store-releases.d.ts.map +1 -1
- package/dist/store-releases.js +221 -20
- package/dist/store-releases.js.map +1 -1
- package/dist/store-script.d.ts +37 -6
- package/dist/store-script.d.ts.map +1 -1
- package/dist/store-script.js +50 -27
- package/dist/store-script.js.map +1 -1
- package/package.json +9 -9
package/dist/store-releases.js
CHANGED
|
@@ -17,10 +17,13 @@
|
|
|
17
17
|
* rollback) again continues it from the attempt's walk ledger (#2312), so a fleet of any size
|
|
18
18
|
* converges, a rollback included. A request that stops on a failure ends `failed` or `diverged`.
|
|
19
19
|
*/
|
|
20
|
-
import { STORE_RELEASE_MAX_BYTES, scopeStoreCanaryObjectName, storeDriverReleaseDigest, storeDriverReleaseUpload, } from '@substrat-run/contracts';
|
|
20
|
+
import { STORE_RELEASE_MAX_BYTES, scopeStoreCanaryObjectName, scopeStoreCanaryScriptName, scopeStoreScriptName, storeDriverReleaseDigest, storeDriverReleaseUpload, } from '@substrat-run/contracts';
|
|
21
21
|
import { ControlPlaneError } from '@substrat-run/control-plane-client';
|
|
22
|
-
import { createUlid, ulid, } from '@substrat-run/kernel';
|
|
22
|
+
import { createUlid, runtimeSha256, ulid, } from '@substrat-run/kernel';
|
|
23
23
|
import { assertPythonDriverModules } from './store-entry.js';
|
|
24
|
+
import { approvalFactsOf, liveApprovalOf, } from './store-script.js';
|
|
25
|
+
/** The JSON/base64 envelope around at most STORE_RELEASE_MAX_BYTES of module bytes. */
|
|
26
|
+
export const STORE_RELEASE_STORED_MAX_BYTES = Math.ceil((STORE_RELEASE_MAX_BYTES * 4) / 3) + 1024 * 1024;
|
|
24
27
|
/** The key a release's bytes are stored under. */
|
|
25
28
|
export const storeReleaseKey = (driver, sha256) => `${driver}/${sha256}`;
|
|
26
29
|
/** How long a rollout's exclusive hold lives between renewals. */
|
|
@@ -45,6 +48,110 @@ export const ROLLOUT_VERTICALS_PER_REQUEST = 100;
|
|
|
45
48
|
* converges them.
|
|
46
49
|
*/
|
|
47
50
|
export const ROLLOUT_WALKS_PER_REQUEST = 300;
|
|
51
|
+
/**
|
|
52
|
+
* A driver's approvals for one request, read after it takes its hold on the driver (D-65, Q13). A
|
|
53
|
+
* failed read refuses (503): it never counts as approved, and nothing is cached.
|
|
54
|
+
*/
|
|
55
|
+
export async function readStoreDriverApprovals(admin, actor, registration) {
|
|
56
|
+
let records;
|
|
57
|
+
try {
|
|
58
|
+
records = await admin.storeDriverApprovals(actor, registration.driver);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
throw new ControlPlaneError(503, `the approvals of scope store driver '${registration.driver}' could not be read; try again shortly`);
|
|
62
|
+
}
|
|
63
|
+
return { registration, records };
|
|
64
|
+
}
|
|
65
|
+
/** Walk the scripts' own settings under the driver's exclusive hold before a normal revoke. */
|
|
66
|
+
export async function runStoreDriverRevoke(input) {
|
|
67
|
+
const { admin, actor, driver, sha256 } = input;
|
|
68
|
+
const holder = ulid();
|
|
69
|
+
if (!(await admin.holdStoreDriver(actor, { driver, holder, mode: 'exclusive', ttlMs: ROLLOUT_HOLD_TTL_MS }))) {
|
|
70
|
+
throw new ControlPlaneError(409, `driver '${driver}' is held by a rollout or push; try the revoke again shortly`);
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
const approval = await admin.liveStoreDriverApproval(actor, driver, sha256);
|
|
74
|
+
if (!approval)
|
|
75
|
+
throw new ControlPlaneError(409, `release ${sha256} of '${driver}' has no live approval to revoke`);
|
|
76
|
+
const state = await admin.storeDriverState(actor, driver);
|
|
77
|
+
if (!input.emergency && state.current?.sha256 === sha256) {
|
|
78
|
+
throw new ControlPlaneError(409, `release ${sha256} is current for '${driver}'; an emergency revoke with a reason is required`);
|
|
79
|
+
}
|
|
80
|
+
if (input.emergency) {
|
|
81
|
+
return {
|
|
82
|
+
approval: await admin.revokeStoreDriverRelease(actor, { approvalId: approval.approvalId, driver, sha256, holder, reason: input.reason, emergency: true }),
|
|
83
|
+
complete: true, remaining: 0,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const declarations = await admin.storeDriverDeclarations(actor, driver);
|
|
87
|
+
if (declarations.unreadable.length > 0) {
|
|
88
|
+
throw new ControlPlaneError(409, `driver '${driver}' cannot be revoked: ${declarations.unreadable.join(', ')} cannot name its store scripts; roll it out first`);
|
|
89
|
+
}
|
|
90
|
+
const rolloutSeq = state.rollouts.at(-1)?.seq ?? 0;
|
|
91
|
+
const prior = await admin.storeDriverRevokeWalk(actor, approval.approvalId);
|
|
92
|
+
const cursor = prior?.actor === actor && prior.reason === input.reason && prior.rolloutSeq === rolloutSeq ? prior.cursor : null;
|
|
93
|
+
const verticals = declarations.verticals.map((v) => v.vertical).sort();
|
|
94
|
+
const pending = verticals.filter((v) => cursor === null || v > cursor);
|
|
95
|
+
const limit = input.perRequestWalks ?? ROLLOUT_WALKS_PER_REQUEST;
|
|
96
|
+
if (!(Number.isInteger(limit) && limit > 0 && limit <= ROLLOUT_WALKS_PER_REQUEST)) {
|
|
97
|
+
throw new ControlPlaneError(422, 'a revoke page needs a positive bounded walk limit');
|
|
98
|
+
}
|
|
99
|
+
const page = pending.slice(0, limit);
|
|
100
|
+
const renew = async () => {
|
|
101
|
+
const held = await admin.holdStoreDriver(actor, { driver, holder, mode: 'exclusive', ttlMs: ROLLOUT_HOLD_TTL_MS, renew: true });
|
|
102
|
+
if (!held)
|
|
103
|
+
throw new ControlPlaneError(409, `the hold on driver '${driver}' lapsed; post the revoke again`);
|
|
104
|
+
};
|
|
105
|
+
for (const vertical of page) {
|
|
106
|
+
await renew();
|
|
107
|
+
const script = scopeStoreScriptName(vertical, driver);
|
|
108
|
+
let running;
|
|
109
|
+
try {
|
|
110
|
+
running = await input.readScriptRelease(script);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
throw new ControlPlaneError(409, `store script '${script}' settings are unreadable; roll it out before revoking ${sha256}`);
|
|
114
|
+
}
|
|
115
|
+
if (running.exists && !running.release) {
|
|
116
|
+
throw new ControlPlaneError(409, `store script '${script}' records no release; roll it out before revoking ${sha256}`);
|
|
117
|
+
}
|
|
118
|
+
if (running.release === sha256) {
|
|
119
|
+
throw new ControlPlaneError(409, `store script '${script}' still runs ${sha256}; roll it out before revoking`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const remaining = pending.length - page.length;
|
|
123
|
+
if (remaining > 0) {
|
|
124
|
+
await admin.recordStoreDriverRevokeWalk(actor, { approvalId: approval.approvalId, driver, holder, cursor: page.at(-1), reason: input.reason, rolloutSeq });
|
|
125
|
+
return { approval, complete: false, remaining };
|
|
126
|
+
}
|
|
127
|
+
await renew();
|
|
128
|
+
const canary = scopeStoreCanaryScriptName(driver);
|
|
129
|
+
let runningCanary;
|
|
130
|
+
try {
|
|
131
|
+
runningCanary = await input.readScriptRelease(canary);
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
throw new ControlPlaneError(409, `store canary '${canary}' settings are unreadable; roll it out before revoking ${sha256}`);
|
|
135
|
+
}
|
|
136
|
+
if (runningCanary.exists && !runningCanary.release) {
|
|
137
|
+
throw new ControlPlaneError(409, `store canary '${canary}' records no release; roll it out before revoking ${sha256}`);
|
|
138
|
+
}
|
|
139
|
+
if (runningCanary.release === sha256 && state.current) {
|
|
140
|
+
if (!(await admin.liveStoreDriverApproval(actor, driver, state.current.sha256))) {
|
|
141
|
+
throw new ControlPlaneError(409, `current release ${state.current.sha256} of '${driver}' has no live approval for a canary move`);
|
|
142
|
+
}
|
|
143
|
+
await renew();
|
|
144
|
+
await input.ensureCanary(state.current.sha256);
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
approval: await admin.revokeStoreDriverRelease(actor, { approvalId: approval.approvalId, driver, sha256, holder, reason: input.reason, emergency: false }),
|
|
148
|
+
complete: true, remaining: 0,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
await admin.releaseStoreDriverHold(actor, { driver, holder }).catch(() => undefined);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
48
155
|
const decodeBase64 = (text) => {
|
|
49
156
|
let binary;
|
|
50
157
|
try {
|
|
@@ -126,15 +233,84 @@ export function storedReleaseLoader(input) {
|
|
|
126
233
|
const raw = await input.bytes.get(storeReleaseKey(driver, wanted));
|
|
127
234
|
if (!raw)
|
|
128
235
|
return undefined;
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
236
|
+
return { ...decodeStoredReleaseBytes(raw, driver, wanted), sha256: wanted };
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
function decodeStoredReleaseBytes(raw, driver, sha256) {
|
|
240
|
+
let json;
|
|
241
|
+
try {
|
|
242
|
+
json = JSON.parse(new TextDecoder().decode(raw));
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
throw new ControlPlaneError(422, `driver '${driver}' release ${sha256} is stored as something other than a release`);
|
|
246
|
+
}
|
|
247
|
+
return decodeStoreDriverRelease(json);
|
|
248
|
+
}
|
|
249
|
+
/** Verify the named stored bundle before an approval can be recorded. */
|
|
250
|
+
export async function approveStoredDriverRelease(input) {
|
|
251
|
+
const { admin, actor, bytes, driver, sha256 } = input;
|
|
252
|
+
const stored = await admin.getStoreDriverRelease(actor, driver, sha256);
|
|
253
|
+
if (!stored)
|
|
254
|
+
throw new ControlPlaneError(404, `release ${sha256} of '${driver}' is not stored`);
|
|
255
|
+
const key = storeReleaseKey(driver, sha256);
|
|
256
|
+
const head = await bytes.head(key);
|
|
257
|
+
if (!head)
|
|
258
|
+
throw new ControlPlaneError(404, `release ${sha256} of '${driver}' has no stored bytes`);
|
|
259
|
+
if (!Number.isSafeInteger(head.size) || head.size < 0 || head.size > STORE_RELEASE_STORED_MAX_BYTES) {
|
|
260
|
+
throw new ControlPlaneError(409, `release ${sha256} of '${driver}' has unverifiable stored bytes`);
|
|
261
|
+
}
|
|
262
|
+
const opened = await bytes.open(key);
|
|
263
|
+
if (!opened)
|
|
264
|
+
throw new ControlPlaneError(404, `release ${sha256} of '${driver}' has no stored bytes`);
|
|
265
|
+
if (opened.size !== head.size) {
|
|
266
|
+
await opened.body.cancel();
|
|
267
|
+
throw new ControlPlaneError(409, `release ${sha256} of '${driver}' has unverifiable stored bytes`);
|
|
268
|
+
}
|
|
269
|
+
const reader = opened.body.getReader();
|
|
270
|
+
const chunks = [];
|
|
271
|
+
let size = 0;
|
|
272
|
+
try {
|
|
273
|
+
while (true) {
|
|
274
|
+
const { done, value } = await reader.read();
|
|
275
|
+
if (done)
|
|
276
|
+
break;
|
|
277
|
+
size += value.byteLength;
|
|
278
|
+
if (size > head.size || size > STORE_RELEASE_STORED_MAX_BYTES) {
|
|
279
|
+
throw new ControlPlaneError(409, `release ${sha256} of '${driver}' has unverifiable stored bytes`);
|
|
280
|
+
}
|
|
281
|
+
chunks.push(value);
|
|
132
282
|
}
|
|
133
|
-
|
|
134
|
-
|
|
283
|
+
}
|
|
284
|
+
catch (e) {
|
|
285
|
+
await reader.cancel().catch(() => undefined);
|
|
286
|
+
throw e;
|
|
287
|
+
}
|
|
288
|
+
finally {
|
|
289
|
+
reader.releaseLock();
|
|
290
|
+
}
|
|
291
|
+
if (size !== head.size)
|
|
292
|
+
throw new ControlPlaneError(409, `release ${sha256} of '${driver}' has unverifiable stored bytes`);
|
|
293
|
+
const raw = new Uint8Array(size);
|
|
294
|
+
let offset = 0;
|
|
295
|
+
for (const chunk of chunks) {
|
|
296
|
+
raw.set(chunk, offset);
|
|
297
|
+
offset += chunk.byteLength;
|
|
298
|
+
}
|
|
299
|
+
let release;
|
|
300
|
+
try {
|
|
301
|
+
release = decodeStoredReleaseBytes(raw, driver, sha256);
|
|
302
|
+
}
|
|
303
|
+
catch (e) {
|
|
304
|
+
if (e instanceof ControlPlaneError && e.status === 422) {
|
|
305
|
+
throw new ControlPlaneError(409, `release ${sha256} of '${driver}' has unverifiable stored bytes`);
|
|
135
306
|
}
|
|
136
|
-
|
|
137
|
-
}
|
|
307
|
+
throw e;
|
|
308
|
+
}
|
|
309
|
+
const digest = await storeDriverReleaseDigest(release, runtimeSha256()).catch(() => undefined);
|
|
310
|
+
if (digest !== sha256 || release.sourceCommit !== stored.sourceCommit) {
|
|
311
|
+
throw new ControlPlaneError(409, `release ${sha256} of '${driver}' differs from its stored digest or source commit`);
|
|
312
|
+
}
|
|
313
|
+
return admin.approveStoreDriverRelease(actor, { driver, sha256, ...input.approval });
|
|
138
314
|
}
|
|
139
315
|
/**
|
|
140
316
|
* A canary object's name. Each id comes from a mint of its own, so its 80 random bits are fresh
|
|
@@ -174,7 +350,6 @@ export async function canaryStoreRelease(input) {
|
|
|
174
350
|
await step('substrat.export', (a) => (tablesOf(a).some((t) => t.rows.length > 0) ? 'still holds rows after its wipe' : null));
|
|
175
351
|
}
|
|
176
352
|
const message = (e) => (e instanceof Error ? e.message : String(e));
|
|
177
|
-
const schemaOf = (registration, sha256) => sha256 === null ? undefined : registration.releases.find((pin) => pin.sha256 === sha256)?.schema;
|
|
178
353
|
/** The hold lapsed, or another holder ended the rollout: nothing more may be moved under it. */
|
|
179
354
|
class HoldLost extends ControlPlaneError {
|
|
180
355
|
constructor(driver) {
|
|
@@ -182,8 +357,11 @@ class HoldLost extends ControlPlaneError {
|
|
|
182
357
|
}
|
|
183
358
|
}
|
|
184
359
|
/**
|
|
185
|
-
* Move every script of a driver to a stored,
|
|
186
|
-
*
|
|
360
|
+
* Move every script of a driver to a stored, approved release (D-63, D-65): hold, then the
|
|
361
|
+
* approvals read and judged under it, then the canary, then each vertical. The target needs a live
|
|
362
|
+
* approval (422), and its `schema` is never below that of the current release, which is judged
|
|
363
|
+
* from its approval facts even when it has been revoked (409). Both are judged under the exclusive
|
|
364
|
+
* hold, so a revoke written before it is seen and none can be written during it. A failure after a vertical moved returns every vertical the attempt reached to the
|
|
187
365
|
* release the rollout started from, rehashing those bytes as it uploads them, and ends `failed`.
|
|
188
366
|
* It ends `diverged` instead, naming what is where, when there is nothing to return to (a driver's
|
|
189
367
|
* first rollout), when returning would lower the stored schema, when the attempt reached more
|
|
@@ -210,6 +388,23 @@ export async function runStoreDriverRollout(deps) {
|
|
|
210
388
|
throw new ControlPlaneError(409, `driver '${driver}' is being rolled out or a vertical declaring it is being pushed; try again shortly`);
|
|
211
389
|
}
|
|
212
390
|
try {
|
|
391
|
+
if (!(await admin.getStoreDriverRelease(actor, driver, sha256))) {
|
|
392
|
+
throw new ControlPlaneError(404, `release ${sha256} of '${driver}' is not stored`);
|
|
393
|
+
}
|
|
394
|
+
const approvals = await readStoreDriverApprovals(admin, actor, registration);
|
|
395
|
+
const approved = liveApprovalOf(approvals, sha256);
|
|
396
|
+
if (!approved) {
|
|
397
|
+
throw new ControlPlaneError(422, `release ${sha256} of '${driver}' has no live approval; a person approves it first`);
|
|
398
|
+
}
|
|
399
|
+
const { current } = await admin.storeDriverState(actor, driver);
|
|
400
|
+
if (current && current.sha256 !== sha256) {
|
|
401
|
+
const leaving = approvalFactsOf(approvals, current.sha256);
|
|
402
|
+
if (!leaving)
|
|
403
|
+
throw new ControlPlaneError(409, `the current release ${current.sha256} of '${driver}' was never approved, so its schema cannot be judged`);
|
|
404
|
+
if (approved.schema < leaving.schema) {
|
|
405
|
+
throw new ControlPlaneError(409, `release ${sha256} has schema ${approved.schema}, below the current release's ${leaving.schema}: objects may already have migrated`);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
213
408
|
const walkMax = deps.perRequestWalks ?? ROLLOUT_WALKS_PER_REQUEST;
|
|
214
409
|
const page = await admin.storeDriverRolloutPending(actor, { driver, sha256, action: deps.action, limit: walkMax });
|
|
215
410
|
if (page.unreadable.length > 0) {
|
|
@@ -223,7 +418,7 @@ export async function runStoreDriverRollout(deps) {
|
|
|
223
418
|
throw new HoldLost(driver);
|
|
224
419
|
};
|
|
225
420
|
try {
|
|
226
|
-
await deps.ensureCanary(sha256).then(({ scriptName }) => canaryStoreRelease({ call: deps.callCanary, scriptName }));
|
|
421
|
+
await deps.ensureCanary(sha256, approvals).then(({ scriptName }) => canaryStoreRelease({ call: deps.callCanary, scriptName }));
|
|
227
422
|
}
|
|
228
423
|
catch (e) {
|
|
229
424
|
// No vertical's script moved in this request; the current release stays. A row the end
|
|
@@ -243,13 +438,13 @@ export async function runStoreDriverRollout(deps) {
|
|
|
243
438
|
await renew();
|
|
244
439
|
reached.push(target);
|
|
245
440
|
const stores = target.stores.map((s) => ({ binding: s.binding, driver }));
|
|
246
|
-
if (await deps.ensure({ vertical: target.vertical, stores, to: sha256 }))
|
|
441
|
+
if (await deps.ensure({ vertical: target.vertical, stores, to: sha256, approvals }))
|
|
247
442
|
moved.push(target.vertical);
|
|
248
443
|
}
|
|
249
444
|
catch (e) {
|
|
250
445
|
const detail = e instanceof HoldLost
|
|
251
446
|
? { state: 'diverged', text: `Nothing was returned: ${reachedText(page.walked, reached)} may run ${sha256}.` }
|
|
252
|
-
: await restore(deps, row, page.walked, reached, renew);
|
|
447
|
+
: await restore(deps, approvals, row, page.walked, reached, renew);
|
|
253
448
|
await end(detail.state, `${target.vertical}: ${message(e)}. ${detail.text}`).catch(() => undefined);
|
|
254
449
|
throw new ControlPlaneError(e instanceof ControlPlaneError ? e.status : 502, `${deps.action} of '${driver}' to ${sha256} stopped at ${target.vertical} (${message(e)}). ${detail.text}`);
|
|
255
450
|
}
|
|
@@ -285,7 +480,7 @@ const reachedText = (before, reached) => {
|
|
|
285
480
|
* ledger), then the ones this request reached. A hold that cannot be renewed stops the return.
|
|
286
481
|
* More than one request returns ({@link ROLLOUT_WALKS_PER_REQUEST}) returns nothing and ends diverged.
|
|
287
482
|
*/
|
|
288
|
-
async function restore(deps, row, before, reached, renew) {
|
|
483
|
+
async function restore(deps, approvals, row, before, reached, renew) {
|
|
289
484
|
const from = row.fromSha256;
|
|
290
485
|
const all = reachedText(before, reached);
|
|
291
486
|
if (before + reached.length === 0)
|
|
@@ -293,9 +488,15 @@ async function restore(deps, row, before, reached, renew) {
|
|
|
293
488
|
if (from === null) {
|
|
294
489
|
return { state: 'diverged', text: `There is no earlier release to return to; ${all} may run ${deps.sha256}.` };
|
|
295
490
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
491
|
+
// Returning is a move TO `from`, so it needs a live approval; the release left is judged from
|
|
492
|
+
// its approval facts.
|
|
493
|
+
const returnTo = liveApprovalOf(approvals, from);
|
|
494
|
+
if (!returnTo) {
|
|
495
|
+
return { state: 'diverged', text: `${from} has no live approval to return to, so ${all} may run ${deps.sha256}.` };
|
|
496
|
+
}
|
|
497
|
+
const leaving = approvalFactsOf(approvals, deps.sha256)?.schema;
|
|
498
|
+
const returning = returnTo.schema;
|
|
499
|
+
if (leaving === undefined || returning < leaving) {
|
|
299
500
|
return {
|
|
300
501
|
state: 'diverged',
|
|
301
502
|
text: `Returning to ${from} would lower the stored schema (${leaving} to ${returning}), so ${all} may run ${deps.sha256}.`,
|
|
@@ -319,7 +520,7 @@ async function restore(deps, row, before, reached, renew) {
|
|
|
319
520
|
return { state: 'diverged', text: `The hold was lost while returning; ${back.slice(i).map((t) => t.vertical).join(', ')} may run ${deps.sha256}.` };
|
|
320
521
|
}
|
|
321
522
|
try {
|
|
322
|
-
await deps.ensure({ vertical: target.vertical, stores: target.stores.map((s) => ({ binding: s.binding, driver: deps.registration.driver })), to: from });
|
|
523
|
+
await deps.ensure({ vertical: target.vertical, stores: target.stores.map((s) => ({ binding: s.binding, driver: deps.registration.driver })), to: from, approvals });
|
|
323
524
|
}
|
|
324
525
|
catch (e) {
|
|
325
526
|
stuck.push(`${target.vertical} (${message(e)})`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-releases.js","sourceRoot":"","sources":["../src/store-releases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,GAKzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EACL,UAAU,EACV,IAAI,GAKL,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAS7D,kDAAkD;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,MAAc,EAAU,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;AAEjG,kEAAkE;AAClE,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,GAAG,MAAM,CAAC;AAC/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,MAAM,CAAC;AAC5C;;;;GAIG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AACjD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAI7C,MAAM,YAAY,GAAG,CAAC,IAAY,EAAc,EAAE;IAChD,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAY;IACnD,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,+BAA+B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1H,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACnD,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC;QAC5B,IAAI,KAAK,GAAG,uBAAuB,EAAE,CAAC;YACpC,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,0CAA0C,uBAAuB,eAAe,CAAC,CAAC;QACrH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;IAC9F,IAAI,CAAC;QACH,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,yEAAyE;AACzE,SAAS,wBAAwB,CAAC,OAAmD;IACnF,MAAM,MAAM,GAAG,CAAC,KAAiB,EAAE,EAAE;QACnC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM;YAAE,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAC7G,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAC7B,IAAI,CAAC,SAAS,CAAC;QACb,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;KAC1F,CAAC,CACH,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAMxC;IACC,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;QAC1E,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxF,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC;QACvD,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,WAAW,MAAM,QAAQ,KAAK,CAAC,MAAM,6BAA6B,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1H,CAAC;IACD,IAAI,CAAC,IAAI;QAAE,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3G,OAAO,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;AACjI,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAA6E;IAC/G,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC;QACnG,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,WAAW,MAAM,aAAa,MAAM,8CAA8C,CAAC,CAAC;QACvH,CAAC;QACD,OAAO,EAAE,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC/D,CAAC,CAAC;AACJ,CAAC;AAKD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,0BAA0B,CAAC,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AAEjI,MAAM,QAAQ,GAAG,CAAC,MAAe,EAAE,EAAE,CAAE,MAA0D,CAAC,MAAM,CAAC;AAEzG;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAiE;IACxG,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAC,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC;IACzG,MAAM,IAAI,GAAG,KAAK,EAAE,SAAiC,EAAE,KAAyC,EAAE,IAAc,EAAE,EAAE;QAClH,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,SAAS,YAAY,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1H,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,KAAK;YAAE,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;QACrF,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;IACtB,MAAM,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnK,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAwB,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAa,CAAwB,CAAC,MAAM,OAAO,QAAQ,CAAC,MAAM,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxM,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC5I,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAwB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gDAAgD,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/J,MAAM,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAChI,CAAC;AAgCD,MAAM,OAAO,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,MAAM,QAAQ,GAAG,CAAC,YAAqC,EAAE,MAAqB,EAAE,EAAE,CAChF,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC;AAEnG,gGAAgG;AAChG,MAAM,QAAS,SAAQ,iBAAiB;IACtC,YAAY,MAAc;QACxB,KAAK,CAAC,GAAG,EAAE,uBAAuB,MAAM,qFAAqF,CAAC,CAAC;IACjI,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAA4B;IACtE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACpD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC;IACtB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7G,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,WAAW,MAAM,qFAAqF,CAAC,CAAC;IAC3I,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,IAAI,yBAAyB,CAAC;QAClE,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,yBAAyB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACnH,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,iBAAiB,CACzB,GAAG,EACH,WAAW,MAAM,2BAA2B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,+BAA+B,CACxK,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,uBAAuB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACxG,MAAM,GAAG,GAAG,CAAC,KAAqC,EAAE,MAAqB,EAAE,EAAE,CAC3E,KAAK,CAAC,wBAAwB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACzF,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;YACvB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YACrJ,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QACtH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,uFAAuF;YACvF,8EAA8E;YAC9E,MAAM,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACvD,MAAM,CAAC,CAAC;QACV,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,6BAA6B,CAAC;QAChE,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,4FAA4F;QAC5F,kEAAkE;QAClE,MAAM,OAAO,GAA+B,EAAE,CAAC;QAC/C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM;gBAAE,MAAM;YAClC,IAAI,CAAC;gBACH,MAAM,KAAK,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC1E,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxG,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,MAAM,GAAG,CAAC,YAAY,QAAQ;oBAClC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAmB,EAAE,IAAI,EAAE,yBAAyB,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,MAAM,GAAG,EAAE;oBACvH,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC1D,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBACpG,MAAM,IAAI,iBAAiB,CAAC,CAAC,YAAY,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,QAAQ,MAAM,QAAQ,MAAM,eAAe,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3L,CAAC;QACH,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QAChD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,wBAAwB,CAAC,KAAK,EAAE;gBAC1D,MAAM;gBACN,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,MAAM;gBACN,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,uBAAuB,OAAO,CAAC,MAAM,cAAc,KAAK,CAAC,MAAM,KAAK,SAAS,8CAA8C,IAAI,CAAC,MAAM,QAAQ;gBACtJ,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACxD,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACnF,CAAC;YAAS,CAAC;QACT,MAAM,KAAK,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACvF,CAAC;AACH,CAAC;AAED,uGAAuG;AACvG,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,OAA4C,EAAE,EAAE;IACnF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,IAAI,aAAa,CAAC;IAChD,OAAO,GAAG,MAAM,uDAAuD,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACxG,CAAC,CAAC;AAEF;;;;;GAKG;AACH,KAAK,UAAU,OAAO,CACpB,IAA4B,EAC5B,GAA6B,EAC7B,MAAc,EACd,OAA4C,EAC5C,KAA0B;IAE1B,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC;IAC5B,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;IAC1F,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,6CAA6C,GAAG,YAAY,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACjH,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACpD,IAAI,OAAO,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,GAAG,OAAO,EAAE,CAAC;QAC5E,OAAO;YACL,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,gBAAgB,IAAI,mCAAmC,OAAO,OAAO,SAAS,SAAS,GAAG,YAAY,IAAI,CAAC,MAAM,GAAG;SAC3H,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,IAAI,yBAAyB,CAAC;IAC9D,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAClC,OAAO;YACL,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,uBAAuB,MAAM,GAAG,OAAO,CAAC,MAAM,8CAA8C,GAAG,4CAA4C,IAAI,CAAC,MAAM,sDAAsD,IAAI,qCAAqC;SAC5P,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACxJ,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IACtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,KAAK,EAAE,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,sCAAsC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACtJ,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3J,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;QACvB,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,GAAG,EAAE;QAC7F,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;AACtF,CAAC"}
|
|
1
|
+
{"version":3,"file":"store-releases.js","sourceRoot":"","sources":["../src/store-releases.ts"],"names":[],"mappings":"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"}
|
package/dist/store-script.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type ScopeStoreNeed, type StoreDriverRegistration } from '@substrat-run/contracts';
|
|
2
|
+
import type { StoreDriverApprovalRecord } from '@substrat-run/kernel';
|
|
2
3
|
import { type PythonStoreDriverRelease } from './store-entry.js';
|
|
3
4
|
/**
|
|
4
|
-
* The binding that records which
|
|
5
|
+
* The binding that records which release a store script runs: the release bundle's
|
|
5
6
|
* sha256 (D-63). In the entry's reserved prefix, so the driver's env never carries it.
|
|
6
7
|
*/
|
|
7
8
|
export declare const STORE_RELEASE_VAR = "SUBSTRAT_STORE_RELEASE";
|
|
@@ -10,6 +11,32 @@ export declare const STORE_RELEASE_VAR = "SUBSTRAT_STORE_RELEASE";
|
|
|
10
11
|
* upload sent and its configuration. A changed entry, verifier, key list or flag changes it.
|
|
11
12
|
*/
|
|
12
13
|
export declare const STORE_BUILD_VAR = "SUBSTRAT_STORE_BUILD";
|
|
14
|
+
/** The script's own release setting, shared by uploads and the D-65 revoke guard. */
|
|
15
|
+
export declare function readStoreScriptSettings(opts: Pick<ScopeStoreEnsurerOptions, 'accountId' | 'namespace' | 'apiToken'>, scriptName: string): Promise<{
|
|
16
|
+
exists: boolean;
|
|
17
|
+
release?: string;
|
|
18
|
+
build?: string;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* A driver's approvals as one request read them, after taking its hold on the driver (D-65): every
|
|
22
|
+
* row, revoked ones included, beside the compiled registration that judges them. Read once per
|
|
23
|
+
* push, serve, rebuild pass or rollout request, never cached across requests.
|
|
24
|
+
*/
|
|
25
|
+
export interface StoreDriverApprovals {
|
|
26
|
+
readonly registration: StoreDriverRegistration;
|
|
27
|
+
readonly records: readonly StoreDriverApprovalRecord[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The approval a move TO a release runs under: not revoked, and admitted by the registration's
|
|
31
|
+
* isolation basis. A rollout, a rollback, the return after a failed rollout and every upload of a
|
|
32
|
+
* script need one.
|
|
33
|
+
*/
|
|
34
|
+
export declare function liveApprovalOf(approvals: StoreDriverApprovals, sha256: string): StoreDriverApprovalRecord | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* The facts of a release a script is LEAVING: any of its approval rows, revoked or not. Its facts
|
|
37
|
+
* are fixed at its first approval, so every row agrees, and a revoked release can still be left.
|
|
38
|
+
*/
|
|
39
|
+
export declare function approvalFactsOf(approvals: StoreDriverApprovals, sha256: string): StoreDriverApprovalRecord | undefined;
|
|
13
40
|
/** One release of a driver's code, as the publish flow stores it (#2297). */
|
|
14
41
|
export interface StoreDriverReleaseArtifact extends PythonStoreDriverRelease {
|
|
15
42
|
/** The commit the bundle was built from. A reviewer reads it; the upload checks the sha256. */
|
|
@@ -39,6 +66,8 @@ export interface ScopeStoreEnsurerOptions {
|
|
|
39
66
|
readonly vertical: string;
|
|
40
67
|
readonly sha256?: string;
|
|
41
68
|
}) => Promise<StoreDriverReleaseArtifact | undefined>;
|
|
69
|
+
/** The driver's approvals, read by the caller under its hold (`readStoreDriverApprovals`). */
|
|
70
|
+
approvals: StoreDriverApprovals;
|
|
42
71
|
}
|
|
43
72
|
/**
|
|
44
73
|
* What the platform builds every store script from, as one digest (#2309): the entry, its
|
|
@@ -60,11 +89,13 @@ export declare function storePlatformFingerprint(keys: Pick<ScopeStoreEnsurerOpt
|
|
|
60
89
|
* - `to`: the script is moved to that release, or left alone when it already runs it, built the
|
|
61
90
|
* same way. Re-running a rollout therefore converges and uploads nothing twice.
|
|
62
91
|
*
|
|
63
|
-
* Every upload hashes the module bytes it is about to send and refuses (422) bytes whose
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
92
|
+
* Every upload hashes the module bytes it is about to send and refuses (422) bytes whose sha256
|
|
93
|
+
* has no live approval (D-65), or that are not the release asked for. That holds for a rebuild
|
|
94
|
+
* where the script stands too, so a script running a revoked release is not uploaded again until a
|
|
95
|
+
* rollout moves it. A driver with no release to run is refused (409). A script is never moved to a
|
|
96
|
+
* release whose approved `schema` is lower than that of the release it runs (409), judged from that
|
|
97
|
+
* release's approval facts, revoked or not: its objects may have migrated. The class the entry loads
|
|
98
|
+
* is the approval's. The runtime's own failures are 502. Answers how many scripts were uploaded.
|
|
68
99
|
*/
|
|
69
100
|
export declare function createScopeStoreEnsurer(opts: ScopeStoreEnsurerOptions): (input: {
|
|
70
101
|
vertical: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-script.d.ts","sourceRoot":"","sources":["../src/store-script.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"store-script.d.ts","sourceRoot":"","sources":["../src/store-script.ts"],"names":[],"mappings":"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"}
|
package/dist/store-script.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { SCOPE_STORE_CANARY, STORE_DRIVERS, scopeStoreCanaryScriptName, storeDriverReleaseDigest, } from '@substrat-run/contracts';
|
|
1
|
+
import { SCOPE_STORE_CANARY, STORE_DRIVERS, scopeStoreCanaryScriptName, storeDriverBasisAdmits, storeDriverReleaseDigest, } from '@substrat-run/contracts';
|
|
2
2
|
import { ControlPlaneError } from '@substrat-run/control-plane-client';
|
|
3
3
|
import { scopeStoreUploadPlan } from './deploy.js';
|
|
4
4
|
import { STORE_OBJECT_CLASS, STORE_RESERVED_BINDING_PREFIX } from './store-entry.generated.js';
|
|
5
5
|
import { withPythonStoreEntry } from './store-entry.js';
|
|
6
6
|
/**
|
|
7
|
-
* The binding that records which
|
|
7
|
+
* The binding that records which release a store script runs: the release bundle's
|
|
8
8
|
* sha256 (D-63). In the entry's reserved prefix, so the driver's env never carries it.
|
|
9
9
|
*/
|
|
10
10
|
export const STORE_RELEASE_VAR = `${STORE_RESERVED_BINDING_PREFIX}_RELEASE`;
|
|
@@ -13,6 +13,34 @@ export const STORE_RELEASE_VAR = `${STORE_RESERVED_BINDING_PREFIX}_RELEASE`;
|
|
|
13
13
|
* upload sent and its configuration. A changed entry, verifier, key list or flag changes it.
|
|
14
14
|
*/
|
|
15
15
|
export const STORE_BUILD_VAR = `${STORE_RESERVED_BINDING_PREFIX}_BUILD`;
|
|
16
|
+
/** The script's own release setting, shared by uploads and the D-65 revoke guard. */
|
|
17
|
+
export async function readStoreScriptSettings(opts, scriptName) {
|
|
18
|
+
const url = `https://api.cloudflare.com/client/v4/accounts/${opts.accountId}` +
|
|
19
|
+
`/workers/dispatch/namespaces/${opts.namespace}/scripts/${encodeURIComponent(scriptName)}`;
|
|
20
|
+
const res = await fetch(`${url}/settings`, { headers: { authorization: `Bearer ${opts.apiToken}` } });
|
|
21
|
+
if (res.status === 404)
|
|
22
|
+
return { exists: false };
|
|
23
|
+
if (!res.ok)
|
|
24
|
+
throw new ControlPlaneError(502, `store script settings failed (${res.status})`);
|
|
25
|
+
const body = (await res.json());
|
|
26
|
+
const text = (name) => body.result?.bindings?.find((b) => b.name === name)?.text;
|
|
27
|
+
return { exists: true, release: text(STORE_RELEASE_VAR), build: text(STORE_BUILD_VAR) };
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The approval a move TO a release runs under: not revoked, and admitted by the registration's
|
|
31
|
+
* isolation basis. A rollout, a rollback, the return after a failed rollout and every upload of a
|
|
32
|
+
* script need one.
|
|
33
|
+
*/
|
|
34
|
+
export function liveApprovalOf(approvals, sha256) {
|
|
35
|
+
return approvals.records.find((a) => a.sha256 === sha256 && a.revokedAt === null && storeDriverBasisAdmits(approvals.registration.isolationBasis, a.sourceReferences));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The facts of a release a script is LEAVING: any of its approval rows, revoked or not. Its facts
|
|
39
|
+
* are fixed at its first approval, so every row agrees, and a revoked release can still be left.
|
|
40
|
+
*/
|
|
41
|
+
export function approvalFactsOf(approvals, sha256) {
|
|
42
|
+
return approvals.records.find((a) => a.sha256 === sha256);
|
|
43
|
+
}
|
|
16
44
|
/**
|
|
17
45
|
* What the platform builds every store script from, as one digest (#2309): the entry, its
|
|
18
46
|
* verifier, the compatibility date and flags, and both key lists. It is the build digest of one
|
|
@@ -45,11 +73,13 @@ async function buildDigest(script) {
|
|
|
45
73
|
* - `to`: the script is moved to that release, or left alone when it already runs it, built the
|
|
46
74
|
* same way. Re-running a rollout therefore converges and uploads nothing twice.
|
|
47
75
|
*
|
|
48
|
-
* Every upload hashes the module bytes it is about to send and refuses (422) bytes whose
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
76
|
+
* Every upload hashes the module bytes it is about to send and refuses (422) bytes whose sha256
|
|
77
|
+
* has no live approval (D-65), or that are not the release asked for. That holds for a rebuild
|
|
78
|
+
* where the script stands too, so a script running a revoked release is not uploaded again until a
|
|
79
|
+
* rollout moves it. A driver with no release to run is refused (409). A script is never moved to a
|
|
80
|
+
* release whose approved `schema` is lower than that of the release it runs (409), judged from that
|
|
81
|
+
* release's approval facts, revoked or not: its objects may have migrated. The class the entry loads
|
|
82
|
+
* is the approval's. The runtime's own failures are 502. Answers how many scripts were uploaded.
|
|
53
83
|
*/
|
|
54
84
|
export function createScopeStoreEnsurer(opts) {
|
|
55
85
|
const ensure = scriptEnsurer(opts);
|
|
@@ -77,7 +107,7 @@ export function createStoreCanaryEnsurer(opts) {
|
|
|
77
107
|
if (!driver)
|
|
78
108
|
throw new ControlPlaneError(403, `scope store driver '${input.driver}' is not registered`);
|
|
79
109
|
const scriptName = scopeStoreCanaryScriptName(driver.driver);
|
|
80
|
-
const uploaded = await ensure({ driver: driver.driver, vertical: SCOPE_STORE_CANARY, scriptName
|
|
110
|
+
const uploaded = await ensure({ driver: driver.driver, vertical: SCOPE_STORE_CANARY, scriptName }, 'to' in input ? input.to : undefined, { anySchema: true, existingOnly: 'existingOnly' in input });
|
|
81
111
|
return { scriptName, uploaded };
|
|
82
112
|
};
|
|
83
113
|
}
|
|
@@ -85,7 +115,10 @@ function scriptEnsurer(opts) {
|
|
|
85
115
|
const scriptUrl = (name) => `https://api.cloudflare.com/client/v4/accounts/${opts.accountId}` +
|
|
86
116
|
`/workers/dispatch/namespaces/${opts.namespace}/scripts/${encodeURIComponent(name)}`;
|
|
87
117
|
return async (script, to, rule = {}) => {
|
|
88
|
-
|
|
118
|
+
if (opts.approvals.registration.driver !== script.driver) {
|
|
119
|
+
throw new ControlPlaneError(500, `store script '${script.scriptName}' was handed the approvals of driver '${opts.approvals.registration.driver}'`);
|
|
120
|
+
}
|
|
121
|
+
const current = await readStoreScriptSettings(opts, script.scriptName);
|
|
89
122
|
if (rule.existingOnly && !current.exists)
|
|
90
123
|
return false;
|
|
91
124
|
if (current.exists && !current.release) {
|
|
@@ -117,24 +150,24 @@ function scriptEnsurer(opts) {
|
|
|
117
150
|
if (asked && sha256 !== asked) {
|
|
118
151
|
throw new ControlPlaneError(422, `driver '${script.driver}' release ${asked} loaded as other bytes (${sha256})`);
|
|
119
152
|
}
|
|
120
|
-
const
|
|
121
|
-
if (!
|
|
122
|
-
throw new ControlPlaneError(422, `driver '${script.driver}' release ${sha256}
|
|
153
|
+
const approval = liveApprovalOf(opts.approvals, sha256);
|
|
154
|
+
if (!approval) {
|
|
155
|
+
throw new ControlPlaneError(422, `driver '${script.driver}' release ${sha256} has no live approval; roll '${script.scriptName}' out to an approved release`);
|
|
123
156
|
}
|
|
124
157
|
if (current.release && current.release !== sha256 && !rule.anySchema) {
|
|
125
|
-
const running =
|
|
158
|
+
const running = approvalFactsOf(opts.approvals, current.release);
|
|
126
159
|
if (!running) {
|
|
127
|
-
throw new ControlPlaneError(409, `store script '${script.scriptName}' runs ${current.release}, which
|
|
160
|
+
throw new ControlPlaneError(409, `store script '${script.scriptName}' runs ${current.release}, which was never approved, so its schema cannot be judged`);
|
|
128
161
|
}
|
|
129
|
-
if (
|
|
130
|
-
throw new ControlPlaneError(409, `store script '${script.scriptName}' runs schema ${running.schema}; release ${sha256} has schema ${
|
|
162
|
+
if (approval.schema < running.schema) {
|
|
163
|
+
throw new ControlPlaneError(409, `store script '${script.scriptName}' runs schema ${running.schema}; release ${sha256} has schema ${approval.schema}, and a script never moves to a lower one. ` +
|
|
131
164
|
`To undo a schema-raising rollout that stopped part way, converge it forward: post that rollout again`);
|
|
132
165
|
}
|
|
133
166
|
}
|
|
134
167
|
let built;
|
|
135
168
|
try {
|
|
136
169
|
built = withPythonStoreEntry(loaded, {
|
|
137
|
-
className:
|
|
170
|
+
className: approval.className,
|
|
138
171
|
script: script.scriptName,
|
|
139
172
|
callerPublicKeys: opts.callerPublicKeys,
|
|
140
173
|
platformPublicKeys: opts.platformPublicKeys,
|
|
@@ -149,16 +182,6 @@ function scriptEnsurer(opts) {
|
|
|
149
182
|
await put(scriptUrl(script.scriptName), script.scriptName, built, { sha256, build, first: !current.exists });
|
|
150
183
|
return true;
|
|
151
184
|
};
|
|
152
|
-
async function recorded(url) {
|
|
153
|
-
const res = await fetch(`${url}/settings`, { headers: { authorization: `Bearer ${opts.apiToken}` } });
|
|
154
|
-
if (res.status === 404)
|
|
155
|
-
return { exists: false };
|
|
156
|
-
if (!res.ok)
|
|
157
|
-
throw new ControlPlaneError(502, `store script settings failed (${res.status})`);
|
|
158
|
-
const body = (await res.json());
|
|
159
|
-
const text = (name) => body.result?.bindings?.find((b) => b.name === name)?.text;
|
|
160
|
-
return { exists: true, release: text(STORE_RELEASE_VAR), build: text(STORE_BUILD_VAR) };
|
|
161
|
-
}
|
|
162
185
|
async function put(url, scriptName, built, upload) {
|
|
163
186
|
const metadata = {
|
|
164
187
|
main_module: built.mainModule,
|