@kindgi/cli 0.1.6-rc.0 → 0.1.7-rc.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 +23 -12
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +84 -13
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.d.ts +5 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +102 -18
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/guardrails.d.ts.map +1 -1
- package/dist/commands/guardrails.js +13 -2
- package/dist/commands/guardrails.js.map +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +4 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +23 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/license.d.ts +3 -0
- package/dist/commands/license.d.ts.map +1 -0
- package/dist/commands/license.js +187 -0
- package/dist/commands/license.js.map +1 -0
- package/dist/commands/mcp.js +1 -1
- package/dist/commands/providers.d.ts.map +1 -1
- package/dist/commands/providers.js +11 -9
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +21 -9
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/webhooks.d.ts +20 -0
- package/dist/commands/webhooks.d.ts.map +1 -0
- package/dist/commands/webhooks.js +444 -0
- package/dist/commands/webhooks.js.map +1 -0
- package/dist/context.d.ts +4 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -0
- package/dist/context.js.map +1 -1
- package/dist/dev/already-running.d.ts +22 -0
- package/dist/dev/already-running.d.ts.map +1 -0
- package/dist/dev/already-running.js +72 -0
- package/dist/dev/already-running.js.map +1 -0
- package/dist/dev/defaults.d.ts.map +1 -1
- package/dist/dev/defaults.js +5 -2
- package/dist/dev/defaults.js.map +1 -1
- package/dist/dev/dev-lock.d.ts +50 -0
- package/dist/dev/dev-lock.d.ts.map +1 -0
- package/dist/dev/dev-lock.js +203 -0
- package/dist/dev/dev-lock.js.map +1 -0
- package/dist/dev/port.d.ts +6 -2
- package/dist/dev/port.d.ts.map +1 -1
- package/dist/dev/port.js +8 -4
- package/dist/dev/port.js.map +1 -1
- package/dist/dev/providers.d.ts.map +1 -1
- package/dist/dev/providers.js +112 -23
- package/dist/dev/providers.js.map +1 -1
- package/dist/dev/runners.d.ts +21 -2
- package/dist/dev/runners.d.ts.map +1 -1
- package/dist/dev/runtime-container.d.ts +78 -3
- package/dist/dev/runtime-container.d.ts.map +1 -1
- package/dist/dev/runtime-container.js +256 -25
- package/dist/dev/runtime-container.js.map +1 -1
- package/dist/dev/runtime-image.d.ts +1 -1
- package/dist/dev/runtime-image.js +1 -1
- package/dist/dev/start-phases.d.ts +41 -0
- package/dist/dev/start-phases.d.ts.map +1 -0
- package/dist/dev/start-phases.js +103 -0
- package/dist/dev/start-phases.js.map +1 -0
- package/dist/help.js +1 -1
- package/dist/help.js.map +1 -1
- package/dist/init/augment-scaffolder.d.ts +20 -7
- package/dist/init/augment-scaffolder.d.ts.map +1 -1
- package/dist/init/augment-scaffolder.js +94 -21
- package/dist/init/augment-scaffolder.js.map +1 -1
- package/dist/init/pinning.d.ts +39 -0
- package/dist/init/pinning.d.ts.map +1 -0
- package/dist/init/pinning.js +130 -0
- package/dist/init/pinning.js.map +1 -0
- package/dist/init/template-files.d.ts +1 -1
- package/dist/init/tsconfig-paths.d.ts +29 -0
- package/dist/init/tsconfig-paths.d.ts.map +1 -0
- package/dist/init/tsconfig-paths.js +235 -0
- package/dist/init/tsconfig-paths.js.map +1 -0
- package/dist/init/vitest-setup.d.ts +41 -0
- package/dist/init/vitest-setup.d.ts.map +1 -0
- package/dist/init/vitest-setup.js +163 -0
- package/dist/init/vitest-setup.js.map +1 -0
- package/dist/license/aws.d.ts +24 -0
- package/dist/license/aws.d.ts.map +1 -0
- package/dist/license/aws.js +291 -0
- package/dist/license/aws.js.map +1 -0
- package/dist/license/cloud.d.ts +13 -0
- package/dist/license/cloud.d.ts.map +1 -0
- package/dist/license/cloud.js +193 -0
- package/dist/license/cloud.js.map +1 -0
- package/dist/license/expiry.d.ts +33 -0
- package/dist/license/expiry.d.ts.map +1 -0
- package/dist/license/expiry.js +35 -0
- package/dist/license/expiry.js.map +1 -0
- package/dist/license/license-key.d.ts +32 -0
- package/dist/license/license-key.d.ts.map +1 -0
- package/dist/license/license-key.js +91 -0
- package/dist/license/license-key.js.map +1 -0
- package/dist/license/protocol.d.ts +63 -0
- package/dist/license/protocol.d.ts.map +1 -0
- package/dist/license/protocol.js +102 -0
- package/dist/license/protocol.js.map +1 -0
- package/dist/license/renew.d.ts +59 -0
- package/dist/license/renew.d.ts.map +1 -0
- package/dist/license/renew.js +153 -0
- package/dist/license/renew.js.map +1 -0
- package/dist/license/stores.d.ts +19 -0
- package/dist/license/stores.d.ts.map +1 -0
- package/dist/license/stores.js +150 -0
- package/dist/license/stores.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -0
- package/dist/main.js.map +1 -1
- package/dist/package-manager.d.ts.map +1 -1
- package/dist/package-manager.js +2 -1
- package/dist/package-manager.js.map +1 -1
- package/dist/providers/preset-loader.d.ts +52 -1
- package/dist/providers/preset-loader.d.ts.map +1 -1
- package/dist/providers/preset-loader.js +85 -6
- package/dist/providers/preset-loader.js.map +1 -1
- package/dist/providers/presets/anthropic.json +1 -1
- package/dist/providers/presets/azure-openai.json +65 -0
- package/dist/providers/presets/bedrock.json +102 -0
- package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +3 -3
- package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +3 -3
- package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +11 -10
- package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +4 -4
- package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +16 -9
- package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +9 -11
- package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +3 -3
- package/dist/sdk-skills/kindgi-getting-started/SKILL.md +28 -5
- package/dist/sdk-skills/kindgi-java-authoring-agents/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-java-authoring-flows/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-java-authoring-guardrails/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-java-authoring-tools/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-java-getting-started/SKILL.md +6 -1
- package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +6 -1
- package/dist/sdk-skills/kindgi-scala-authoring-agents/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-scala-authoring-flows/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-scala-authoring-guardrails/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-scala-authoring-tools/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-scala-getting-started/SKILL.md +6 -1
- package/dist/sdk-skills/kindgi-using/SKILL.md +236 -0
- package/dist/templates/drupal/.nvmrc +1 -0
- package/dist/templates/drupal/AGENTS.md +62 -0
- package/dist/templates/drupal/README.md.tmpl +321 -0
- package/dist/templates/drupal/agents/content-agent/index.test.ts.tmpl +47 -0
- package/dist/templates/drupal/agents/content-agent/index.ts.tmpl +69 -0
- package/dist/templates/drupal/agents/content-reviewer/index.test.ts.tmpl +37 -0
- package/dist/templates/drupal/agents/content-reviewer/index.ts.tmpl +57 -0
- package/dist/templates/drupal/fixtures/node-updated.json +174 -0
- package/dist/templates/drupal/flows/content-review/index.ts.tmpl +66 -0
- package/dist/templates/drupal/gitignore +8 -0
- package/dist/templates/drupal/guardrails/no-contact-details/index.test.ts.tmpl +29 -0
- package/dist/templates/drupal/guardrails/no-contact-details/index.ts.tmpl +73 -0
- package/dist/templates/drupal/kindgi.config.ts.tmpl +41 -0
- package/dist/templates/drupal/lib/drupal.ts.tmpl +64 -0
- package/dist/templates/drupal/package.json.tmpl +31 -0
- package/dist/templates/drupal/pnpm-workspace.yaml +9 -0
- package/dist/templates/drupal/scripts/connect-drupal.mjs.tmpl +57 -0
- package/dist/templates/drupal/tools/check-content-event/index.test.ts.tmpl +72 -0
- package/dist/templates/drupal/tools/check-content-event/index.ts.tmpl +115 -0
- package/dist/templates/drupal/tsconfig.json.tmpl +28 -0
- package/dist/templates/drupal/vitest.config.ts.tmpl +14 -0
- package/dist/templates/java/AGENTS.md +6 -0
- package/dist/templates/java/README.md.tmpl +1 -1
- package/dist/templates/minimal/AGENTS.md +6 -0
- package/dist/templates/minimal/README.md.tmpl +3 -2
- package/dist/templates/minimal/package.json.tmpl +3 -2
- package/dist/templates/python/AGENTS.md +3 -2
- package/dist/templates/sample/AGENTS.md +6 -0
- package/dist/templates/sample/package.json.tmpl +3 -2
- package/dist/templates/scala/AGENTS.md +6 -0
- package/dist/templates/scala/README.md.tmpl +1 -1
- package/dist/templates/woocommerce/.nvmrc +1 -0
- package/dist/templates/woocommerce/AGENTS.md +49 -0
- package/dist/templates/woocommerce/README.md.tmpl +273 -0
- package/dist/templates/woocommerce/agents/order-reviewer/index.test.ts.tmpl +28 -0
- package/dist/templates/woocommerce/agents/order-reviewer/index.ts.tmpl +45 -0
- package/dist/templates/woocommerce/agents/store-agent/index.test.ts.tmpl +47 -0
- package/dist/templates/woocommerce/agents/store-agent/index.ts.tmpl +79 -0
- package/dist/templates/woocommerce/fixtures/order-created.json +67 -0
- package/dist/templates/woocommerce/flows/order-review/index.ts.tmpl +64 -0
- package/dist/templates/woocommerce/gitignore +8 -0
- package/dist/templates/woocommerce/guardrails/no-customer-contact-details/index.test.ts.tmpl +29 -0
- package/dist/templates/woocommerce/guardrails/no-customer-contact-details/index.ts.tmpl +74 -0
- package/dist/templates/woocommerce/kindgi.config.ts.tmpl +41 -0
- package/dist/templates/woocommerce/lib/fake-store.ts.tmpl +82 -0
- package/dist/templates/woocommerce/lib/woo.ts.tmpl +182 -0
- package/dist/templates/woocommerce/package.json.tmpl +30 -0
- package/dist/templates/woocommerce/pnpm-workspace.yaml +9 -0
- package/dist/templates/woocommerce/tools/check-order-event/index.test.ts.tmpl +76 -0
- package/dist/templates/woocommerce/tools/check-order-event/index.ts.tmpl +131 -0
- package/dist/templates/woocommerce/tools/find-orders/index.ts.tmpl +80 -0
- package/dist/templates/woocommerce/tools/publish-product/index.ts.tmpl +34 -0
- package/dist/templates/woocommerce/tools/refund/index.test.ts.tmpl +125 -0
- package/dist/templates/woocommerce/tools/refund/index.ts.tmpl +70 -0
- package/dist/templates/woocommerce/tools/refund-large/index.test.ts.tmpl +53 -0
- package/dist/templates/woocommerce/tools/refund-large/index.ts.tmpl +44 -0
- package/dist/templates/woocommerce/tools/set-price/index.ts.tmpl +36 -0
- package/dist/templates/woocommerce/tsconfig.json.tmpl +28 -0
- package/dist/templates/woocommerce/vitest.config.ts.tmpl +14 -0
- package/dist/test/defaults.d.ts +1 -1
- package/dist/test/defaults.d.ts.map +1 -1
- package/dist/test/defaults.js +2 -7
- package/dist/test/defaults.js.map +1 -1
- package/dist/test/runners.d.ts +6 -0
- package/dist/test/runners.d.ts.map +1 -1
- package/dist/test/runners.js +18 -1
- package/dist/test/runners.js.map +1 -1
- package/package.json +14 -14
|
@@ -16,9 +16,11 @@
|
|
|
16
16
|
import { spawn } from 'node:child_process';
|
|
17
17
|
import { createHash } from 'node:crypto';
|
|
18
18
|
import { lineReader } from './lines.js';
|
|
19
|
-
import { textLines } from './log-view.js';
|
|
19
|
+
import { parseRecord, textLines } from './log-view.js';
|
|
20
20
|
import { RUNTIME_EXPORT_SIGNING_KEY, RUNTIME_GOOGLE_CREDENTIALS, RUNTIME_PACK_DIR, RUNTIME_PUBLIC_TOKEN_KEY, } from './runtime-env.js';
|
|
21
|
+
import { registryOf } from './runtime-image.js';
|
|
21
22
|
import { credentialHelperFailure, credentialHelperHint, isRegistryAuthFailure, registryLoginCommand, } from './runtime-registry.js';
|
|
23
|
+
import { NO_START_PHASES, formatSize } from './start-phases.js';
|
|
22
24
|
/** The port the image's server listens on (its `KINDGI_API_PORT`). */
|
|
23
25
|
export const IMAGE_API_PORT = 4000;
|
|
24
26
|
/** Run one `docker` command to completion. */
|
|
@@ -26,17 +28,27 @@ export function docker(args, options = {}) {
|
|
|
26
28
|
return new Promise((resolve) => {
|
|
27
29
|
const child = spawn('docker', args, {
|
|
28
30
|
stdio: [options.stdin === undefined ? 'ignore' : 'pipe', 'pipe', 'pipe'],
|
|
31
|
+
...(options.signal !== undefined && { signal: options.signal }),
|
|
29
32
|
});
|
|
30
33
|
let stdout = '';
|
|
31
34
|
let stderr = '';
|
|
35
|
+
const onLine = options.onLine;
|
|
36
|
+
const outLines = onLine === undefined ? undefined : lineReader(onLine);
|
|
37
|
+
const errLines = onLine === undefined ? undefined : lineReader(onLine);
|
|
32
38
|
child.stdout?.on('data', (chunk) => {
|
|
33
39
|
stdout += chunk.toString();
|
|
40
|
+
outLines?.push(chunk.toString());
|
|
34
41
|
});
|
|
35
42
|
child.stderr?.on('data', (chunk) => {
|
|
36
43
|
stderr += chunk.toString();
|
|
44
|
+
errLines?.push(chunk.toString());
|
|
37
45
|
});
|
|
38
46
|
child.once('error', (err) => resolve({ code: null, stdout, stderr: err.message }));
|
|
39
|
-
child.once('close', (code) =>
|
|
47
|
+
child.once('close', (code) => {
|
|
48
|
+
outLines?.end();
|
|
49
|
+
errLines?.end();
|
|
50
|
+
resolve({ code, stdout, stderr });
|
|
51
|
+
});
|
|
40
52
|
if (options.stdin !== undefined) {
|
|
41
53
|
// `docker` may exit without reading it (a bad flag, or no `docker`
|
|
42
54
|
// at all): the write's EPIPE is reported by the exit, not thrown.
|
|
@@ -83,20 +95,43 @@ export function runtimeContainerName(packDir) {
|
|
|
83
95
|
return `kindgi-dev-runtime-${createHash('sha256').update(packDir).digest('hex').slice(0, 12)}`;
|
|
84
96
|
}
|
|
85
97
|
/**
|
|
86
|
-
* Make sure the image is here, pulling it if not
|
|
87
|
-
*
|
|
98
|
+
* Make sure the image is here, pulling it if not: the pull is a phase,
|
|
99
|
+
* said at once, with how much has come as each layer arrives. The image's
|
|
100
|
+
* size comes from its manifest, read beside the pull (it never waits on
|
|
101
|
+
* the registry's answer) and given up when the pull ends. A private image
|
|
102
|
+
* needs a registry login first (`kindgi auth registry`); the error says so.
|
|
88
103
|
*/
|
|
89
|
-
export async function ensureRuntimeImage(image,
|
|
104
|
+
export async function ensureRuntimeImage(image, phases = NO_START_PHASES) {
|
|
90
105
|
const present = await docker(['image', 'inspect', '--format', '{{.Id}}', image]);
|
|
91
106
|
if (present.code === 0)
|
|
92
107
|
return { kind: 'ok' };
|
|
93
108
|
if (present.code === null) {
|
|
94
109
|
return { kind: 'error', message: `Docker isn't available: ${present.stderr}` };
|
|
95
110
|
}
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
|
|
111
|
+
phases.begin('pull', `${image} (first run only)`);
|
|
112
|
+
const progress = pullProgress();
|
|
113
|
+
const manifestRead = new AbortController();
|
|
114
|
+
void imageLayers(image, manifestRead.signal)
|
|
115
|
+
.then((layers) => {
|
|
116
|
+
if (layers !== undefined && !manifestRead.signal.aborted) {
|
|
117
|
+
phases.progress('pull', progress.sized(layers));
|
|
118
|
+
}
|
|
119
|
+
})
|
|
120
|
+
// It can't reject today (`docker` reports, never throws); an unhandled rejection would end the CLI.
|
|
121
|
+
.catch(() => undefined);
|
|
122
|
+
const pulled = await docker(['pull', image], {
|
|
123
|
+
onLine: (line) => {
|
|
124
|
+
const note = progress.take(line);
|
|
125
|
+
if (note !== undefined)
|
|
126
|
+
phases.progress('pull', note);
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
manifestRead.abort();
|
|
130
|
+
if (pulled.code === 0) {
|
|
131
|
+
const total = progress.totalBytes();
|
|
132
|
+
phases.end('pull', total > 0 ? formatSize(total) : undefined);
|
|
99
133
|
return { kind: 'ok' };
|
|
134
|
+
}
|
|
100
135
|
const detail = dockerFailureDetail(pulled.stderr);
|
|
101
136
|
const helper = credentialHelperFailure(pulled.stderr);
|
|
102
137
|
const auth = helper !== undefined
|
|
@@ -106,11 +141,172 @@ export async function ensureRuntimeImage(image, onProgress) {
|
|
|
106
141
|
: '';
|
|
107
142
|
return { kind: 'error', message: `Couldn't pull ${image}: ${detail}${auth}` };
|
|
108
143
|
}
|
|
144
|
+
/** How long a registry gets to answer for the image's manifest (the pull goes on meanwhile). */
|
|
145
|
+
const MANIFEST_TIMEOUT_MS = 15_000;
|
|
146
|
+
/**
|
|
147
|
+
* The layers `docker pull` will fetch for this machine, from the image's
|
|
148
|
+
* manifest (`docker manifest inspect --verbose`, a registry read that
|
|
149
|
+
* stores nothing); `undefined` when the registry doesn't say, or for a
|
|
150
|
+
* Docker Hub image, whose manifest reads count against its pull limit.
|
|
151
|
+
*/
|
|
152
|
+
async function imageLayers(image, stop) {
|
|
153
|
+
if (registryOf(image) === 'docker.io')
|
|
154
|
+
return undefined;
|
|
155
|
+
const signal = AbortSignal.any([stop, AbortSignal.timeout(MANIFEST_TIMEOUT_MS)]);
|
|
156
|
+
const platform = await docker(['version', '--format', '{{.Server.Os}}/{{.Server.Arch}}'], {
|
|
157
|
+
signal,
|
|
158
|
+
});
|
|
159
|
+
if (platform.code !== 0)
|
|
160
|
+
return undefined;
|
|
161
|
+
const manifest = await docker(['manifest', 'inspect', '--verbose', image], { signal });
|
|
162
|
+
if (manifest.code !== 0)
|
|
163
|
+
return undefined;
|
|
164
|
+
return manifestLayers(manifest.stdout, platform.stdout.trim());
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* The layers for `platform` (`linux/arm64`) in `docker manifest inspect
|
|
168
|
+
* --verbose`'s output: one entry per platform for an index (attestations,
|
|
169
|
+
* `unknown/unknown`, are skipped), or one manifest.
|
|
170
|
+
*/
|
|
171
|
+
export function manifestLayers(json, platform) {
|
|
172
|
+
let parsed;
|
|
173
|
+
try {
|
|
174
|
+
parsed = JSON.parse(json);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
const entries = (Array.isArray(parsed) ? parsed : [parsed]).filter(isObject);
|
|
180
|
+
const [os, architecture] = platform.split('/');
|
|
181
|
+
// One manifest is this machine's; an index's entries name theirs.
|
|
182
|
+
const entry = entries.length === 1
|
|
183
|
+
? entries[0]
|
|
184
|
+
: entries.find((e) => {
|
|
185
|
+
const p = isObject(e.Descriptor) && isObject(e.Descriptor.platform) ? e.Descriptor.platform : {};
|
|
186
|
+
return p.os === os && p.architecture === architecture;
|
|
187
|
+
});
|
|
188
|
+
return entry === undefined ? undefined : layersOf(entry);
|
|
189
|
+
}
|
|
190
|
+
/** A verbose manifest entry's layers, when each has a digest and a size. */
|
|
191
|
+
function layersOf(entry) {
|
|
192
|
+
const manifest = entry.SchemaV2Manifest ?? entry.OCIManifest;
|
|
193
|
+
const layers = isObject(manifest) ? manifest.layers : undefined;
|
|
194
|
+
if (!Array.isArray(layers) || layers.length === 0)
|
|
195
|
+
return undefined;
|
|
196
|
+
const out = [];
|
|
197
|
+
for (const layer of layers) {
|
|
198
|
+
if (!isObject(layer) || typeof layer.digest !== 'string' || typeof layer.size !== 'number') {
|
|
199
|
+
return undefined;
|
|
200
|
+
}
|
|
201
|
+
out.push({ digest: layer.digest, size: layer.size });
|
|
202
|
+
}
|
|
203
|
+
return out;
|
|
204
|
+
}
|
|
205
|
+
function isObject(value) {
|
|
206
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
207
|
+
}
|
|
208
|
+
/** A pull's line saying a layer is in: its 12-character id. */
|
|
209
|
+
const LAYER_IN = /^([0-9a-f]{12}): (?:Download complete|Pull complete|Already exists)\s*$/;
|
|
210
|
+
/**
|
|
211
|
+
* A pull's progress from its lines: without a terminal, `docker pull`
|
|
212
|
+
* prints no byte counts, only a line as each layer arrives, so the bytes
|
|
213
|
+
* so far are the sizes of the layers in, once the manifest has said them
|
|
214
|
+
* (until then, layers are counted). `take` answers a line that moved it,
|
|
215
|
+
* and `sized` the manifest's layers, with the progress as words.
|
|
216
|
+
*/
|
|
217
|
+
export function pullProgress() {
|
|
218
|
+
const sizes = new Map();
|
|
219
|
+
const done = new Set();
|
|
220
|
+
const total = () => [...sizes.values()].reduce((sum, n) => sum + n, 0);
|
|
221
|
+
const note = () => {
|
|
222
|
+
if (sizes.size === 0)
|
|
223
|
+
return `${done.size} ${done.size === 1 ? 'layer' : 'layers'} in`;
|
|
224
|
+
if (done.size === 0)
|
|
225
|
+
return `${formatSize(total())} in ${sizes.size} layers`;
|
|
226
|
+
let bytes = 0;
|
|
227
|
+
for (const d of done)
|
|
228
|
+
bytes += sizes.get(d) ?? 0;
|
|
229
|
+
return `${formatSize(bytes)} of ${formatSize(total())}, ${Math.min(done.size, sizes.size)} of ${sizes.size} layers`;
|
|
230
|
+
};
|
|
231
|
+
return {
|
|
232
|
+
take(line) {
|
|
233
|
+
const id = LAYER_IN.exec(line.replace(/^.*\r/, ''))?.[1];
|
|
234
|
+
if (id === undefined || done.has(id))
|
|
235
|
+
return undefined;
|
|
236
|
+
done.add(id);
|
|
237
|
+
return note();
|
|
238
|
+
},
|
|
239
|
+
sized(layers) {
|
|
240
|
+
for (const layer of layers) {
|
|
241
|
+
sizes.set(layer.digest.replace(/^sha256:/, '').slice(0, 12), layer.size);
|
|
242
|
+
}
|
|
243
|
+
return note();
|
|
244
|
+
},
|
|
245
|
+
totalBytes: total,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/** The label naming the `kindgi dev` that started a runtime container. */
|
|
249
|
+
export const RUNTIME_OWNER_LABEL = 'kindgi.dev.owner';
|
|
250
|
+
/**
|
|
251
|
+
* The owner named by an existing container's label when it's another
|
|
252
|
+
* `kindgi dev` that is still alive, whether the container runs or not
|
|
253
|
+
* (it's stopped between its create and start, and while its owner reads
|
|
254
|
+
* why it stopped: no `--rm`); `undefined` when it may be replaced:
|
|
255
|
+
* unlabeled (an older CLI's), this `kindgi dev`'s own, or its owner gone.
|
|
256
|
+
*/
|
|
257
|
+
export async function ownedElsewhere(label, self) {
|
|
258
|
+
// Whole: the owner holds the process's start time, which has spaces.
|
|
259
|
+
const owner = label.trim();
|
|
260
|
+
if (owner === '' || owner === '<no value>' || owner === self.owner)
|
|
261
|
+
return undefined;
|
|
262
|
+
return (await self.ownerIsLive?.(owner)) === true ? owner : undefined;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Clear the way for this pack's runtime container: one left by an earlier
|
|
266
|
+
* `kindgi dev` of this pack (a crashed session) is removed, but never one
|
|
267
|
+
* another live `kindgi dev` owns (its lock was skipped: an older CLI, a
|
|
268
|
+
* lock removed by hand), which throws `RuntimeOwnedElsewhere` and is left
|
|
269
|
+
* as it is. The port check and the start both go through here. It removes
|
|
270
|
+
* by the id it checked, never by the name, which another could reuse.
|
|
271
|
+
*/
|
|
272
|
+
export async function removeReplaceableRuntimeContainer(name, self) {
|
|
273
|
+
const run = self.docker ?? docker;
|
|
274
|
+
const existing = await run([
|
|
275
|
+
'inspect',
|
|
276
|
+
'--format',
|
|
277
|
+
`{{.Id}} {{index .Config.Labels "${RUNTIME_OWNER_LABEL}"}}`,
|
|
278
|
+
name,
|
|
279
|
+
]);
|
|
280
|
+
if (existing.code !== 0)
|
|
281
|
+
return;
|
|
282
|
+
// The id has no spaces; the rest is the label, whole.
|
|
283
|
+
const line = existing.stdout.trim();
|
|
284
|
+
const space = line.indexOf(' ');
|
|
285
|
+
const id = space === -1 ? line : line.slice(0, space);
|
|
286
|
+
const owner = await ownedElsewhere(space === -1 ? '' : line.slice(space + 1), self);
|
|
287
|
+
if (owner !== undefined)
|
|
288
|
+
throw new RuntimeOwnedElsewhere(name, owner);
|
|
289
|
+
await run(['rm', '--force', id]);
|
|
290
|
+
}
|
|
291
|
+
/** This pack's runtime container runs for another `kindgi dev`, still alive: it isn't touched. */
|
|
292
|
+
export class RuntimeOwnedElsewhere extends Error {
|
|
293
|
+
container;
|
|
294
|
+
owner;
|
|
295
|
+
constructor(container, owner) {
|
|
296
|
+
const pid = owner.split('@')[0];
|
|
297
|
+
super(`this pack's runtime container (${container}) belongs to another kindgi dev (pid ${pid}), still running`);
|
|
298
|
+
this.container = container;
|
|
299
|
+
this.owner = owner;
|
|
300
|
+
this.name = 'RuntimeOwnedElsewhere';
|
|
301
|
+
}
|
|
302
|
+
}
|
|
109
303
|
/** The `docker run` arguments for the runtime container. */
|
|
110
304
|
export function runtimeRunArgs(name, options) {
|
|
111
305
|
// No --rm: a container that stops while starting is read (its logs, how
|
|
112
306
|
// it exited) before kindgi dev removes it; `stop` removes it too.
|
|
113
307
|
const args = ['run', '--detach', '--name', name, '--env-file', options.envFile];
|
|
308
|
+
if (options.owner !== undefined)
|
|
309
|
+
args.push('--label', `${RUNTIME_OWNER_LABEL}=${options.owner}`);
|
|
114
310
|
args.push('--volume', `${options.packDir}:${RUNTIME_PACK_DIR}`);
|
|
115
311
|
if (options.googleCredentials !== undefined) {
|
|
116
312
|
args.push('--volume', `${options.googleCredentials}:${RUNTIME_GOOGLE_CREDENTIALS}:ro`);
|
|
@@ -175,18 +371,30 @@ const PACK_DIR_BANNER = ` Pack: ${RUNTIME_PACK_DIR} `;
|
|
|
175
371
|
* container for the same pack (a crashed session) is replaced.
|
|
176
372
|
*/
|
|
177
373
|
export async function startRuntimeContainer(options, wait = {}) {
|
|
374
|
+
const run = options.docker ?? docker;
|
|
178
375
|
const name = runtimeContainerName(options.packDir);
|
|
179
|
-
|
|
180
|
-
|
|
376
|
+
const phases = options.phases ?? NO_START_PHASES;
|
|
377
|
+
phases.begin('container');
|
|
378
|
+
await removeReplaceableRuntimeContainer(name, options);
|
|
379
|
+
const started = await run(runtimeRunArgs(name, options));
|
|
181
380
|
if (started.code !== 0) {
|
|
182
381
|
throw new Error(`docker run failed: ${dockerFailureDetail(started.stderr)}`);
|
|
183
382
|
}
|
|
383
|
+
// From here on, the container this run started, by its id (`--detach`
|
|
384
|
+
// prints it): never the name, which another kindgi dev could reuse for
|
|
385
|
+
// a container of its own.
|
|
386
|
+
const id = started.stdout.trim().split('\n').pop()?.trim() ?? '';
|
|
387
|
+
if (!/^[0-9a-f]{12,64}$/.test(id)) {
|
|
388
|
+
throw new Error(`docker run printed no container id: ${lastLines(started.stdout)}`);
|
|
389
|
+
}
|
|
390
|
+
phases.end('container');
|
|
391
|
+
phases.begin('serve');
|
|
184
392
|
// The runtime's latest lines as text (a record as its pretty line, the
|
|
185
393
|
// JSON boot record as its banner lines), enough for the boot wait and a
|
|
186
394
|
// failure's tail: a long session's lines aren't kept (they're shown as
|
|
187
395
|
// they come).
|
|
188
396
|
const lines = [];
|
|
189
|
-
let logs = spawn('docker', ['logs', '--follow',
|
|
397
|
+
let logs = spawn('docker', ['logs', '--follow', id], {
|
|
190
398
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
191
399
|
});
|
|
192
400
|
const reader = (stream) => lineReader((line) => {
|
|
@@ -198,7 +406,12 @@ export async function startRuntimeContainer(options, wait = {}) {
|
|
|
198
406
|
lines.push(...textLines(line));
|
|
199
407
|
if (lines.length > KEPT_LINES)
|
|
200
408
|
lines.splice(0, lines.length - KEPT_LINES);
|
|
201
|
-
|
|
409
|
+
// The runtime's migration records are the migrating phase's start and end.
|
|
410
|
+
const stage = migrationStage(line);
|
|
411
|
+
if (stage === undefined)
|
|
412
|
+
options.onLog(line, stream);
|
|
413
|
+
else
|
|
414
|
+
migrationPhase(stage, phases);
|
|
202
415
|
});
|
|
203
416
|
const out = reader('stdout');
|
|
204
417
|
const err = reader('stderr');
|
|
@@ -217,8 +430,8 @@ export async function startRuntimeContainer(options, wait = {}) {
|
|
|
217
430
|
};
|
|
218
431
|
const stop = async () => {
|
|
219
432
|
stopFollowing();
|
|
220
|
-
await
|
|
221
|
-
await
|
|
433
|
+
await run(['stop', '--time', '10', id]);
|
|
434
|
+
await run(['rm', '--force', id]);
|
|
222
435
|
};
|
|
223
436
|
const baseUrl = `http://127.0.0.1:${options.hostPort}`;
|
|
224
437
|
const doFetch = wait.fetch ?? fetch;
|
|
@@ -227,7 +440,7 @@ export async function startRuntimeContainer(options, wait = {}) {
|
|
|
227
440
|
if (options.signal?.aborted === true) {
|
|
228
441
|
// It hasn't served anything: removed at once, not stopped gracefully.
|
|
229
442
|
stopFollowing();
|
|
230
|
-
await
|
|
443
|
+
await run(['rm', '--force', id]);
|
|
231
444
|
throw new RuntimeStartStopped();
|
|
232
445
|
}
|
|
233
446
|
const healthy = await doFetch(`${baseUrl}/health`, { signal: AbortSignal.timeout(2_000) })
|
|
@@ -236,10 +449,10 @@ export async function startRuntimeContainer(options, wait = {}) {
|
|
|
236
449
|
// Serving, and its banner printed (the pack line comes after the URL).
|
|
237
450
|
if (healthy && lines.some((l) => l.startsWith(PACK_DIR_BANNER)))
|
|
238
451
|
break;
|
|
239
|
-
const running = await
|
|
452
|
+
const running = await run(['inspect', '--format', '{{.State.Running}}', id]);
|
|
240
453
|
if (running.code !== 0 || running.stdout.trim() !== 'true') {
|
|
241
454
|
stopFollowing();
|
|
242
|
-
throw await startupFailure(
|
|
455
|
+
throw await startupFailure(id, lines, run);
|
|
243
456
|
}
|
|
244
457
|
const hopeless = waitingWontHelp(options.image, lines, deadline);
|
|
245
458
|
if (hopeless !== undefined) {
|
|
@@ -248,7 +461,25 @@ export async function startRuntimeContainer(options, wait = {}) {
|
|
|
248
461
|
}
|
|
249
462
|
await pauseUnlessStopped(250, options.signal);
|
|
250
463
|
}
|
|
251
|
-
return { name, baseUrl, banner: lines.join('\n'), stop };
|
|
464
|
+
return { name, id, baseUrl, banner: lines.join('\n'), stop };
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Whether a runtime line is one of its migration records: `start` before
|
|
468
|
+
* it applies the database's migrations, `done` after. A runtime that
|
|
469
|
+
* writes none (older images) never shows a migrating phase.
|
|
470
|
+
*/
|
|
471
|
+
export function migrationStage(line) {
|
|
472
|
+
const record = parseRecord(line);
|
|
473
|
+
if (record?.subsystem !== 'migrations')
|
|
474
|
+
return undefined;
|
|
475
|
+
return record.stage === 'start' || record.stage === 'done' ? record.stage : undefined;
|
|
476
|
+
}
|
|
477
|
+
/** Migrating begins at its `start` record; its `done` ends it, and waiting for it to serve goes on. */
|
|
478
|
+
function migrationPhase(stage, phases) {
|
|
479
|
+
if (stage === 'start')
|
|
480
|
+
phases.begin('migrate');
|
|
481
|
+
else if (phases.end('migrate'))
|
|
482
|
+
phases.begin('serve');
|
|
252
483
|
}
|
|
253
484
|
/** Why waiting longer for a running container won't help, if it won't. */
|
|
254
485
|
function waitingWontHelp(image, lines, deadline) {
|
|
@@ -267,9 +498,9 @@ function waitingWontHelp(image, lines, deadline) {
|
|
|
267
498
|
* (one that exits at once can stop before `docker logs --follow`
|
|
268
499
|
* attaches), then removed.
|
|
269
500
|
*/
|
|
270
|
-
async function startupFailure(
|
|
271
|
-
const stopped = await stoppedContainer(
|
|
272
|
-
await
|
|
501
|
+
async function startupFailure(id, followed, run) {
|
|
502
|
+
const stopped = await stoppedContainer(id, run);
|
|
503
|
+
await run(['rm', '--force', id]);
|
|
273
504
|
return new Error(describeStartupStop(stopped.lines.length > 0 ? stopped.lines : followed, stopped.exit));
|
|
274
505
|
}
|
|
275
506
|
/**
|
|
@@ -300,10 +531,10 @@ function describeExit(exit) {
|
|
|
300
531
|
return ` (exit code ${exit.code}${meaning}${error})`;
|
|
301
532
|
}
|
|
302
533
|
/** A stopped container's whole log, in the order it was written, and how it exited. */
|
|
303
|
-
async function stoppedContainer(
|
|
534
|
+
async function stoppedContainer(id, run) {
|
|
304
535
|
const logLines = await new Promise((resolve) => {
|
|
305
536
|
const out = [];
|
|
306
|
-
const child = spawn('docker', ['logs',
|
|
537
|
+
const child = spawn('docker', ['logs', id], { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
307
538
|
const onChunk = (chunk) => {
|
|
308
539
|
for (const line of chunk.toString().split('\n')) {
|
|
309
540
|
if (line !== '' && !line.startsWith(DOCKER_DAEMON_ERROR))
|
|
@@ -315,11 +546,11 @@ async function stoppedContainer(name) {
|
|
|
315
546
|
child.on('error', () => resolve(out));
|
|
316
547
|
child.on('close', () => resolve(out));
|
|
317
548
|
});
|
|
318
|
-
const state = await
|
|
549
|
+
const state = await run([
|
|
319
550
|
'inspect',
|
|
320
551
|
'--format',
|
|
321
552
|
'{{.State.ExitCode}}|{{.State.OOMKilled}}|{{.State.Error}}',
|
|
322
|
-
|
|
553
|
+
id,
|
|
323
554
|
]);
|
|
324
555
|
if (state.code !== 0)
|
|
325
556
|
return { lines: logLines, exit: {} };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-container.js","sourceRoot":"","sources":["../../src/dev/runtime-container.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime-container.js","sourceRoot":"","sources":["../../src/dev/runtime-container.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* The image is in private preview on Quay (pull credentials on request at
|
|
10
10
|
* contact@kindgi.com, then `kindgi auth registry --username <name>`).
|
|
11
11
|
*/
|
|
12
|
-
export declare const DEFAULT_RUNTIME_IMAGE = "quay.io/kindgi/runtime:0.1.
|
|
12
|
+
export declare const DEFAULT_RUNTIME_IMAGE = "quay.io/kindgi/runtime:0.1.7-rc.0@sha256:58b1628cb8ac2433fda449243d2599247d0bfe60eb80143172ec11a731290a9b";
|
|
13
13
|
/**
|
|
14
14
|
* The registry an image reference is pulled from, read the way Docker
|
|
15
15
|
* reads it: the first path component when it names a host (it has a `.`
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* The image is in private preview on Quay (pull credentials on request at
|
|
12
12
|
* contact@kindgi.com, then `kindgi auth registry --username <name>`).
|
|
13
13
|
*/
|
|
14
|
-
export const DEFAULT_RUNTIME_IMAGE = 'quay.io/kindgi/runtime:0.1.
|
|
14
|
+
export const DEFAULT_RUNTIME_IMAGE = 'quay.io/kindgi/runtime:0.1.7-rc.0@sha256:58b1628cb8ac2433fda449243d2599247d0bfe60eb80143172ec11a731290a9b';
|
|
15
15
|
/** Docker Hub, the registry of a reference that names none (`busybox`, `library/busybox`). */
|
|
16
16
|
const DOCKER_HUB = 'docker.io';
|
|
17
17
|
/**
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What `kindgi dev` says while the Kindgi runtime starts: each phase as it
|
|
3
|
+
* happens, and how long it took. Pulling the image (its size, and how much
|
|
4
|
+
* has come as each layer arrives), starting the container, migrating the
|
|
5
|
+
* database (from the runtime's own `migrations` records; an image that
|
|
6
|
+
* writes none shows no such phase, and that time counts as waiting), then
|
|
7
|
+
* waiting for it to serve. A phase that takes a while gets a line every few
|
|
8
|
+
* seconds, so a long pull or migration never looks stuck.
|
|
9
|
+
*/
|
|
10
|
+
export type StartPhase = 'pull' | 'container' | 'migrate' | 'serve';
|
|
11
|
+
export interface StartPhases {
|
|
12
|
+
/** A phase begins. One still open ends without a line (waiting gives way to migrating). */
|
|
13
|
+
begin(phase: StartPhase, note?: string): void;
|
|
14
|
+
/**
|
|
15
|
+
* What `phase` has done so far (a pull's bytes), shown on its next line,
|
|
16
|
+
* if it's the one open (a late answer never lands on the next phase).
|
|
17
|
+
*/
|
|
18
|
+
progress(phase: StartPhase, note: string): void;
|
|
19
|
+
/**
|
|
20
|
+
* `phase` ends, if it's the one open: a line saying so, with how long it
|
|
21
|
+
* took. Whether it was (a stray end claims nothing).
|
|
22
|
+
*/
|
|
23
|
+
end(phase: StartPhase, note?: string): boolean;
|
|
24
|
+
/** No more lines: the start served, failed or was stopped. */
|
|
25
|
+
close(): void;
|
|
26
|
+
/** How long since the first phase began. */
|
|
27
|
+
elapsedMs(): number;
|
|
28
|
+
}
|
|
29
|
+
/** How often a phase that's still going says so. */
|
|
30
|
+
export declare const PHASE_HEARTBEAT_MS = 3000;
|
|
31
|
+
export declare function createStartPhases(options: {
|
|
32
|
+
readonly emit: (line: string) => void;
|
|
33
|
+
readonly heartbeatMs?: number;
|
|
34
|
+
}): StartPhases;
|
|
35
|
+
/** A duration as people say it: `0.4s`, `12s`, `1m 05s`. */
|
|
36
|
+
export declare function formatDuration(ms: number): string;
|
|
37
|
+
/** A size as docker states one (decimal units): `812 kB`, `48.2 MB`, `412 MB`, `1.24 GB`. */
|
|
38
|
+
export declare function formatSize(bytes: number): string;
|
|
39
|
+
/** No phases: what a start reports when no one listens (a test's fake runtime). */
|
|
40
|
+
export declare const NO_START_PHASES: StartPhases;
|
|
41
|
+
//# sourceMappingURL=start-phases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-phases.d.ts","sourceRoot":"","sources":["../../src/dev/start-phases.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC1B,2FAA2F;IAC3F,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/C,8DAA8D;IAC9D,KAAK,IAAI,IAAI,CAAC;IACd,4CAA4C;IAC5C,SAAS,IAAI,MAAM,CAAC;CACrB;AASD,oDAAoD;AACpD,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAKvC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,GAAG,WAAW,CA0Dd;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMhD;AAED,mFAAmF;AACnF,eAAO,MAAM,eAAe,EAAE,WAM7B,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (C) 2026 Kindgi Inc.
|
|
3
|
+
const LABELS = {
|
|
4
|
+
pull: { doing: 'pulling the runtime image', done: 'pulled the runtime image' },
|
|
5
|
+
container: { doing: 'starting its container', done: 'started its container' },
|
|
6
|
+
migrate: { doing: 'migrating the database', done: 'migrated the database' },
|
|
7
|
+
serve: { doing: 'waiting for it to serve', done: 'serving' },
|
|
8
|
+
};
|
|
9
|
+
/** How often a phase that's still going says so. */
|
|
10
|
+
export const PHASE_HEARTBEAT_MS = 3000;
|
|
11
|
+
/** Phase lines sit under "Starting the Kindgi runtime...". */
|
|
12
|
+
const INDENT = ' ';
|
|
13
|
+
export function createStartPhases(options) {
|
|
14
|
+
const heartbeatMs = options.heartbeatMs ?? PHASE_HEARTBEAT_MS;
|
|
15
|
+
let open;
|
|
16
|
+
let tick;
|
|
17
|
+
let firstAt;
|
|
18
|
+
let closed = false;
|
|
19
|
+
const stopTicking = () => {
|
|
20
|
+
if (tick !== undefined)
|
|
21
|
+
clearInterval(tick);
|
|
22
|
+
tick = undefined;
|
|
23
|
+
};
|
|
24
|
+
// Each phase's own clock: its lines come at 3s, 6s, … into it.
|
|
25
|
+
const startTicking = () => {
|
|
26
|
+
stopTicking();
|
|
27
|
+
tick = setInterval(() => {
|
|
28
|
+
if (open === undefined)
|
|
29
|
+
return;
|
|
30
|
+
const seconds = Math.round((Date.now() - open.startedAt) / 1000);
|
|
31
|
+
const note = open.note === undefined ? '' : `: ${open.note}`;
|
|
32
|
+
options.emit(`${INDENT}⋯ ${LABELS[open.phase].doing}${note} (${seconds}s)`);
|
|
33
|
+
}, heartbeatMs);
|
|
34
|
+
// The heartbeat never keeps the CLI alive by itself.
|
|
35
|
+
tick.unref?.();
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
begin(phase, note) {
|
|
39
|
+
if (closed)
|
|
40
|
+
return;
|
|
41
|
+
const now = Date.now();
|
|
42
|
+
firstAt ??= now;
|
|
43
|
+
open = { phase, startedAt: now, note };
|
|
44
|
+
startTicking();
|
|
45
|
+
// A pull says what's coming at once: its size is news.
|
|
46
|
+
if (phase === 'pull') {
|
|
47
|
+
options.emit(`${INDENT}⋯ ${LABELS.pull.doing}${note === undefined ? '' : `: ${note}`}`);
|
|
48
|
+
open.note = undefined;
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
progress(phase, note) {
|
|
52
|
+
if (open?.phase === phase)
|
|
53
|
+
open.note = note;
|
|
54
|
+
},
|
|
55
|
+
end(phase, note) {
|
|
56
|
+
if (closed || open?.phase !== phase)
|
|
57
|
+
return false;
|
|
58
|
+
stopTicking();
|
|
59
|
+
const took = formatDuration(Date.now() - open.startedAt);
|
|
60
|
+
const what = note === undefined ? '' : `: ${note}`;
|
|
61
|
+
options.emit(`${INDENT}✓ ${LABELS[open.phase].done}${what} in ${took}`);
|
|
62
|
+
open = undefined;
|
|
63
|
+
return true;
|
|
64
|
+
},
|
|
65
|
+
close() {
|
|
66
|
+
closed = true;
|
|
67
|
+
open = undefined;
|
|
68
|
+
stopTicking();
|
|
69
|
+
},
|
|
70
|
+
elapsedMs() {
|
|
71
|
+
return firstAt === undefined ? 0 : Date.now() - firstAt;
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** A duration as people say it: `0.4s`, `12s`, `1m 05s`. */
|
|
76
|
+
export function formatDuration(ms) {
|
|
77
|
+
if (ms < 10_000)
|
|
78
|
+
return `${(Math.max(ms, 0) / 1000).toFixed(1)}s`;
|
|
79
|
+
const seconds = Math.round(ms / 1000);
|
|
80
|
+
if (seconds < 60)
|
|
81
|
+
return `${seconds}s`;
|
|
82
|
+
return `${Math.floor(seconds / 60)}m ${String(seconds % 60).padStart(2, '0')}s`;
|
|
83
|
+
}
|
|
84
|
+
/** A size as docker states one (decimal units): `812 kB`, `48.2 MB`, `412 MB`, `1.24 GB`. */
|
|
85
|
+
export function formatSize(bytes) {
|
|
86
|
+
if (bytes < 1_000_000)
|
|
87
|
+
return `${Math.max(1, Math.round(bytes / 1000))} kB`;
|
|
88
|
+
const mb = bytes / 1_000_000;
|
|
89
|
+
if (mb < 100)
|
|
90
|
+
return `${mb.toFixed(1)} MB`;
|
|
91
|
+
if (mb < 1000)
|
|
92
|
+
return `${Math.round(mb)} MB`;
|
|
93
|
+
return `${(mb / 1000).toFixed(2)} GB`;
|
|
94
|
+
}
|
|
95
|
+
/** No phases: what a start reports when no one listens (a test's fake runtime). */
|
|
96
|
+
export const NO_START_PHASES = {
|
|
97
|
+
begin: () => undefined,
|
|
98
|
+
progress: () => undefined,
|
|
99
|
+
end: () => false,
|
|
100
|
+
close: () => undefined,
|
|
101
|
+
elapsedMs: () => 0,
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=start-phases.js.map
|