@kilnci/cli 0.1.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/bin/kiln.js +5 -0
- package/dist/base-command.d.ts +21 -0
- package/dist/base-command.d.ts.map +1 -0
- package/dist/base-command.js +30 -0
- package/dist/base-command.js.map +1 -0
- package/dist/client.d.ts +166 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +321 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/artifacts.d.ts +17 -0
- package/dist/commands/artifacts.d.ts.map +1 -0
- package/dist/commands/artifacts.js +96 -0
- package/dist/commands/artifacts.js.map +1 -0
- package/dist/commands/build.d.ts +15 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +79 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/cancel.d.ts +10 -0
- package/dist/commands/cancel.d.ts.map +1 -0
- package/dist/commands/cancel.js +27 -0
- package/dist/commands/cancel.js.map +1 -0
- package/dist/commands/login.d.ts +18 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +188 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +7 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +17 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/logs.d.ts +18 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +139 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/org/create.d.ts +13 -0
- package/dist/commands/org/create.d.ts.map +1 -0
- package/dist/commands/org/create.js +39 -0
- package/dist/commands/org/create.js.map +1 -0
- package/dist/commands/org/delete.d.ts +13 -0
- package/dist/commands/org/delete.d.ts.map +1 -0
- package/dist/commands/org/delete.js +44 -0
- package/dist/commands/org/delete.js.map +1 -0
- package/dist/commands/org/gitlab/remove.d.ts +13 -0
- package/dist/commands/org/gitlab/remove.d.ts.map +1 -0
- package/dist/commands/org/gitlab/remove.js +51 -0
- package/dist/commands/org/gitlab/remove.js.map +1 -0
- package/dist/commands/org/gitlab/setup.d.ts +17 -0
- package/dist/commands/org/gitlab/setup.d.ts.map +1 -0
- package/dist/commands/org/gitlab/setup.js +83 -0
- package/dist/commands/org/gitlab/setup.js.map +1 -0
- package/dist/commands/org/gitlab/show.d.ts +10 -0
- package/dist/commands/org/gitlab/show.d.ts.map +1 -0
- package/dist/commands/org/gitlab/show.js +54 -0
- package/dist/commands/org/gitlab/show.js.map +1 -0
- package/dist/commands/org/gitlab/sync.d.ts +10 -0
- package/dist/commands/org/gitlab/sync.d.ts.map +1 -0
- package/dist/commands/org/gitlab/sync.js +38 -0
- package/dist/commands/org/gitlab/sync.js.map +1 -0
- package/dist/commands/org/index.d.ts +11 -0
- package/dist/commands/org/index.d.ts.map +1 -0
- package/dist/commands/org/index.js +46 -0
- package/dist/commands/org/index.js.map +1 -0
- package/dist/commands/org/repos/disable.d.ts +11 -0
- package/dist/commands/org/repos/disable.d.ts.map +1 -0
- package/dist/commands/org/repos/disable.js +32 -0
- package/dist/commands/org/repos/disable.js.map +1 -0
- package/dist/commands/org/repos/enable.d.ts +11 -0
- package/dist/commands/org/repos/enable.d.ts.map +1 -0
- package/dist/commands/org/repos/enable.js +32 -0
- package/dist/commands/org/repos/enable.js.map +1 -0
- package/dist/commands/org/repos.d.ts +14 -0
- package/dist/commands/org/repos.d.ts.map +1 -0
- package/dist/commands/org/repos.js +54 -0
- package/dist/commands/org/repos.js.map +1 -0
- package/dist/commands/status.d.ts +17 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +73 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/workers/create.d.ts +15 -0
- package/dist/commands/workers/create.d.ts.map +1 -0
- package/dist/commands/workers/create.js +74 -0
- package/dist/commands/workers/create.js.map +1 -0
- package/dist/commands/workers/delete.d.ts +13 -0
- package/dist/commands/workers/delete.d.ts.map +1 -0
- package/dist/commands/workers/delete.js +40 -0
- package/dist/commands/workers/delete.js.map +1 -0
- package/dist/commands/workers/index.d.ts +10 -0
- package/dist/commands/workers/index.d.ts.map +1 -0
- package/dist/commands/workers/index.js +42 -0
- package/dist/commands/workers/index.js.map +1 -0
- package/dist/commands/workers/logs.d.ts +11 -0
- package/dist/commands/workers/logs.d.ts.map +1 -0
- package/dist/commands/workers/logs.js +54 -0
- package/dist/commands/workers/logs.js.map +1 -0
- package/dist/commands/workers/revoke.d.ts +10 -0
- package/dist/commands/workers/revoke.d.ts.map +1 -0
- package/dist/commands/workers/revoke.js +27 -0
- package/dist/commands/workers/revoke.js.map +1 -0
- package/dist/commands/workers/start.d.ts +19 -0
- package/dist/commands/workers/start.d.ts.map +1 -0
- package/dist/commands/workers/start.js +329 -0
- package/dist/commands/workers/start.js.map +1 -0
- package/dist/commands/workers/status.d.ts +7 -0
- package/dist/commands/workers/status.d.ts.map +1 -0
- package/dist/commands/workers/status.js +75 -0
- package/dist/commands/workers/status.js.map +1 -0
- package/dist/commands/workers/stop.d.ts +10 -0
- package/dist/commands/workers/stop.d.ts.map +1 -0
- package/dist/commands/workers/stop.js +79 -0
- package/dist/commands/workers/stop.js.map +1 -0
- package/dist/commands/workers/token.d.ts +13 -0
- package/dist/commands/workers/token.d.ts.map +1 -0
- package/dist/commands/workers/token.js +38 -0
- package/dist/commands/workers/token.js.map +1 -0
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +68 -0
- package/dist/config.js.map +1 -0
- package/dist/formatters.d.ts +42 -0
- package/dist/formatters.d.ts.map +1 -0
- package/dist/formatters.js +194 -0
- package/dist/formatters.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/workers-helpers.d.ts +20 -0
- package/dist/lib/workers-helpers.d.ts.map +1 -0
- package/dist/lib/workers-helpers.js +51 -0
- package/dist/lib/workers-helpers.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import { BaseCommand } from '../../base-command.js';
|
|
4
|
+
const CONTAINER_NAME = 'kiln-local-worker';
|
|
5
|
+
/**
|
|
6
|
+
* Check if a container is running.
|
|
7
|
+
*/
|
|
8
|
+
function isContainerRunning(name) {
|
|
9
|
+
try {
|
|
10
|
+
const result = execSync(`docker inspect -f '{{.State.Running}}' ${name}`, {
|
|
11
|
+
encoding: 'utf-8',
|
|
12
|
+
stdio: 'pipe',
|
|
13
|
+
}).trim();
|
|
14
|
+
return result === 'true';
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Check if a container exists (running or stopped).
|
|
22
|
+
*/
|
|
23
|
+
function containerExists(name) {
|
|
24
|
+
try {
|
|
25
|
+
execSync(`docker inspect ${name}`, { stdio: 'pipe' });
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export default class WorkersStop extends BaseCommand {
|
|
33
|
+
static description = 'Stop the local worker container.';
|
|
34
|
+
static examples = [
|
|
35
|
+
'<%= config.bin %> workers stop',
|
|
36
|
+
'<%= config.bin %> workers stop --force',
|
|
37
|
+
];
|
|
38
|
+
static flags = {
|
|
39
|
+
force: Flags.boolean({
|
|
40
|
+
char: 'f',
|
|
41
|
+
description: 'Force stop (kill) the container',
|
|
42
|
+
default: false,
|
|
43
|
+
}),
|
|
44
|
+
};
|
|
45
|
+
async run() {
|
|
46
|
+
const { flags } = await this.parse(WorkersStop);
|
|
47
|
+
if (!containerExists(CONTAINER_NAME)) {
|
|
48
|
+
this.log('No local worker container found.');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (!isContainerRunning(CONTAINER_NAME)) {
|
|
52
|
+
this.log('Local worker container is not running.');
|
|
53
|
+
// Clean up stopped container
|
|
54
|
+
try {
|
|
55
|
+
execSync(`docker rm ${CONTAINER_NAME}`, { stdio: 'pipe' });
|
|
56
|
+
this.log('Removed stopped container.');
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Ignore
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
if (flags.force) {
|
|
65
|
+
this.log('Force stopping local worker container...');
|
|
66
|
+
execSync(`docker kill ${CONTAINER_NAME}`, { stdio: 'pipe' });
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
this.log('Stopping local worker container (gracefully)...');
|
|
70
|
+
execSync(`docker stop ${CONTAINER_NAME}`, { stdio: 'pipe' });
|
|
71
|
+
}
|
|
72
|
+
this.log('Local worker stopped.');
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
this.handleError(error, 'stop worker container');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/workers/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAE3C;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,0CAA0C,IAAI,EAAE,EAAE;YACxE,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,MAAM,KAAK,MAAM,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,QAAQ,CAAC,kBAAkB,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAU,WAAW,GAAG,kCAAkC,CAAC;IAEjE,MAAM,CAAU,QAAQ,GAAG;QACzB,gCAAgC;QAChC,wCAAwC;KACzC,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,iCAAiC;YAC9C,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEhD,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACnD,6BAA6B;YAC7B,IAAI,CAAC;gBACH,QAAQ,CAAC,aAAa,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YACzC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;gBACrD,QAAQ,CAAC,eAAe,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;gBAC5D,QAAQ,CAAC,eAAe,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;QACnD,CAAC;IACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command.js';
|
|
2
|
+
export default class WorkersToken extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
ttl: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/commands/workers/token.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,OAAgB,WAAW,SAAqE;IAEhG,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,IAAI;;MAKlB;IAEF,OAAgB,KAAK;;MAKnB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgBlC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import { BaseCommand } from '../../base-command.js';
|
|
3
|
+
export default class WorkersToken extends BaseCommand {
|
|
4
|
+
static description = 'Regenerate registration token for a pending worker (admin only)';
|
|
5
|
+
static examples = [
|
|
6
|
+
'<%= config.bin %> workers token wrk_abc123',
|
|
7
|
+
'<%= config.bin %> workers token wrk_abc123 --ttl 60',
|
|
8
|
+
];
|
|
9
|
+
static args = {
|
|
10
|
+
id: Args.string({
|
|
11
|
+
description: 'Worker ID',
|
|
12
|
+
required: true,
|
|
13
|
+
}),
|
|
14
|
+
};
|
|
15
|
+
static flags = {
|
|
16
|
+
ttl: Flags.integer({
|
|
17
|
+
description: 'Token time-to-live in minutes (default: 1440 = 24h)',
|
|
18
|
+
default: 1440,
|
|
19
|
+
}),
|
|
20
|
+
};
|
|
21
|
+
async run() {
|
|
22
|
+
const { args, flags } = await this.parse(WorkersToken);
|
|
23
|
+
this.requireAuth();
|
|
24
|
+
try {
|
|
25
|
+
const result = await this.client.regenerateWorkerToken(args.id, flags.ttl);
|
|
26
|
+
this.log(`Registration token regenerated for worker ${args.id}`);
|
|
27
|
+
this.log('');
|
|
28
|
+
this.log('Worker Token (one-time use, keep secure):');
|
|
29
|
+
this.log(` ${result.workerToken}`);
|
|
30
|
+
this.log('');
|
|
31
|
+
this.log(`Token expires: ${new Date(result.tokenExpiresAt).toLocaleString()}`);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
this.handleError(error, 'regenerate worker token');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/commands/workers/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAU,WAAW,GAAG,iEAAiE,CAAC;IAEhG,MAAM,CAAU,QAAQ,GAAG;QACzB,4CAA4C;QAC5C,qDAAqD;KACtD,CAAC;IAEF,MAAM,CAAU,IAAI,GAAG;QACrB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC;YACd,WAAW,EAAE,WAAW;YACxB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;YACjB,WAAW,EAAE,qDAAqD;YAClE,OAAO,EAAE,IAAI;SACd,CAAC;KACH,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3E,IAAI,CAAC,GAAG,CAAC,6CAA6C,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;QACrD,CAAC;IACH,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface Config {
|
|
2
|
+
url: string;
|
|
3
|
+
token?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface WorkerConfig {
|
|
6
|
+
env?: Record<string, string>;
|
|
7
|
+
}
|
|
8
|
+
export interface ConfigFile {
|
|
9
|
+
url?: string;
|
|
10
|
+
token?: string;
|
|
11
|
+
workers?: WorkerConfig;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Load configuration from environment variables and config file
|
|
15
|
+
* Priority: Environment variables > Config file > Defaults
|
|
16
|
+
*/
|
|
17
|
+
export declare function loadConfig(): Config;
|
|
18
|
+
/**
|
|
19
|
+
* Load full configuration file
|
|
20
|
+
*/
|
|
21
|
+
export declare function loadConfigFile(): ConfigFile;
|
|
22
|
+
/**
|
|
23
|
+
* Save configuration to ~/.kiln.yml
|
|
24
|
+
*/
|
|
25
|
+
export declare function saveConfigFile(config: ConfigFile): void;
|
|
26
|
+
/**
|
|
27
|
+
* Delete the configuration file
|
|
28
|
+
*/
|
|
29
|
+
export declare function deleteConfigFile(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Get the path to the config file
|
|
32
|
+
*/
|
|
33
|
+
export declare function getConfigPath(): string;
|
|
34
|
+
/**
|
|
35
|
+
* Get default Kiln URL
|
|
36
|
+
*/
|
|
37
|
+
export declare function getKilnUrl(): string;
|
|
38
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAKD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAOnC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,UAAU,CAe3C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAIvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAO1C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAGnC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, unlinkSync } from 'fs';
|
|
2
|
+
import { homedir } from 'os';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
|
|
5
|
+
const DEFAULT_URL = 'http://localhost:3000';
|
|
6
|
+
const CONFIG_FILE_NAME = '.kiln.yml';
|
|
7
|
+
/**
|
|
8
|
+
* Load configuration from environment variables and config file
|
|
9
|
+
* Priority: Environment variables > Config file > Defaults
|
|
10
|
+
*/
|
|
11
|
+
export function loadConfig() {
|
|
12
|
+
const configFile = loadConfigFile();
|
|
13
|
+
return {
|
|
14
|
+
url: process.env.KILN_URL || configFile.url || DEFAULT_URL,
|
|
15
|
+
token: process.env.KILN_TOKEN || configFile.token,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Load full configuration file
|
|
20
|
+
*/
|
|
21
|
+
export function loadConfigFile() {
|
|
22
|
+
const configPath = join(homedir(), CONFIG_FILE_NAME);
|
|
23
|
+
if (!existsSync(configPath)) {
|
|
24
|
+
return {};
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
28
|
+
const config = parseYaml(content);
|
|
29
|
+
return config || {};
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// Silently ignore config file errors
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Save configuration to ~/.kiln.yml
|
|
38
|
+
*/
|
|
39
|
+
export function saveConfigFile(config) {
|
|
40
|
+
const configPath = join(homedir(), CONFIG_FILE_NAME);
|
|
41
|
+
const content = stringifyYaml(config);
|
|
42
|
+
writeFileSync(configPath, content, { mode: 0o600 }); // Read/write only for owner
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Delete the configuration file
|
|
46
|
+
*/
|
|
47
|
+
export function deleteConfigFile() {
|
|
48
|
+
const configPath = join(homedir(), CONFIG_FILE_NAME);
|
|
49
|
+
if (existsSync(configPath)) {
|
|
50
|
+
unlinkSync(configPath);
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get the path to the config file
|
|
57
|
+
*/
|
|
58
|
+
export function getConfigPath() {
|
|
59
|
+
return join(homedir(), CONFIG_FILE_NAME);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get default Kiln URL
|
|
63
|
+
*/
|
|
64
|
+
export function getKilnUrl() {
|
|
65
|
+
const configFile = loadConfigFile();
|
|
66
|
+
return process.env.KILN_URL || configFile.url || DEFAULT_URL;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAiBtE,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAC5C,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IAEpC,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,UAAU,CAAC,GAAG,IAAI,WAAW;QAC1D,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK;KAClD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAErD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAe,CAAC;QAChD,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;QACrC,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAkB;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,4BAA4B;AACnF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,UAAU,CAAC,UAAU,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,UAAU,CAAC,GAAG,IAAI,WAAW,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Build, Worker, Workspace } from '@kilnci/shared';
|
|
2
|
+
/**
|
|
3
|
+
* Format a build status with color
|
|
4
|
+
*/
|
|
5
|
+
export declare function formatStatus(status: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Format a date for display
|
|
8
|
+
*/
|
|
9
|
+
export declare function formatDate(date: Date | string | null): string;
|
|
10
|
+
/**
|
|
11
|
+
* Format a date relative to now
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatRelativeDate(date: Date | string | null): string;
|
|
14
|
+
/**
|
|
15
|
+
* Truncate a string to a maximum length
|
|
16
|
+
*/
|
|
17
|
+
export declare function truncate(str: string, maxLength: number): string;
|
|
18
|
+
/**
|
|
19
|
+
* Format a builds table
|
|
20
|
+
*/
|
|
21
|
+
export declare function formatBuildsTable(builds: Build[]): string;
|
|
22
|
+
/**
|
|
23
|
+
* Format a single build for detailed view
|
|
24
|
+
*/
|
|
25
|
+
export declare function formatBuildDetails(build: Build): string;
|
|
26
|
+
/**
|
|
27
|
+
* Format a workspaces table
|
|
28
|
+
*/
|
|
29
|
+
export declare function formatWorkspacesTable(workspaces: Workspace[]): string;
|
|
30
|
+
/**
|
|
31
|
+
* Format a log line for display
|
|
32
|
+
*/
|
|
33
|
+
export declare function formatLogLine(timestamp: Date, stream: string, line: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Format a worker status with color
|
|
36
|
+
*/
|
|
37
|
+
export declare function formatWorkerStatus(status: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Format a workers table
|
|
40
|
+
*/
|
|
41
|
+
export declare function formatWorkersTable(workers: Worker[]): string;
|
|
42
|
+
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE/D;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAenD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAI7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAkBrE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAuBzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CA8BvD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAuBrE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,IAAI,EACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAazD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAwB5D"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import Table from 'cli-table3';
|
|
3
|
+
/**
|
|
4
|
+
* Format a build status with color
|
|
5
|
+
*/
|
|
6
|
+
export function formatStatus(status) {
|
|
7
|
+
switch (status) {
|
|
8
|
+
case 'pending':
|
|
9
|
+
return chalk.yellow('pending');
|
|
10
|
+
case 'running':
|
|
11
|
+
return chalk.blue('running');
|
|
12
|
+
case 'success':
|
|
13
|
+
return chalk.green('success');
|
|
14
|
+
case 'failed':
|
|
15
|
+
return chalk.red('failed');
|
|
16
|
+
case 'cancelled':
|
|
17
|
+
return chalk.gray('cancelled');
|
|
18
|
+
default:
|
|
19
|
+
return status;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Format a date for display
|
|
24
|
+
*/
|
|
25
|
+
export function formatDate(date) {
|
|
26
|
+
if (!date)
|
|
27
|
+
return '-';
|
|
28
|
+
const d = typeof date === 'string' ? new Date(date) : date;
|
|
29
|
+
return d.toLocaleString();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Format a date relative to now
|
|
33
|
+
*/
|
|
34
|
+
export function formatRelativeDate(date) {
|
|
35
|
+
if (!date)
|
|
36
|
+
return '-';
|
|
37
|
+
const d = typeof date === 'string' ? new Date(date) : date;
|
|
38
|
+
const now = new Date();
|
|
39
|
+
const diff = now.getTime() - d.getTime();
|
|
40
|
+
if (diff < 60000) {
|
|
41
|
+
return 'just now';
|
|
42
|
+
}
|
|
43
|
+
else if (diff < 3600000) {
|
|
44
|
+
const minutes = Math.floor(diff / 60000);
|
|
45
|
+
return `${minutes}m ago`;
|
|
46
|
+
}
|
|
47
|
+
else if (diff < 86400000) {
|
|
48
|
+
const hours = Math.floor(diff / 3600000);
|
|
49
|
+
return `${hours}h ago`;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const days = Math.floor(diff / 86400000);
|
|
53
|
+
return `${days}d ago`;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Truncate a string to a maximum length
|
|
58
|
+
*/
|
|
59
|
+
export function truncate(str, maxLength) {
|
|
60
|
+
if (str.length <= maxLength)
|
|
61
|
+
return str;
|
|
62
|
+
return str.substring(0, maxLength - 3) + '...';
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Format a builds table
|
|
66
|
+
*/
|
|
67
|
+
export function formatBuildsTable(builds) {
|
|
68
|
+
const table = new Table({
|
|
69
|
+
head: [
|
|
70
|
+
chalk.bold('ID'),
|
|
71
|
+
chalk.bold('Status'),
|
|
72
|
+
chalk.bold('Repo'),
|
|
73
|
+
chalk.bold('Branch'),
|
|
74
|
+
chalk.bold('Created'),
|
|
75
|
+
],
|
|
76
|
+
colWidths: [40, 12, 35, 15, 15],
|
|
77
|
+
});
|
|
78
|
+
for (const build of builds) {
|
|
79
|
+
table.push([
|
|
80
|
+
build.id,
|
|
81
|
+
formatStatus(build.status),
|
|
82
|
+
truncate(build.repo, 33),
|
|
83
|
+
truncate(build.branch, 13),
|
|
84
|
+
formatRelativeDate(build.createdAt),
|
|
85
|
+
]);
|
|
86
|
+
}
|
|
87
|
+
return table.toString();
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Format a single build for detailed view
|
|
91
|
+
*/
|
|
92
|
+
export function formatBuildDetails(build) {
|
|
93
|
+
const lines = [
|
|
94
|
+
'',
|
|
95
|
+
`${chalk.bold('Build ID:')} ${build.id}`,
|
|
96
|
+
`${chalk.bold('Status:')} ${formatStatus(build.status)}`,
|
|
97
|
+
`${chalk.bold('Repository:')} ${build.repo}`,
|
|
98
|
+
`${chalk.bold('Branch:')} ${build.branch}`,
|
|
99
|
+
`${chalk.bold('Commands:')} ${build.commands?.join(', ') ?? chalk.dim('(from .kiln.yml)')}`,
|
|
100
|
+
'',
|
|
101
|
+
`${chalk.bold('Created:')} ${formatDate(build.createdAt)}`,
|
|
102
|
+
`${chalk.bold('Started:')} ${formatDate(build.startedAt)}`,
|
|
103
|
+
`${chalk.bold('Finished:')} ${formatDate(build.finishedAt)}`,
|
|
104
|
+
];
|
|
105
|
+
if (build.workerId) {
|
|
106
|
+
lines.push(`${chalk.bold('Worker ID:')} ${build.workerId}`);
|
|
107
|
+
}
|
|
108
|
+
if (build.exitCode !== null) {
|
|
109
|
+
const exitCodeColor = build.exitCode === 0 ? chalk.green : chalk.red;
|
|
110
|
+
lines.push(`${chalk.bold('Exit Code:')} ${exitCodeColor(build.exitCode)}`);
|
|
111
|
+
}
|
|
112
|
+
if (build.errorMessage) {
|
|
113
|
+
lines.push(`${chalk.bold('Error:')} ${chalk.red(build.errorMessage)}`);
|
|
114
|
+
}
|
|
115
|
+
lines.push('');
|
|
116
|
+
return lines.join('\n');
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Format a workspaces table
|
|
120
|
+
*/
|
|
121
|
+
export function formatWorkspacesTable(workspaces) {
|
|
122
|
+
const table = new Table({
|
|
123
|
+
head: [
|
|
124
|
+
chalk.bold('ID'),
|
|
125
|
+
chalk.bold('Repo'),
|
|
126
|
+
chalk.bold('Branch'),
|
|
127
|
+
chalk.bold('Worker'),
|
|
128
|
+
chalk.bold('Last Used'),
|
|
129
|
+
],
|
|
130
|
+
colWidths: [40, 35, 15, 12, 15],
|
|
131
|
+
});
|
|
132
|
+
for (const ws of workspaces) {
|
|
133
|
+
table.push([
|
|
134
|
+
ws.id,
|
|
135
|
+
truncate(ws.repo, 33),
|
|
136
|
+
truncate(ws.branch, 13),
|
|
137
|
+
truncate(ws.workerId, 10),
|
|
138
|
+
formatRelativeDate(ws.lastUsedAt),
|
|
139
|
+
]);
|
|
140
|
+
}
|
|
141
|
+
return table.toString();
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Format a log line for display
|
|
145
|
+
*/
|
|
146
|
+
export function formatLogLine(timestamp, stream, line) {
|
|
147
|
+
const time = timestamp.toISOString().substring(11, 23);
|
|
148
|
+
const streamColor = stream === 'stderr' ? chalk.red : chalk.gray;
|
|
149
|
+
return `${chalk.gray(time)} ${streamColor(`[${stream}]`)} ${line}`;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Format a worker status with color
|
|
153
|
+
*/
|
|
154
|
+
export function formatWorkerStatus(status) {
|
|
155
|
+
switch (status) {
|
|
156
|
+
case 'pending':
|
|
157
|
+
return chalk.blue('pending');
|
|
158
|
+
case 'online':
|
|
159
|
+
return chalk.green('online');
|
|
160
|
+
case 'busy':
|
|
161
|
+
return chalk.yellow('busy');
|
|
162
|
+
case 'offline':
|
|
163
|
+
return chalk.gray('offline');
|
|
164
|
+
default:
|
|
165
|
+
return status;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Format a workers table
|
|
170
|
+
*/
|
|
171
|
+
export function formatWorkersTable(workers) {
|
|
172
|
+
const table = new Table({
|
|
173
|
+
head: [
|
|
174
|
+
chalk.bold('Name'),
|
|
175
|
+
chalk.bold('Status'),
|
|
176
|
+
chalk.bold('Hostname'),
|
|
177
|
+
chalk.bold('Builds'),
|
|
178
|
+
chalk.bold('Last Heartbeat'),
|
|
179
|
+
],
|
|
180
|
+
colWidths: [20, 10, 25, 12, 18],
|
|
181
|
+
});
|
|
182
|
+
for (const worker of workers) {
|
|
183
|
+
const builds = `${worker.activeBuilds}/${worker.maxConcurrentBuilds}`;
|
|
184
|
+
table.push([
|
|
185
|
+
truncate(worker.name || worker.id, 18),
|
|
186
|
+
formatWorkerStatus(worker.status),
|
|
187
|
+
truncate(worker.hostname || '-', 23),
|
|
188
|
+
builds,
|
|
189
|
+
formatRelativeDate(worker.lastHeartbeatAt),
|
|
190
|
+
]);
|
|
191
|
+
}
|
|
192
|
+
return table.toString();
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzD,cAAc,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzD,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper functions for the workers commands.
|
|
3
|
+
* Extracted to a separate file for testability.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Convert a URL to be accessible from inside a Docker container.
|
|
7
|
+
* On macOS/Windows, localhost needs to become host.docker.internal.
|
|
8
|
+
*/
|
|
9
|
+
export declare function toDockerAccessibleUrl(url: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Parse selector string into matchLabels object.
|
|
12
|
+
* Format: key=value or key1=value1,key2=value2
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseSelector(selectorStr: string): Record<string, string>;
|
|
15
|
+
/**
|
|
16
|
+
* Parse environment variable flags from CLI (format: KEY=VALUE).
|
|
17
|
+
* Returns a Record of key-value pairs.
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseEnvFlags(envFlags: string[]): Record<string, string>;
|
|
20
|
+
//# sourceMappingURL=workers-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workers-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/workers-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUzE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAexE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper functions for the workers commands.
|
|
3
|
+
* Extracted to a separate file for testability.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Convert a URL to be accessible from inside a Docker container.
|
|
7
|
+
* On macOS/Windows, localhost needs to become host.docker.internal.
|
|
8
|
+
*/
|
|
9
|
+
export function toDockerAccessibleUrl(url) {
|
|
10
|
+
const parsed = new URL(url);
|
|
11
|
+
if (parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1') {
|
|
12
|
+
parsed.hostname = 'host.docker.internal';
|
|
13
|
+
}
|
|
14
|
+
return parsed.toString().replace(/\/$/, '');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Parse selector string into matchLabels object.
|
|
18
|
+
* Format: key=value or key1=value1,key2=value2
|
|
19
|
+
*/
|
|
20
|
+
export function parseSelector(selectorStr) {
|
|
21
|
+
const matchLabels = {};
|
|
22
|
+
const pairs = selectorStr.split(',');
|
|
23
|
+
for (const pair of pairs) {
|
|
24
|
+
const [key, ...valueParts] = pair.split('=');
|
|
25
|
+
if (key && valueParts.length > 0) {
|
|
26
|
+
matchLabels[key.trim()] = valueParts.join('=').trim();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return matchLabels;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parse environment variable flags from CLI (format: KEY=VALUE).
|
|
33
|
+
* Returns a Record of key-value pairs.
|
|
34
|
+
*/
|
|
35
|
+
export function parseEnvFlags(envFlags) {
|
|
36
|
+
const result = {};
|
|
37
|
+
for (const envFlag of envFlags) {
|
|
38
|
+
const idx = envFlag.indexOf('=');
|
|
39
|
+
if (idx === -1) {
|
|
40
|
+
// No '=' found, skip this entry (invalid format)
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const key = envFlag.slice(0, idx);
|
|
44
|
+
const value = envFlag.slice(idx + 1);
|
|
45
|
+
if (key) {
|
|
46
|
+
result[key] = value;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=workers-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workers-helpers.js","sourceRoot":"","sources":["../../src/lib/workers-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QACvE,MAAM,CAAC,QAAQ,GAAG,sBAAsB,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,iDAAiD;YACjD,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|