@calltelemetry/cli 0.12.11 → 0.12.13
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/commands/config.d.ts +25 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +42 -3
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/db.d.ts +24 -0
- package/dist/commands/db.d.ts.map +1 -1
- package/dist/commands/db.js +43 -4
- package/dist/commands/db.js.map +1 -1
- package/dist/commands/go-parity.d.ts +32 -0
- package/dist/commands/go-parity.d.ts.map +1 -0
- package/dist/commands/go-parity.js +359 -0
- package/dist/commands/go-parity.js.map +1 -0
- package/dist/commands/jtapi.d.ts.map +1 -1
- package/dist/commands/jtapi.js +2 -0
- package/dist/commands/jtapi.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +2 -0
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/network.d.ts.map +1 -1
- package/dist/commands/network.js +63 -50
- package/dist/commands/network.js.map +1 -1
- package/dist/commands/offline.d.ts.map +1 -1
- package/dist/commands/offline.js +2 -0
- package/dist/commands/offline.js.map +1 -1
- package/dist/commands/seed.d.ts.map +1 -1
- package/dist/commands/seed.js +2 -0
- package/dist/commands/seed.js.map +1 -1
- package/dist/commands/ship-certs.d.ts +7 -0
- package/dist/commands/ship-certs.d.ts.map +1 -0
- package/dist/commands/ship-certs.js +105 -0
- package/dist/commands/ship-certs.js.map +1 -0
- package/dist/commands/ship-db.d.ts +8 -0
- package/dist/commands/ship-db.d.ts.map +1 -0
- package/dist/commands/ship-db.js +358 -0
- package/dist/commands/ship-db.js.map +1 -0
- package/dist/commands/ship-diag.d.ts +10 -0
- package/dist/commands/ship-diag.d.ts.map +1 -0
- package/dist/commands/ship-diag.js +73 -0
- package/dist/commands/ship-diag.js.map +1 -0
- package/dist/commands/ship-docker.d.ts +6 -0
- package/dist/commands/ship-docker.d.ts.map +1 -0
- package/dist/commands/ship-docker.js +153 -0
- package/dist/commands/ship-docker.js.map +1 -0
- package/dist/commands/ship-ipv6.d.ts +6 -0
- package/dist/commands/ship-ipv6.d.ts.map +1 -0
- package/dist/commands/ship-ipv6.js +59 -0
- package/dist/commands/ship-ipv6.js.map +1 -0
- package/dist/commands/ship-logging.d.ts +7 -0
- package/dist/commands/ship-logging.d.ts.map +1 -0
- package/dist/commands/ship-logging.js +71 -0
- package/dist/commands/ship-logging.js.map +1 -0
- package/dist/commands/ship-migrate.d.ts +6 -0
- package/dist/commands/ship-migrate.d.ts.map +1 -0
- package/dist/commands/ship-migrate.js +152 -0
- package/dist/commands/ship-migrate.js.map +1 -0
- package/dist/commands/ship-offline.d.ts +6 -0
- package/dist/commands/ship-offline.d.ts.map +1 -0
- package/dist/commands/ship-offline.js +110 -0
- package/dist/commands/ship-offline.js.map +1 -0
- package/dist/commands/ship-os-updates.d.ts +6 -0
- package/dist/commands/ship-os-updates.d.ts.map +1 -0
- package/dist/commands/ship-os-updates.js +116 -0
- package/dist/commands/ship-os-updates.js.map +1 -0
- package/dist/commands/ship-postgres.d.ts +6 -0
- package/dist/commands/ship-postgres.d.ts.map +1 -0
- package/dist/commands/ship-postgres.js +84 -0
- package/dist/commands/ship-postgres.js.map +1 -0
- package/dist/commands/ship-rollback.d.ts +7 -0
- package/dist/commands/ship-rollback.d.ts.map +1 -0
- package/dist/commands/ship-rollback.js +63 -0
- package/dist/commands/ship-rollback.js.map +1 -0
- package/dist/commands/ship-services.d.ts +7 -0
- package/dist/commands/ship-services.d.ts.map +1 -0
- package/dist/commands/ship-services.js +127 -0
- package/dist/commands/ship-services.js.map +1 -0
- package/dist/commands/ship-sql-monitor.d.ts +6 -0
- package/dist/commands/ship-sql-monitor.d.ts.map +1 -0
- package/dist/commands/ship-sql-monitor.js +89 -0
- package/dist/commands/ship-sql-monitor.js.map +1 -0
- package/dist/commands/ship-status.d.ts +6 -0
- package/dist/commands/ship-status.d.ts.map +1 -0
- package/dist/commands/ship-status.js +21 -0
- package/dist/commands/ship-status.js.map +1 -0
- package/dist/commands/ship-update.d.ts +31 -0
- package/dist/commands/ship-update.d.ts.map +1 -0
- package/dist/commands/ship-update.js +234 -0
- package/dist/commands/ship-update.js.map +1 -0
- package/dist/commands/ship-users.d.ts +7 -0
- package/dist/commands/ship-users.d.ts.map +1 -0
- package/dist/commands/ship-users.js +118 -0
- package/dist/commands/ship-users.js.map +1 -0
- package/dist/commands/update.d.ts +45 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +74 -3
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/users.d.ts.map +1 -1
- package/dist/commands/users.js +51 -0
- package/dist/commands/users.js.map +1 -1
- package/dist/index.js +3 -72
- package/dist/index.js.map +1 -1
- package/dist/lib/network-apply.d.ts +102 -0
- package/dist/lib/network-apply.d.ts.map +1 -0
- package/dist/lib/network-apply.js +472 -0
- package/dist/lib/network-apply.js.map +1 -0
- package/dist/lib/ops-port.d.ts +205 -0
- package/dist/lib/ops-port.d.ts.map +1 -0
- package/dist/lib/ops-port.js +906 -0
- package/dist/lib/ops-port.js.map +1 -0
- package/dist/lib/public-doc.d.ts +37 -0
- package/dist/lib/public-doc.d.ts.map +1 -0
- package/dist/lib/public-doc.js +27 -0
- package/dist/lib/public-doc.js.map +1 -0
- package/dist/lib/ship-identity.d.ts +9 -0
- package/dist/lib/ship-identity.d.ts.map +1 -0
- package/dist/lib/ship-identity.js +12 -0
- package/dist/lib/ship-identity.js.map +1 -0
- package/dist/lib/ship-logo.d.ts +11 -0
- package/dist/lib/ship-logo.d.ts.map +1 -0
- package/dist/lib/ship-logo.js +17 -0
- package/dist/lib/ship-logo.js.map +1 -0
- package/dist/lib/ship-status.d.ts +21 -0
- package/dist/lib/ship-status.d.ts.map +1 -0
- package/dist/lib/ship-status.js +82 -0
- package/dist/lib/ship-status.js.map +1 -0
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/dist/program.d.ts +22 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +124 -0
- package/dist/program.js.map +1 -0
- package/dist/shell/commands/diag.d.ts.map +1 -1
- package/dist/shell/commands/diag.js +47 -19
- package/dist/shell/commands/diag.js.map +1 -1
- package/dist/shell/commands/ops-mutates.d.ts +16 -0
- package/dist/shell/commands/ops-mutates.d.ts.map +1 -0
- package/dist/shell/commands/ops-mutates.js +62 -0
- package/dist/shell/commands/ops-mutates.js.map +1 -0
- package/dist/shell/commands/registry.d.ts.map +1 -1
- package/dist/shell/commands/registry.js +43 -0
- package/dist/shell/commands/registry.js.map +1 -1
- package/dist/shell/commands/show.d.ts +12 -0
- package/dist/shell/commands/show.d.ts.map +1 -1
- package/dist/shell/commands/show.js +190 -10
- package/dist/shell/commands/show.js.map +1 -1
- package/dist/shell/commands/telemetry.d.ts +11 -0
- package/dist/shell/commands/telemetry.d.ts.map +1 -0
- package/dist/shell/commands/telemetry.js +49 -0
- package/dist/shell/commands/telemetry.js.map +1 -0
- package/dist/shell/network-onboarding.d.ts +7 -4
- package/dist/shell/network-onboarding.d.ts.map +1 -1
- package/dist/shell/network-onboarding.js +22 -38
- package/dist/shell/network-onboarding.js.map +1 -1
- package/dist/ship-entry.d.ts +3 -0
- package/dist/ship-entry.d.ts.map +1 -0
- package/dist/ship-entry.js +122 -0
- package/dist/ship-entry.js.map +1 -0
- package/package.json +9 -2
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { readEnvKeys, updateEnvKeys } from '../lib/env.js';
|
|
2
|
+
import { composeUp, compose } from '../lib/compose.js';
|
|
3
|
+
import { attachSqlMonitorPassword } from './go-parity.js';
|
|
4
|
+
import * as out from '../utils/output.js';
|
|
5
|
+
const PROFILE = 'sql-monitor';
|
|
6
|
+
const SERVICE = 'pghero';
|
|
7
|
+
function parseProfiles(raw) {
|
|
8
|
+
return (raw ?? '')
|
|
9
|
+
.split(',')
|
|
10
|
+
.map((p) => p.trim())
|
|
11
|
+
.filter(Boolean);
|
|
12
|
+
}
|
|
13
|
+
function isEnabled(raw) {
|
|
14
|
+
return parseProfiles(raw).includes(PROFILE);
|
|
15
|
+
}
|
|
16
|
+
function addProfile(raw) {
|
|
17
|
+
const p = parseProfiles(raw);
|
|
18
|
+
if (!p.includes(PROFILE))
|
|
19
|
+
p.push(PROFILE);
|
|
20
|
+
return p.join(',');
|
|
21
|
+
}
|
|
22
|
+
function removeProfile(raw) {
|
|
23
|
+
return parseProfiles(raw).filter((x) => x !== PROFILE).join(',');
|
|
24
|
+
}
|
|
25
|
+
export function registerShipSqlMonitorCommand(program) {
|
|
26
|
+
const sql = program
|
|
27
|
+
.command('sql-monitor')
|
|
28
|
+
.description('PgHero SQL-health dashboard (opt-in compose profile)');
|
|
29
|
+
attachSqlMonitorPassword(sql);
|
|
30
|
+
sql
|
|
31
|
+
.command('status')
|
|
32
|
+
.description('Show whether sql-monitor profile is enabled')
|
|
33
|
+
.action(() => {
|
|
34
|
+
const env = readEnvKeys();
|
|
35
|
+
const on = isEnabled(env.COMPOSE_PROFILES);
|
|
36
|
+
console.log(`sql-monitor profile: ${on ? 'enabled' : 'disabled'}`);
|
|
37
|
+
console.log(`COMPOSE_PROFILES=${env.COMPOSE_PROFILES ?? '(unset)'}`);
|
|
38
|
+
});
|
|
39
|
+
sql
|
|
40
|
+
.command('enable')
|
|
41
|
+
.description('Enable sql-monitor compose profile and start pghero')
|
|
42
|
+
.action(async () => {
|
|
43
|
+
try {
|
|
44
|
+
const env = readEnvKeys();
|
|
45
|
+
await updateEnvKeys({ COMPOSE_PROFILES: addProfile(env.COMPOSE_PROFILES) });
|
|
46
|
+
out.ok('sql-monitor profile enabled in .env');
|
|
47
|
+
try {
|
|
48
|
+
await composeUp(['-d', SERVICE]);
|
|
49
|
+
out.ok(`${SERVICE} started`);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
out.info('Profile written. Recreate stack: ct restart');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
out.fail(err instanceof Error ? err.message : String(err));
|
|
57
|
+
process.exitCode = 1;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
sql
|
|
61
|
+
.command('disable')
|
|
62
|
+
.description('Disable sql-monitor compose profile and stop pghero')
|
|
63
|
+
.action(async () => {
|
|
64
|
+
try {
|
|
65
|
+
const env = readEnvKeys();
|
|
66
|
+
const next = removeProfile(env.COMPOSE_PROFILES);
|
|
67
|
+
await updateEnvKeys({
|
|
68
|
+
COMPOSE_PROFILES: next.length > 0 ? next : undefined,
|
|
69
|
+
});
|
|
70
|
+
out.ok('sql-monitor profile removed from .env');
|
|
71
|
+
try {
|
|
72
|
+
await compose(['stop', SERVICE]);
|
|
73
|
+
await compose(['rm', '-f', SERVICE]);
|
|
74
|
+
out.ok(`${SERVICE} stopped`);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
out.info('Profile cleared. Stop remaining containers if needed.');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
out.fail(err instanceof Error ? err.message : String(err));
|
|
82
|
+
process.exitCode = 1;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
sql.action(() => {
|
|
86
|
+
console.log('Usage: ct sql-monitor status|enable|disable|password|rotate-password');
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=ship-sql-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship-sql-monitor.js","sourceRoot":"","sources":["../../src/commands/ship-sql-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship-status.d.ts","sourceRoot":"","sources":["../../src/commands/ship-status.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgBhE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { collectShipStatus, formatShipStatus } from '../lib/ship-status.js';
|
|
2
|
+
import * as out from '../utils/output.js';
|
|
3
|
+
export function registerShipStatusCommand(program) {
|
|
4
|
+
program
|
|
5
|
+
.command('status')
|
|
6
|
+
.description('Show appliance status (compose, version, install dir)')
|
|
7
|
+
.action(async () => {
|
|
8
|
+
try {
|
|
9
|
+
const snapshot = await collectShipStatus();
|
|
10
|
+
console.log(formatShipStatus(snapshot));
|
|
11
|
+
if (snapshot.error && !snapshot.composeFileExists) {
|
|
12
|
+
process.exitCode = 1;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
out.fail(err?.message ?? String(err));
|
|
17
|
+
process.exitCode = 1;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=ship-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship-status.js","sourceRoot":"","sources":["../../src/commands/ship-status.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxC,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBAClD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slim non-Ink `ct update` for the multi-arch ship binary.
|
|
3
|
+
*
|
|
4
|
+
* Uses lib/update-steps (preflightSteps + executeSteps + runStepsCli) — the same
|
|
5
|
+
* pipeline as the full Node CLI, without Ink TUI or Node runtime self-upgrade.
|
|
6
|
+
*/
|
|
7
|
+
import type { Command } from 'commander';
|
|
8
|
+
/**
|
|
9
|
+
* Resolve the operator's version argument / flags to a concrete release string.
|
|
10
|
+
* Fail-closed on unknown targets.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveShipUpdateTarget(versionArg: string | undefined, opts: {
|
|
13
|
+
latest?: boolean;
|
|
14
|
+
rc?: boolean;
|
|
15
|
+
stable?: boolean;
|
|
16
|
+
line?: string;
|
|
17
|
+
channel?: string;
|
|
18
|
+
}): Promise<string>;
|
|
19
|
+
/** Run the non-Ink update pipeline. Throws / sets exitCode on failure. */
|
|
20
|
+
export declare function runShipUpdate(versionArg: string | undefined, opts: {
|
|
21
|
+
latest?: boolean;
|
|
22
|
+
rc?: boolean;
|
|
23
|
+
stable?: boolean;
|
|
24
|
+
line?: string;
|
|
25
|
+
channel?: string;
|
|
26
|
+
forceUpgrade?: boolean;
|
|
27
|
+
cleanup?: boolean;
|
|
28
|
+
backupDb?: boolean;
|
|
29
|
+
}): Promise<void>;
|
|
30
|
+
export declare function registerShipUpdateCommand(program: Command): void;
|
|
31
|
+
//# sourceMappingURL=ship-update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship-update.d.ts","sourceRoot":"","sources":["../../src/commands/ship-update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,IAAI,EAAE;IACJ,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,MAAM,CAAC,CAkGjB;AAED,0EAA0E;AAC1E,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,IAAI,EAAE;IACJ,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GACA,OAAO,CAAC,IAAI,CAAC,CAmFf;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2ChE"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { fetchLatestVersion, fetchLatestForLine, fetchLatestForChannel } from '../lib/bundle.js';
|
|
2
|
+
import { detectTargetType, getPin, setPin } from '../lib/prefs.js';
|
|
3
|
+
import { getCurrentVersion } from '../lib/update.js';
|
|
4
|
+
import { createDatabaseBackup } from '../lib/db-backup.js';
|
|
5
|
+
import { preflightSteps, executeSteps, runStepsCli } from '../lib/update-steps.js';
|
|
6
|
+
import { capturePostUpgradeHealth } from '../lib/post-upgrade-health.js';
|
|
7
|
+
import { getDockerVersion } from '../lib/system.js';
|
|
8
|
+
import { updateService } from '../lib/ops-port.js';
|
|
9
|
+
import { reportOpsResult } from './go-parity.js';
|
|
10
|
+
import * as out from '../utils/output.js';
|
|
11
|
+
/**
|
|
12
|
+
* Resolve the operator's version argument / flags to a concrete release string.
|
|
13
|
+
* Fail-closed on unknown targets.
|
|
14
|
+
*/
|
|
15
|
+
export async function resolveShipUpdateTarget(versionArg, opts) {
|
|
16
|
+
let version = versionArg;
|
|
17
|
+
let pinIntent = null;
|
|
18
|
+
if (opts.line) {
|
|
19
|
+
pinIntent = { type: 'line', value: opts.line };
|
|
20
|
+
version = opts.line;
|
|
21
|
+
}
|
|
22
|
+
else if (opts.channel) {
|
|
23
|
+
pinIntent = { type: 'channel', value: opts.channel };
|
|
24
|
+
version = opts.channel;
|
|
25
|
+
}
|
|
26
|
+
else if (versionArg) {
|
|
27
|
+
const detected = detectTargetType(versionArg);
|
|
28
|
+
if (detected === 'line')
|
|
29
|
+
pinIntent = { type: 'line', value: versionArg };
|
|
30
|
+
else if (detected === 'channel')
|
|
31
|
+
pinIntent = { type: 'channel', value: versionArg };
|
|
32
|
+
else if (detected === 'unknown') {
|
|
33
|
+
throw new Error(`Don't know how to interpret target '${versionArg}'. Accepted forms:\n` +
|
|
34
|
+
` ct update # follow saved pin or global stable\n` +
|
|
35
|
+
` ct update 0.8.6 # pin to the 0.8.6 line\n` +
|
|
36
|
+
` ct update 0.8.6.5 # install exact version\n` +
|
|
37
|
+
` ct update stable # follow the stable channel\n` +
|
|
38
|
+
` ct update --line 0.8.6 # explicit line flag\n` +
|
|
39
|
+
` ct update --channel stable # explicit channel flag`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (pinIntent) {
|
|
43
|
+
setPin(pinIntent);
|
|
44
|
+
console.log(`Pinned: ${pinIntent.type} = ${pinIntent.value}`);
|
|
45
|
+
console.log(`(saved to ~/.ct/preferences.json)`);
|
|
46
|
+
}
|
|
47
|
+
if (!version && !opts.latest && !opts.rc && !opts.stable) {
|
|
48
|
+
const saved = getPin();
|
|
49
|
+
if (saved) {
|
|
50
|
+
console.log(`Using saved pin: ${saved.type} = ${saved.value}`);
|
|
51
|
+
version = saved.value;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const targetType = detectTargetType(version);
|
|
55
|
+
if (targetType === 'line') {
|
|
56
|
+
console.log(`Fetching latest stable for line ${version}...`);
|
|
57
|
+
const resolved = await fetchLatestForLine(version);
|
|
58
|
+
console.log(`Latest ${version} stable: ${resolved}`);
|
|
59
|
+
return resolved;
|
|
60
|
+
}
|
|
61
|
+
if (targetType === 'channel') {
|
|
62
|
+
console.log(`Fetching latest on channel '${version}'...`);
|
|
63
|
+
const resolved = await fetchLatestForChannel(version);
|
|
64
|
+
console.log(`Latest on ${version}: ${resolved}`);
|
|
65
|
+
return resolved;
|
|
66
|
+
}
|
|
67
|
+
if (targetType === 'keyword') {
|
|
68
|
+
if (version === 'latest') {
|
|
69
|
+
console.log('Fetching latest version (including pre-releases)...');
|
|
70
|
+
const resolved = await fetchLatestVersion('latest');
|
|
71
|
+
console.log(`Latest version: ${resolved}`);
|
|
72
|
+
return resolved;
|
|
73
|
+
}
|
|
74
|
+
if (version === 'rc') {
|
|
75
|
+
console.log('Fetching latest release candidate...');
|
|
76
|
+
const resolved = await fetchLatestVersion('rc');
|
|
77
|
+
console.log(`Latest release candidate: ${resolved}`);
|
|
78
|
+
return resolved;
|
|
79
|
+
}
|
|
80
|
+
if (version === 'dev') {
|
|
81
|
+
console.log("Fetching latest on channel 'dev'...");
|
|
82
|
+
const resolved = await fetchLatestForChannel('dev');
|
|
83
|
+
console.log(`Latest on dev: ${resolved}`);
|
|
84
|
+
return resolved;
|
|
85
|
+
}
|
|
86
|
+
console.log('Fetching latest stable version...');
|
|
87
|
+
const resolved = await fetchLatestVersion('stable');
|
|
88
|
+
console.log(`Latest stable version: ${resolved}`);
|
|
89
|
+
return resolved;
|
|
90
|
+
}
|
|
91
|
+
if (!version && opts.latest) {
|
|
92
|
+
console.log('Fetching latest version (including pre-releases)...');
|
|
93
|
+
const resolved = await fetchLatestVersion('latest');
|
|
94
|
+
console.log(`Latest version: ${resolved}`);
|
|
95
|
+
return resolved;
|
|
96
|
+
}
|
|
97
|
+
if (!version && opts.rc) {
|
|
98
|
+
console.log('Fetching latest release candidate...');
|
|
99
|
+
const resolved = await fetchLatestVersion('rc');
|
|
100
|
+
console.log(`Latest release candidate: ${resolved}`);
|
|
101
|
+
return resolved;
|
|
102
|
+
}
|
|
103
|
+
if (!version || opts.stable) {
|
|
104
|
+
console.log('Fetching latest stable version...');
|
|
105
|
+
const resolved = await fetchLatestVersion('stable');
|
|
106
|
+
console.log(`Latest stable version: ${resolved}`);
|
|
107
|
+
return resolved;
|
|
108
|
+
}
|
|
109
|
+
// exact version
|
|
110
|
+
return version;
|
|
111
|
+
}
|
|
112
|
+
/** Run the non-Ink update pipeline. Throws / sets exitCode on failure. */
|
|
113
|
+
export async function runShipUpdate(versionArg, opts) {
|
|
114
|
+
const version = await resolveShipUpdateTarget(versionArg, opts);
|
|
115
|
+
const currentVersion = getCurrentVersion();
|
|
116
|
+
console.log(`Current version: ${currentVersion}`);
|
|
117
|
+
console.log(`Target version: ${version}`);
|
|
118
|
+
console.log();
|
|
119
|
+
if (!opts.forceUpgrade) {
|
|
120
|
+
try {
|
|
121
|
+
await runStepsCli(preflightSteps(version));
|
|
122
|
+
console.log();
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
out.fail('Pre-flight checks failed. Use --force-upgrade to proceed anyway.');
|
|
126
|
+
process.exitCode = 1;
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const dockerVer = await getDockerVersion();
|
|
131
|
+
if (dockerVer === null) {
|
|
132
|
+
out.warn('Docker not found or not responding');
|
|
133
|
+
}
|
|
134
|
+
else if (dockerVer < 26) {
|
|
135
|
+
out.warn(`Docker version ${dockerVer} detected — Docker 26+ is recommended`);
|
|
136
|
+
// Ship path: fail-closed when force not set (no automatic dnf upgrade here).
|
|
137
|
+
if (!opts.forceUpgrade) {
|
|
138
|
+
out.fail('Docker < 26. Use --force-upgrade to continue, or upgrade Docker first.');
|
|
139
|
+
process.exitCode = 1;
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
out.ok(`Docker version ${dockerVer} is supported`);
|
|
145
|
+
}
|
|
146
|
+
console.log();
|
|
147
|
+
console.log(`Upgrading from ${currentVersion} to ${version}`);
|
|
148
|
+
console.log('(ship binary — non-interactive step runner; no Ink TUI)');
|
|
149
|
+
let steps = executeSteps(version);
|
|
150
|
+
if (opts.forceUpgrade) {
|
|
151
|
+
steps = steps.filter((s) => s.label !== 'Check image availability');
|
|
152
|
+
}
|
|
153
|
+
if (opts.cleanup === false) {
|
|
154
|
+
steps = steps.filter((s) => s.label !== 'Cleanup unused resources');
|
|
155
|
+
}
|
|
156
|
+
if (opts.backupDb) {
|
|
157
|
+
steps = [
|
|
158
|
+
{
|
|
159
|
+
label: 'Database backup',
|
|
160
|
+
run: async (ctx) => {
|
|
161
|
+
ctx?.log('Creating database backup before update...');
|
|
162
|
+
const backup = await createDatabaseBackup();
|
|
163
|
+
return backup.filePath;
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
...steps,
|
|
167
|
+
];
|
|
168
|
+
}
|
|
169
|
+
console.log();
|
|
170
|
+
let stepError;
|
|
171
|
+
try {
|
|
172
|
+
await runStepsCli(steps);
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
stepError = err;
|
|
176
|
+
}
|
|
177
|
+
console.log();
|
|
178
|
+
const anyFailed = await capturePostUpgradeHealth(`post-upgrade container health check (${version})`, { upgradeFailed: Boolean(stepError) });
|
|
179
|
+
if (stepError) {
|
|
180
|
+
out.fail(`Update failed: ${stepError instanceof Error ? stepError.message : String(stepError)}`);
|
|
181
|
+
process.exitCode = 1;
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
if (anyFailed) {
|
|
185
|
+
out.warn('Update applied, but one or more containers are unhealthy — see captured logs above.');
|
|
186
|
+
process.exitCode = 1;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
out.successBox('Update complete!');
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
export function registerShipUpdateCommand(program) {
|
|
193
|
+
const update = program
|
|
194
|
+
.command('update [version]')
|
|
195
|
+
.description('Update to a version, line, channel, or latest stable (ship binary step runner)')
|
|
196
|
+
.option('--latest', 'Use latest build including pre-releases')
|
|
197
|
+
.option('--rc', 'Use latest release candidate')
|
|
198
|
+
.option('--stable', 'Use latest stable release (default)')
|
|
199
|
+
.option('--line <X.Y.Z>', 'Pin to a specific version line')
|
|
200
|
+
.option('--channel <name>', 'Pin to a customer-facing channel')
|
|
201
|
+
.option('--force-upgrade', 'Skip preflight / allow Docker < 26')
|
|
202
|
+
.option('--no-cleanup', 'Skip Docker cleanup after update')
|
|
203
|
+
.option('--backup-db', 'Create a database backup before update', false)
|
|
204
|
+
.option('--no-backup-db', 'Skip database backup before update')
|
|
205
|
+
.action(async (versionArg, opts) => {
|
|
206
|
+
try {
|
|
207
|
+
await runShipUpdate(versionArg, {
|
|
208
|
+
latest: opts.latest,
|
|
209
|
+
rc: opts.rc,
|
|
210
|
+
stable: opts.stable,
|
|
211
|
+
line: opts.line,
|
|
212
|
+
channel: opts.channel,
|
|
213
|
+
forceUpgrade: opts.forceUpgrade,
|
|
214
|
+
cleanup: opts.cleanup,
|
|
215
|
+
backupDb: opts.backupDb,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
out.fail(err?.message ?? String(err));
|
|
220
|
+
process.exitCode = 1;
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
// Dual-form: ct update service <svc> <tag> (also top-level update-service via go-parity)
|
|
224
|
+
update
|
|
225
|
+
.command('service <service> <tag>')
|
|
226
|
+
.description('Update ONE compose service image tag (atomic recreate)')
|
|
227
|
+
.option('-y, --yes', 'Confirm non-interactive apply')
|
|
228
|
+
.option('--dry-run', 'Show plan only')
|
|
229
|
+
.action(async (service, tag, opts) => {
|
|
230
|
+
const r = await updateService(service, tag, { yes: opts.yes, dryRun: opts.dryRun });
|
|
231
|
+
reportOpsResult(r);
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=ship-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship-update.js","sourceRoot":"","sources":["../../src/commands/ship-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ship (no-Ink) users: list | orgs | reset-password.
|
|
3
|
+
* Uses lib/users.ts RPC. Top-level alias: ct reset-password.
|
|
4
|
+
*/
|
|
5
|
+
import type { Command } from 'commander';
|
|
6
|
+
export declare function registerShipUsersCommand(program: Command): void;
|
|
7
|
+
//# sourceMappingURL=ship-users.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship-users.d.ts","sourceRoot":"","sources":["../../src/commands/ship-users.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqFzC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsD/D"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { listOrgs, listOrgUsers, resetUserPassword, generateUserPassword, } from '../lib/users.js';
|
|
2
|
+
import { attachUsersAddAdmin } from './go-parity.js';
|
|
3
|
+
import * as out from '../utils/output.js';
|
|
4
|
+
async function printOrgs() {
|
|
5
|
+
const orgs = await listOrgs();
|
|
6
|
+
if (orgs.length === 0) {
|
|
7
|
+
console.log('No organizations found.');
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
console.log('Organizations');
|
|
11
|
+
for (const org of orgs) {
|
|
12
|
+
console.log(` ${String(org.id).padStart(4)} ${org.name}`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
async function printUsers() {
|
|
16
|
+
const orgs = await listOrgs();
|
|
17
|
+
if (orgs.length === 0) {
|
|
18
|
+
console.log('No organizations found.');
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
for (const org of orgs) {
|
|
22
|
+
console.log(`\nOrganization: ${org.name} (id=${org.id})`);
|
|
23
|
+
const users = await listOrgUsers(org.id);
|
|
24
|
+
if (users.length === 0) {
|
|
25
|
+
console.log(' (no users)');
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
console.log(' ID Email Role');
|
|
29
|
+
for (const u of users) {
|
|
30
|
+
const roles = u.roles?.length ? u.roles.join(',') : u.role || '-';
|
|
31
|
+
console.log(` ${String(u.id).padEnd(5)} ${u.email.padEnd(30)} ${roles}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async function doResetPassword(opts) {
|
|
36
|
+
if (!opts.user) {
|
|
37
|
+
out.fail('Usage: ct users reset-password --user <id> [--password <pw>|--generate]');
|
|
38
|
+
out.info('Legacy: ct reset-password --user <id>');
|
|
39
|
+
process.exitCode = 1;
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const userId = parseInt(opts.user, 10);
|
|
43
|
+
if (Number.isNaN(userId) || userId <= 0) {
|
|
44
|
+
out.fail(`Invalid user id: ${opts.user}`);
|
|
45
|
+
process.exitCode = 1;
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
let password = opts.password;
|
|
49
|
+
if (!password || opts.generate) {
|
|
50
|
+
password = generateUserPassword();
|
|
51
|
+
}
|
|
52
|
+
if (password.length < 8) {
|
|
53
|
+
out.fail('Password must be at least 8 characters');
|
|
54
|
+
process.exitCode = 1;
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
await resetUserPassword(userId, password);
|
|
59
|
+
out.ok(`Password reset for user ${userId}`);
|
|
60
|
+
console.log(` New password: ${password}`);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
out.fail(err instanceof Error ? err.message : String(err));
|
|
64
|
+
process.exitCode = 1;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function registerShipUsersCommand(program) {
|
|
68
|
+
const users = program.command('users').description('Manage application user accounts');
|
|
69
|
+
// Hidden experimental add-admin (requires --experimental)
|
|
70
|
+
attachUsersAddAdmin(users);
|
|
71
|
+
users
|
|
72
|
+
.command('list')
|
|
73
|
+
.description('List users across all organizations (RPC)')
|
|
74
|
+
.action(async () => {
|
|
75
|
+
try {
|
|
76
|
+
await printUsers();
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
out.fail(err instanceof Error ? err.message : String(err));
|
|
80
|
+
process.exitCode = 1;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
users
|
|
84
|
+
.command('orgs')
|
|
85
|
+
.description('List organizations (RPC)')
|
|
86
|
+
.action(async () => {
|
|
87
|
+
try {
|
|
88
|
+
await printOrgs();
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
out.fail(err instanceof Error ? err.message : String(err));
|
|
92
|
+
process.exitCode = 1;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
users
|
|
96
|
+
.command('reset-password')
|
|
97
|
+
.description('Reset a user password via RPC')
|
|
98
|
+
.option('--user <id>', 'User ID')
|
|
99
|
+
.option('--password <pw>', 'New password (default: generate)')
|
|
100
|
+
.option('--generate', 'Force generate a random password')
|
|
101
|
+
.action(async (opts) => {
|
|
102
|
+
await doResetPassword(opts);
|
|
103
|
+
});
|
|
104
|
+
users.action(() => {
|
|
105
|
+
console.log('Usage: ct users list|orgs|reset-password|add-admin');
|
|
106
|
+
});
|
|
107
|
+
// Legacy Go/cli.sh alias
|
|
108
|
+
program
|
|
109
|
+
.command('reset-password')
|
|
110
|
+
.description('Alias for ct users reset-password')
|
|
111
|
+
.option('--user <id>', 'User ID')
|
|
112
|
+
.option('--password <pw>', 'New password (default: generate)')
|
|
113
|
+
.option('--generate', 'Force generate a random password')
|
|
114
|
+
.action(async (opts) => {
|
|
115
|
+
await doResetPassword(opts);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=ship-users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship-users.js","sourceRoot":"","sources":["../../src/commands/ship-users.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,40 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Public-doc metadata for appliance update / lifecycle commands.
|
|
4
|
+
*
|
|
5
|
+
* @publicDoc
|
|
6
|
+
* @command update
|
|
7
|
+
* @category Updates
|
|
8
|
+
* @summary Update the CallTelemetry appliance to a version, line, or channel
|
|
9
|
+
* @when Routine upgrades, pin to a release line/channel, or apply a specific build
|
|
10
|
+
* @danger Updates restart services; use --backup-db for a pre-update database dump. Prefer non-peak windows.
|
|
11
|
+
* @see https://docs.calltelemetry.com
|
|
12
|
+
* @example ct update
|
|
13
|
+
* @example ct update 0.8.6
|
|
14
|
+
* @example ct update --latest
|
|
15
|
+
* @example ct update --backup-db
|
|
16
|
+
*/
|
|
17
|
+
export declare const updatePublicDoc: import("../lib/public-doc.js").PublicDocMeta;
|
|
18
|
+
/**
|
|
19
|
+
* @publicDoc
|
|
20
|
+
* @command rollback
|
|
21
|
+
* @category Updates
|
|
22
|
+
* @summary Roll back to the previous docker-compose configuration
|
|
23
|
+
* @when Immediately after a failed or undesired update when a compose backup exists
|
|
24
|
+
* @danger Restores the last compose backup and restarts services; does not restore the database
|
|
25
|
+
* @example ct rollback
|
|
26
|
+
*/
|
|
27
|
+
export declare const rollbackPublicDoc: import("../lib/public-doc.js").PublicDocMeta;
|
|
28
|
+
/**
|
|
29
|
+
* @publicDoc
|
|
30
|
+
* @command reset
|
|
31
|
+
* @category Updates
|
|
32
|
+
* @summary Stop the application, remove Docker volumes, and restart (destructive)
|
|
33
|
+
* @when Recovering a broken install when data loss is acceptable
|
|
34
|
+
* @danger Removes application containers and volumes; irreversible without external backups. Requires --yes or interactive confirm.
|
|
35
|
+
* @example ct reset --yes
|
|
36
|
+
*/
|
|
37
|
+
export declare const resetPublicDoc: import("../lib/public-doc.js").PublicDocMeta;
|
|
2
38
|
/** @internal */
|
|
3
39
|
export declare const dockerPackageUpdateArgs: readonly ["dnf", "update", "-y", "docker-ce", "docker-ce-cli", "containerd.io", "docker-buildx-plugin", "docker-compose-plugin"];
|
|
4
40
|
/** @internal */
|
|
@@ -8,6 +44,15 @@ export declare function sudoNonInteractive(args: string[], options?: {
|
|
|
8
44
|
stdout?: 'inherit' | 'ignore';
|
|
9
45
|
}): Promise<void>;
|
|
10
46
|
export declare function ensureNodeRuntime(): Promise<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Register update, rollback, and service lifecycle commands (start/stop/restart/reset).
|
|
49
|
+
*
|
|
50
|
+
* @publicDoc
|
|
51
|
+
* @command update
|
|
52
|
+
* @category Updates
|
|
53
|
+
* @summary Appliance update and lifecycle management
|
|
54
|
+
* @when Upgrades, rollbacks, and compose lifecycle control
|
|
55
|
+
*/
|
|
11
56
|
export declare function registerUpdateCommand(program: Command): void;
|
|
12
57
|
/**
|
|
13
58
|
* Phase 3: pin / unpin commands for multi-line concurrent shipping.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,eAAe,8CAQ1B,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,8CAO5B,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,8CAOzB,CAAC;AAEH,gBAAgB;AAChB,eAAO,MAAM,uBAAuB,kIAS1B,CAAC;AAEX,gBAAgB;AAChB,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC,CASnE;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;CAAO,GACvE,OAAO,CAAC,IAAI,CAAC,CAoCf;AAOD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAkBzD;AAOD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QA8YrD;AAaD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QAuCnD"}
|