@calltelemetry/cli 0.2.5 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +16 -41
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/bundle.d.ts +16 -1
- package/dist/lib/bundle.d.ts.map +1 -1
- package/dist/lib/bundle.js +64 -14
- package/dist/lib/bundle.js.map +1 -1
- package/dist/lib/rpc-scripts.d.ts +2 -0
- package/dist/lib/rpc-scripts.d.ts.map +1 -0
- package/dist/lib/rpc-scripts.js +55 -0
- package/dist/lib/rpc-scripts.js.map +1 -0
- package/dist/lib/update.d.ts +13 -0
- package/dist/lib/update.d.ts.map +1 -0
- package/dist/lib/update.js +67 -0
- package/dist/lib/update.js.map +1 -0
- package/dist/ui/components/Section.d.ts.map +1 -1
- package/dist/ui/components/Section.js +4 -2
- package/dist/ui/components/Section.js.map +1 -1
- package/dist/ui/hooks/useComposeLogs.d.ts.map +1 -1
- package/dist/ui/hooks/useComposeLogs.js +8 -2
- package/dist/ui/hooks/useComposeLogs.js.map +1 -1
- package/dist/ui/hooks/usePolling.d.ts.map +1 -1
- package/dist/ui/hooks/usePolling.js +6 -0
- package/dist/ui/hooks/usePolling.js.map +1 -1
- package/dist/ui/utils/serviceDisplay.d.ts +5 -0
- package/dist/ui/utils/serviceDisplay.d.ts.map +1 -0
- package/dist/ui/utils/serviceDisplay.js +43 -0
- package/dist/ui/utils/serviceDisplay.js.map +1 -0
- package/dist/ui/views/DbTablesView.d.ts.map +1 -1
- package/dist/ui/views/DbTablesView.js +3 -2
- package/dist/ui/views/DbTablesView.js.map +1 -1
- package/dist/ui/views/DiagNetworkView.d.ts.map +1 -1
- package/dist/ui/views/DiagNetworkView.js +0 -16
- package/dist/ui/views/DiagNetworkView.js.map +1 -1
- package/dist/ui/views/DockerNetworkView.d.ts.map +1 -1
- package/dist/ui/views/DockerNetworkView.js +21 -3
- package/dist/ui/views/DockerNetworkView.js.map +1 -1
- package/dist/ui/views/DockerPruneView.d.ts.map +1 -1
- package/dist/ui/views/DockerPruneView.js +12 -5
- package/dist/ui/views/DockerPruneView.js.map +1 -1
- package/dist/ui/views/MainMenu.d.ts.map +1 -1
- package/dist/ui/views/MainMenu.js +59 -63
- package/dist/ui/views/MainMenu.js.map +1 -1
- package/dist/ui/views/MigrateRollbackView.d.ts.map +1 -1
- package/dist/ui/views/MigrateRollbackView.js +15 -4
- package/dist/ui/views/MigrateRollbackView.js.map +1 -1
- package/dist/ui/views/MigrateRunView.d.ts.map +1 -1
- package/dist/ui/views/MigrateRunView.js +15 -4
- package/dist/ui/views/MigrateRunView.js.map +1 -1
- package/dist/ui/views/MigrateStatusView.d.ts.map +1 -1
- package/dist/ui/views/MigrateStatusView.js +1 -54
- package/dist/ui/views/MigrateStatusView.js.map +1 -1
- package/dist/ui/views/MigrateWatchView.d.ts.map +1 -1
- package/dist/ui/views/MigrateWatchView.js +1 -54
- package/dist/ui/views/MigrateWatchView.js.map +1 -1
- package/dist/ui/views/ServicesView.d.ts.map +1 -1
- package/dist/ui/views/ServicesView.js +6 -53
- package/dist/ui/views/ServicesView.js.map +1 -1
- package/dist/ui/views/UpdateView.d.ts +6 -0
- package/dist/ui/views/UpdateView.d.ts.map +1 -0
- package/dist/ui/views/UpdateView.js +302 -0
- package/dist/ui/views/UpdateView.js.map +1 -0
- package/dist/utils/version.d.ts +7 -0
- package/dist/utils/version.d.ts.map +1 -1
- package/dist/utils/version.js +66 -9
- package/dist/utils/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -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;AAepC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAkNrD"}
|
package/dist/commands/update.js
CHANGED
|
@@ -1,25 +1,16 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
|
-
import { existsSync
|
|
3
|
-
import { copyFile, mkdir, rename } from 'node:fs/promises';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
4
3
|
import { join } from 'node:path';
|
|
5
4
|
import { compose, composeUp } from '../lib/compose.js';
|
|
6
5
|
import { getPaths } from '../lib/paths.js';
|
|
7
6
|
import { fetchLatestVersion, downloadBundle, checkImageAvailability, extractImages } from '../lib/bundle.js';
|
|
8
7
|
import { checkRam, checkDiskSpace, getDockerVersion } from '../lib/system.js';
|
|
9
8
|
import { generateSelfSignedCerts } from '../lib/certs.js';
|
|
10
|
-
import { setPostgresVersion } from '../lib/postgres.js';
|
|
11
9
|
import { isVersionGte } from '../utils/version.js';
|
|
12
10
|
import { confirm } from '../utils/prompt.js';
|
|
13
11
|
import { selfUpdate } from './self-update.js';
|
|
12
|
+
import { getCurrentVersion, backupCompose, applyAndRestart, postgresVersionGuard, dockerCleanup } from '../lib/update.js';
|
|
14
13
|
import * as out from '../utils/output.js';
|
|
15
|
-
function getCurrentVersion() {
|
|
16
|
-
const { composeFile } = getPaths();
|
|
17
|
-
if (!existsSync(composeFile))
|
|
18
|
-
return 'not installed';
|
|
19
|
-
const content = readFileSync(composeFile, 'utf-8');
|
|
20
|
-
const match = content.match(/calltelemetry\/vue:([^\s"]+)/);
|
|
21
|
-
return match ? match[1] : 'unknown';
|
|
22
|
-
}
|
|
23
14
|
export function registerUpdateCommand(program) {
|
|
24
15
|
program
|
|
25
16
|
.command('update [version]')
|
|
@@ -30,7 +21,7 @@ export function registerUpdateCommand(program) {
|
|
|
30
21
|
.option('--no-cleanup', 'Skip Docker cleanup after update')
|
|
31
22
|
.option('--ipv6', 'Enable IPv6 support')
|
|
32
23
|
.action(async (versionArg, opts) => {
|
|
33
|
-
const { installDir, composeFile
|
|
24
|
+
const { installDir, composeFile } = getPaths();
|
|
34
25
|
// Self-update CLI first
|
|
35
26
|
await selfUpdate();
|
|
36
27
|
console.log();
|
|
@@ -127,10 +118,8 @@ export function registerUpdateCommand(program) {
|
|
|
127
118
|
}
|
|
128
119
|
}
|
|
129
120
|
// Backup current compose
|
|
130
|
-
|
|
131
|
-
if (
|
|
132
|
-
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
|
|
133
|
-
await copyFile(composeFile, join(backupDir, `docker-compose-${timestamp}.yml`));
|
|
121
|
+
const backupName = await backupCompose();
|
|
122
|
+
if (backupName !== 'no existing file') {
|
|
134
123
|
console.log('Existing docker-compose.yml backed up.');
|
|
135
124
|
}
|
|
136
125
|
// Download bundle
|
|
@@ -168,34 +157,19 @@ export function registerUpdateCommand(program) {
|
|
|
168
157
|
}
|
|
169
158
|
}
|
|
170
159
|
// PostgreSQL version guard
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
console.log();
|
|
177
|
-
out.warn(`PostgreSQL version guard: Your database is on PostgreSQL ${currentPgVer}`);
|
|
178
|
-
console.log(' Auto-pinning for safety. To upgrade later: ct postgres upgrade 17');
|
|
179
|
-
await setPostgresVersion(currentPgVer);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
// Apply
|
|
183
|
-
await rename(tempFile, composeFile);
|
|
184
|
-
console.log('New docker-compose.yml moved to production.');
|
|
185
|
-
// Restart
|
|
186
|
-
console.log('Restarting services...');
|
|
187
|
-
try {
|
|
188
|
-
await execa('systemctl', ['restart', 'docker-compose-app.service']);
|
|
189
|
-
console.log('Docker Compose service restarted.');
|
|
190
|
-
}
|
|
191
|
-
catch {
|
|
192
|
-
// Fall back to compose directly
|
|
193
|
-
await composeUp(['-d']);
|
|
160
|
+
const pinnedPg = await postgresVersionGuard();
|
|
161
|
+
if (pinnedPg) {
|
|
162
|
+
console.log();
|
|
163
|
+
out.warn(`PostgreSQL version guard: Your database is on PostgreSQL ${pinnedPg}`);
|
|
164
|
+
console.log(' Auto-pinning for safety. To upgrade later: ct postgres upgrade 17');
|
|
194
165
|
}
|
|
166
|
+
// Apply and restart
|
|
167
|
+
await applyAndRestart();
|
|
168
|
+
console.log('New docker-compose.yml applied. Services restarting.');
|
|
195
169
|
// Cleanup
|
|
196
170
|
if (opts.cleanup !== false) {
|
|
197
171
|
console.log('Cleaning up unused Docker resources...');
|
|
198
|
-
await
|
|
172
|
+
await dockerCleanup();
|
|
199
173
|
}
|
|
200
174
|
out.successBox('Update complete!');
|
|
201
175
|
});
|
|
@@ -209,6 +183,7 @@ export function registerUpdateCommand(program) {
|
|
|
209
183
|
return;
|
|
210
184
|
}
|
|
211
185
|
const { readdirSync, statSync } = await import('node:fs');
|
|
186
|
+
const { copyFile: copyFileAsync } = await import('node:fs/promises');
|
|
212
187
|
const backups = readdirSync(backupDir)
|
|
213
188
|
.filter(f => f.startsWith('docker-compose-') && f.endsWith('.yml'))
|
|
214
189
|
.map(f => ({ name: f, time: statSync(join(backupDir, f)).mtimeMs }))
|
|
@@ -218,7 +193,7 @@ export function registerUpdateCommand(program) {
|
|
|
218
193
|
return;
|
|
219
194
|
}
|
|
220
195
|
const backupFile = join(backupDir, backups[0].name);
|
|
221
|
-
await
|
|
196
|
+
await copyFileAsync(backupFile, composeFile);
|
|
222
197
|
console.log(`Rolled back to: ${backupFile}`);
|
|
223
198
|
try {
|
|
224
199
|
await execa('systemctl', ['restart', 'docker-compose-app.service']);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
const VERSION = '0.3.0';
|
|
2
3
|
import { Command } from 'commander';
|
|
3
4
|
import { registerStatusCommand } from './commands/status.js';
|
|
4
5
|
import { registerUpdateCommand } from './commands/update.js';
|
|
@@ -25,7 +26,7 @@ const program = new Command();
|
|
|
25
26
|
program
|
|
26
27
|
.name('ct')
|
|
27
28
|
.description('CallTelemetry appliance management CLI')
|
|
28
|
-
.version(
|
|
29
|
+
.version(VERSION)
|
|
29
30
|
.hook('preAction', () => {
|
|
30
31
|
// Only show logo for direct CLI invocations, not TUI
|
|
31
32
|
console.log(LOGO);
|
|
@@ -51,7 +52,7 @@ if (!hasCommand && process.stdout.isTTY) {
|
|
|
51
52
|
const React = await import('react');
|
|
52
53
|
const { MainMenu } = await import('./ui/views/MainMenu.js');
|
|
53
54
|
const { unmount, waitUntilExit } = render(React.createElement(MainMenu, {
|
|
54
|
-
version:
|
|
55
|
+
version: VERSION,
|
|
55
56
|
onCliCommand: (command) => {
|
|
56
57
|
unmount();
|
|
57
58
|
// Fall back to Commander for commands without TUI views
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/bundle.d.ts
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
export declare function fetchLatestVersion(channel?: 'stable' | 'latest'): Promise<string>;
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Fetch all available versions from the GCS bucket listing.
|
|
4
|
+
* Returns versions sorted descending (newest first).
|
|
5
|
+
*/
|
|
6
|
+
export declare function fetchAvailableVersions(): Promise<string[]>;
|
|
7
|
+
export declare function downloadBundle(version: string, options?: {
|
|
8
|
+
quiet?: boolean;
|
|
9
|
+
}): Promise<void>;
|
|
3
10
|
export declare function extractImages(composeFile: string): Promise<string[]>;
|
|
4
11
|
export declare function checkImageAvailability(composeFile: string): Promise<boolean>;
|
|
12
|
+
/** TUI-friendly image check — returns structured results without writing to stdout */
|
|
13
|
+
export declare function checkImageAvailabilityQuiet(composeFile: string): Promise<{
|
|
14
|
+
available: boolean;
|
|
15
|
+
results: Array<{
|
|
16
|
+
image: string;
|
|
17
|
+
available: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
}>;
|
|
5
20
|
//# sourceMappingURL=bundle.d.ts.map
|
package/dist/lib/bundle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/lib/bundle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/lib/bundle.ts"],"names":[],"mappings":"AAQA,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,QAAQ,GAAG,QAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBjG;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBhE;AAeD,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGlG;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAW1E;AAED,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBlF;AAED,sFAAsF;AACtF,wBAAsB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9E,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACvD,CAAC,CAcD"}
|
package/dist/lib/bundle.js
CHANGED
|
@@ -3,6 +3,7 @@ import { existsSync } from 'node:fs';
|
|
|
3
3
|
import { mkdir, rename, rm, copyFile, chmod } from 'node:fs/promises';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
import { getPaths } from './paths.js';
|
|
6
|
+
import { compareVersions } from '../utils/version.js';
|
|
6
7
|
import * as out from '../utils/output.js';
|
|
7
8
|
export async function fetchLatestVersion(channel = 'stable') {
|
|
8
9
|
const { gcsBaseUrl } = getPaths();
|
|
@@ -22,6 +23,26 @@ export async function fetchLatestVersion(channel = 'stable') {
|
|
|
22
23
|
: "Specify a version manually: ct update <version>"));
|
|
23
24
|
}
|
|
24
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Fetch all available versions from the GCS bucket listing.
|
|
28
|
+
* Returns versions sorted descending (newest first).
|
|
29
|
+
*/
|
|
30
|
+
export async function fetchAvailableVersions() {
|
|
31
|
+
const url = 'https://storage.googleapis.com/storage/v1/b/ct_releases/o?prefix=releases/&delimiter=/&maxResults=1000';
|
|
32
|
+
try {
|
|
33
|
+
const { stdout } = await execa('curl', ['-sf', url]);
|
|
34
|
+
const data = JSON.parse(stdout);
|
|
35
|
+
const prefixes = data.prefixes ?? [];
|
|
36
|
+
const versions = prefixes
|
|
37
|
+
.map(p => p.replace(/^releases\//, '').replace(/\/$/, ''))
|
|
38
|
+
.filter(v => /^\d+\.\d+\.\d+/.test(v)); // only valid version strings
|
|
39
|
+
versions.sort((a, b) => compareVersions(b, a)); // descending
|
|
40
|
+
return versions;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
throw new Error('Failed to fetch available versions from GCS');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
25
46
|
/** Copy a file, falling back to sudo cp if destination is owned by root */
|
|
26
47
|
async function safeCopy(src, dest) {
|
|
27
48
|
try {
|
|
@@ -36,17 +57,22 @@ async function safeCopy(src, dest) {
|
|
|
36
57
|
}
|
|
37
58
|
}
|
|
38
59
|
}
|
|
39
|
-
export async function downloadBundle(version) {
|
|
60
|
+
export async function downloadBundle(version, options) {
|
|
40
61
|
const { gcsBundleBaseUrl, installDir, composeFile } = getPaths();
|
|
41
62
|
const bundleName = `calltelemetry-bundle-${version}.tar.gz`;
|
|
42
63
|
const bundleUrl = `${gcsBundleBaseUrl}/${version}/${bundleName}`;
|
|
43
64
|
const extractDir = join(installDir, `bundle-extract-${process.pid}`);
|
|
44
|
-
|
|
65
|
+
const quiet = options?.quiet ?? false;
|
|
66
|
+
if (!quiet)
|
|
67
|
+
console.log(`Downloading config bundle for version ${version}...`);
|
|
45
68
|
try {
|
|
46
|
-
|
|
69
|
+
const curlArgs = quiet
|
|
70
|
+
? ['-fsSL', bundleUrl, '-o', bundleName]
|
|
71
|
+
: ['-fL', '--progress-bar', bundleUrl, '-o', bundleName];
|
|
72
|
+
await execa('curl', curlArgs, {
|
|
47
73
|
cwd: installDir,
|
|
48
|
-
stdout: 'inherit',
|
|
49
|
-
stderr: 'inherit',
|
|
74
|
+
stdout: quiet ? 'pipe' : 'inherit',
|
|
75
|
+
stderr: quiet ? 'pipe' : 'inherit',
|
|
50
76
|
});
|
|
51
77
|
}
|
|
52
78
|
catch {
|
|
@@ -54,9 +80,11 @@ export async function downloadBundle(version) {
|
|
|
54
80
|
`URL: ${bundleUrl}\n\n` +
|
|
55
81
|
`Check available releases at: https://github.com/calltelemetry/calltelemetry/releases`);
|
|
56
82
|
}
|
|
57
|
-
|
|
83
|
+
if (!quiet)
|
|
84
|
+
out.ok('Bundle downloaded');
|
|
58
85
|
// Extract
|
|
59
|
-
|
|
86
|
+
if (!quiet)
|
|
87
|
+
console.log('Extracting config files...');
|
|
60
88
|
await mkdir(extractDir, { recursive: true });
|
|
61
89
|
await execa('tar', ['-xzf', bundleName, '-C', extractDir, '--strip-components=1'], {
|
|
62
90
|
cwd: installDir,
|
|
@@ -69,14 +97,16 @@ export async function downloadBundle(version) {
|
|
|
69
97
|
// Move docker-compose.yml to temp
|
|
70
98
|
const tempFile = join(installDir, 'temp-docker-compose.yml');
|
|
71
99
|
await rename(extractedCompose, tempFile);
|
|
72
|
-
|
|
100
|
+
if (!quiet)
|
|
101
|
+
out.ok('docker-compose.yml');
|
|
73
102
|
// Update cli.sh if present
|
|
74
103
|
const extractedCli = join(extractDir, 'cli.sh');
|
|
75
104
|
if (existsSync(extractedCli)) {
|
|
76
105
|
const cliDest = join(installDir, 'cli.sh');
|
|
77
106
|
await copyFile(extractedCli, cliDest);
|
|
78
107
|
await chmod(cliDest, 0o755);
|
|
79
|
-
|
|
108
|
+
if (!quiet)
|
|
109
|
+
out.ok('cli.sh');
|
|
80
110
|
}
|
|
81
111
|
// Prometheus – destination may be owned by root (Docker volume mount)
|
|
82
112
|
const extractedProm = join(extractDir, 'prometheus', 'prometheus.yml');
|
|
@@ -84,7 +114,8 @@ export async function downloadBundle(version) {
|
|
|
84
114
|
const promDir = join(installDir, 'prometheus');
|
|
85
115
|
await mkdir(promDir, { recursive: true });
|
|
86
116
|
await safeCopy(extractedProm, join(promDir, 'prometheus.yml'));
|
|
87
|
-
|
|
117
|
+
if (!quiet)
|
|
118
|
+
out.ok('prometheus/prometheus.yml');
|
|
88
119
|
}
|
|
89
120
|
// Grafana
|
|
90
121
|
const extractedGrafana = join(extractDir, 'grafana');
|
|
@@ -102,24 +133,28 @@ export async function downloadBundle(version) {
|
|
|
102
133
|
await execa('sudo', ['cp', '-r', join(extractedGrafana, sub), grafanaDir]).catch(() => { });
|
|
103
134
|
}
|
|
104
135
|
}
|
|
105
|
-
|
|
136
|
+
if (!quiet)
|
|
137
|
+
out.ok('grafana configs');
|
|
106
138
|
}
|
|
107
139
|
// Nats
|
|
108
140
|
const extractedNats = join(extractDir, 'nats.conf');
|
|
109
141
|
if (existsSync(extractedNats)) {
|
|
110
142
|
await safeCopy(extractedNats, join(installDir, 'nats.conf'));
|
|
111
|
-
|
|
143
|
+
if (!quiet)
|
|
144
|
+
out.ok('nats.conf');
|
|
112
145
|
}
|
|
113
146
|
// Caddyfile
|
|
114
147
|
const extractedCaddy = join(extractDir, 'Caddyfile');
|
|
115
148
|
if (existsSync(extractedCaddy)) {
|
|
116
149
|
await safeCopy(extractedCaddy, join(installDir, 'Caddyfile'));
|
|
117
|
-
|
|
150
|
+
if (!quiet)
|
|
151
|
+
out.ok('Caddyfile');
|
|
118
152
|
}
|
|
119
153
|
// Cleanup
|
|
120
154
|
await rm(join(installDir, bundleName), { force: true });
|
|
121
155
|
await rm(extractDir, { recursive: true, force: true });
|
|
122
|
-
|
|
156
|
+
if (!quiet)
|
|
157
|
+
out.ok('All config files extracted');
|
|
123
158
|
}
|
|
124
159
|
export async function extractImages(composeFile) {
|
|
125
160
|
const { readFileSync } = await import('node:fs');
|
|
@@ -151,4 +186,19 @@ export async function checkImageAvailability(composeFile) {
|
|
|
151
186
|
}
|
|
152
187
|
return allAvailable;
|
|
153
188
|
}
|
|
189
|
+
/** TUI-friendly image check — returns structured results without writing to stdout */
|
|
190
|
+
export async function checkImageAvailabilityQuiet(composeFile) {
|
|
191
|
+
const images = await extractImages(composeFile);
|
|
192
|
+
const results = [];
|
|
193
|
+
for (const image of images) {
|
|
194
|
+
try {
|
|
195
|
+
await execa('docker', ['manifest', 'inspect', image]);
|
|
196
|
+
results.push({ image, available: true });
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
results.push({ image, available: false });
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return { available: results.every(r => r.available), results };
|
|
203
|
+
}
|
|
154
204
|
//# sourceMappingURL=bundle.js.map
|
package/dist/lib/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/lib/bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,UAA+B,QAAQ;IAC9E,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC;IACvE,MAAM,GAAG,GAAG,GAAG,UAAU,IAAI,IAAI,EAAE,CAAC;IAEpC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,0BAA0B,OAAO,aAAa;YAC9C,CAAC,OAAO,KAAK,QAAQ;gBACnB,CAAC,CAAC,4EAA4E;gBAC9E,CAAC,CAAC,iDAAiD,CAAC,CACvD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,IAAY;IAC/C,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/lib/bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const MIGRATION_STATUS_RPC = "\n alias Cdrcisco.Repo\n import Ecto.Query\n\n try do\n migrations = Ecto.Migrator.migrations(Repo)\n ordered = Enum.sort_by(migrations, fn {_, version, _} -> version end)\n {applied, pending} = Enum.split_with(ordered, fn {status, _, _} -> status == :up end)\n total = length(ordered)\n applied_count = length(applied)\n pending_count = length(pending)\n\n percent = if total == 0, do: 100.0, else: Float.round(applied_count / total * 100, 1)\n\n latest = Repo.one(\n from sm in \"schema_migrations\",\n order_by: [desc: sm.version],\n limit: 1,\n select: %{version: sm.version, inserted_at: sm.inserted_at}\n )\n\n IO.puts(\"=== Migration Progress ===\")\n IO.puts(\"Applied migrations: #{applied_count}/#{total} (#{percent}%)\")\n IO.puts(\"Pending migrations: #{pending_count}\")\n\n case latest do\n %{version: version, inserted_at: timestamp} ->\n IO.puts(\"Latest applied: #{version} @ #{timestamp}\")\n _ ->\n IO.puts(\"Latest applied: none recorded\")\n end\n\n IO.puts(\"\")\n\n if pending_count > 0 do\n {_, next_version, next_name} = hd(pending)\n IO.puts(\"Next pending: #{next_version} - #{next_name}\")\n IO.puts(\"\")\n IO.puts(\"=== Pending Queue ===\")\n Enum.with_index(pending, 1)\n |> Enum.each(fn {{_, version, name}, idx} ->\n IO.puts(\"[#{idx}/#{pending_count}] #{version} - #{name}\")\n end)\n else\n IO.puts(\"All migrations are up to date!\")\n end\n\n IO.puts(\"::pending_count=#{pending_count}\")\n rescue\n e ->\n IO.puts(\"Error checking migrations: #{inspect(e)}\")\n IO.puts(\"::pending_count=error\")\n end\n";
|
|
2
|
+
//# sourceMappingURL=rpc-scripts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-scripts.d.ts","sourceRoot":"","sources":["../../src/lib/rpc-scripts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,urDAqDhC,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export const MIGRATION_STATUS_RPC = `
|
|
2
|
+
alias Cdrcisco.Repo
|
|
3
|
+
import Ecto.Query
|
|
4
|
+
|
|
5
|
+
try do
|
|
6
|
+
migrations = Ecto.Migrator.migrations(Repo)
|
|
7
|
+
ordered = Enum.sort_by(migrations, fn {_, version, _} -> version end)
|
|
8
|
+
{applied, pending} = Enum.split_with(ordered, fn {status, _, _} -> status == :up end)
|
|
9
|
+
total = length(ordered)
|
|
10
|
+
applied_count = length(applied)
|
|
11
|
+
pending_count = length(pending)
|
|
12
|
+
|
|
13
|
+
percent = if total == 0, do: 100.0, else: Float.round(applied_count / total * 100, 1)
|
|
14
|
+
|
|
15
|
+
latest = Repo.one(
|
|
16
|
+
from sm in "schema_migrations",
|
|
17
|
+
order_by: [desc: sm.version],
|
|
18
|
+
limit: 1,
|
|
19
|
+
select: %{version: sm.version, inserted_at: sm.inserted_at}
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
IO.puts("=== Migration Progress ===")
|
|
23
|
+
IO.puts("Applied migrations: \#{applied_count}/\#{total} (\#{percent}%)")
|
|
24
|
+
IO.puts("Pending migrations: \#{pending_count}")
|
|
25
|
+
|
|
26
|
+
case latest do
|
|
27
|
+
%{version: version, inserted_at: timestamp} ->
|
|
28
|
+
IO.puts("Latest applied: \#{version} @ \#{timestamp}")
|
|
29
|
+
_ ->
|
|
30
|
+
IO.puts("Latest applied: none recorded")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
IO.puts("")
|
|
34
|
+
|
|
35
|
+
if pending_count > 0 do
|
|
36
|
+
{_, next_version, next_name} = hd(pending)
|
|
37
|
+
IO.puts("Next pending: \#{next_version} - \#{next_name}")
|
|
38
|
+
IO.puts("")
|
|
39
|
+
IO.puts("=== Pending Queue ===")
|
|
40
|
+
Enum.with_index(pending, 1)
|
|
41
|
+
|> Enum.each(fn {{_, version, name}, idx} ->
|
|
42
|
+
IO.puts("[\#{idx}/\#{pending_count}] \#{version} - \#{name}")
|
|
43
|
+
end)
|
|
44
|
+
else
|
|
45
|
+
IO.puts("All migrations are up to date!")
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
IO.puts("::pending_count=\#{pending_count}")
|
|
49
|
+
rescue
|
|
50
|
+
e ->
|
|
51
|
+
IO.puts("Error checking migrations: \#{inspect(e)}")
|
|
52
|
+
IO.puts("::pending_count=error")
|
|
53
|
+
end
|
|
54
|
+
`;
|
|
55
|
+
//# sourceMappingURL=rpc-scripts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-scripts.js","sourceRoot":"","sources":["../../src/lib/rpc-scripts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDnC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Get current deployed version from docker-compose.yml */
|
|
2
|
+
export declare function getCurrentVersion(): string;
|
|
3
|
+
/** Backup current docker-compose.yml, returns the backup filename */
|
|
4
|
+
export declare function backupCompose(): Promise<string>;
|
|
5
|
+
/** Move temp compose to production and restart services */
|
|
6
|
+
export declare function applyAndRestart(): Promise<void>;
|
|
7
|
+
/** Pin PostgreSQL version if currently on < 17 to prevent accidental upgrades */
|
|
8
|
+
export declare function postgresVersionGuard(): Promise<string | null>;
|
|
9
|
+
/** Run docker system prune */
|
|
10
|
+
export declare function dockerCleanup(): Promise<void>;
|
|
11
|
+
/** Pull images from a compose file (piped, no stdout inherit) */
|
|
12
|
+
export declare function pullImages(composeFilePath: string): Promise<string[]>;
|
|
13
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/lib/update.ts"],"names":[],"mappings":"AAQA,2DAA2D;AAC3D,wBAAgB,iBAAiB,IAAI,MAAM,CAO1C;AAED,qEAAqE;AACrE,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAUrD;AAED,2DAA2D;AAC3D,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAUrD;AAED,iFAAiF;AACjF,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAanE;AAED,8BAA8B;AAC9B,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnD;AAED,iEAAiE;AACjE,wBAAsB,UAAU,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAM3E"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { execa } from 'execa';
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { copyFile, mkdir, rename } from 'node:fs/promises';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { getPaths } from './paths.js';
|
|
6
|
+
import { composeUp } from './compose.js';
|
|
7
|
+
import { setPostgresVersion } from './postgres.js';
|
|
8
|
+
/** Get current deployed version from docker-compose.yml */
|
|
9
|
+
export function getCurrentVersion() {
|
|
10
|
+
const { composeFile } = getPaths();
|
|
11
|
+
if (!existsSync(composeFile))
|
|
12
|
+
return 'not installed';
|
|
13
|
+
const content = readFileSync(composeFile, 'utf-8');
|
|
14
|
+
const match = content.match(/calltelemetry\/vue:([^\s"]+)/);
|
|
15
|
+
return match ? match[1] : 'unknown';
|
|
16
|
+
}
|
|
17
|
+
/** Backup current docker-compose.yml, returns the backup filename */
|
|
18
|
+
export async function backupCompose() {
|
|
19
|
+
const { backupDir, composeFile } = getPaths();
|
|
20
|
+
await mkdir(backupDir, { recursive: true });
|
|
21
|
+
if (existsSync(composeFile)) {
|
|
22
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
|
|
23
|
+
const backupName = `docker-compose-${timestamp}.yml`;
|
|
24
|
+
await copyFile(composeFile, join(backupDir, backupName));
|
|
25
|
+
return backupName;
|
|
26
|
+
}
|
|
27
|
+
return 'no existing file';
|
|
28
|
+
}
|
|
29
|
+
/** Move temp compose to production and restart services */
|
|
30
|
+
export async function applyAndRestart() {
|
|
31
|
+
const { installDir, composeFile } = getPaths();
|
|
32
|
+
const tempFile = join(installDir, 'temp-docker-compose.yml');
|
|
33
|
+
await rename(tempFile, composeFile);
|
|
34
|
+
try {
|
|
35
|
+
await execa('systemctl', ['restart', 'docker-compose-app.service']);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
await composeUp(['-d'], { pipe: true });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Pin PostgreSQL version if currently on < 17 to prevent accidental upgrades */
|
|
42
|
+
export async function postgresVersionGuard() {
|
|
43
|
+
const { composeFile, overrideFile } = getPaths();
|
|
44
|
+
if (!existsSync(composeFile))
|
|
45
|
+
return null;
|
|
46
|
+
const content = readFileSync(composeFile, 'utf-8');
|
|
47
|
+
const pgMatch = content.match(/calltelemetry\/postgres:(\d+)/);
|
|
48
|
+
const currentPgVer = pgMatch?.[1];
|
|
49
|
+
if (currentPgVer && currentPgVer !== '17' && !existsSync(overrideFile)) {
|
|
50
|
+
await setPostgresVersion(currentPgVer);
|
|
51
|
+
return currentPgVer;
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
/** Run docker system prune */
|
|
56
|
+
export async function dockerCleanup() {
|
|
57
|
+
await execa('docker', ['system', 'prune', '-f']).catch(() => { });
|
|
58
|
+
}
|
|
59
|
+
/** Pull images from a compose file (piped, no stdout inherit) */
|
|
60
|
+
export async function pullImages(composeFilePath) {
|
|
61
|
+
const { extractImages } = await import('./bundle.js');
|
|
62
|
+
const { compose } = await import('./compose.js');
|
|
63
|
+
const images = await extractImages(composeFilePath);
|
|
64
|
+
await compose(['-f', composeFilePath, 'pull'], { pipe: true });
|
|
65
|
+
return images;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/lib/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Section.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Section.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"Section.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Section.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,YAAY,2CAexD"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text } from 'ink';
|
|
2
|
+
import { Box, Text, useStdout } from 'ink';
|
|
3
3
|
export function Section({ title, children }) {
|
|
4
|
-
|
|
4
|
+
const { stdout } = useStdout();
|
|
5
|
+
const width = Math.min((stdout?.columns ?? 80) - 4, 80);
|
|
6
|
+
return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, children: ` ${title}` }), _jsx(Text, { dimColor: true, children: ' ' + '─'.repeat(width) }), children && (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: children }))] }));
|
|
5
7
|
}
|
|
6
8
|
//# sourceMappingURL=Section.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Section.js","sourceRoot":"","sources":["../../../src/ui/components/Section.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"Section.js","sourceRoot":"","sources":["../../../src/ui/components/Section.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAQ3C,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAgB;IACvD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAExD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACtC,KAAC,IAAI,IAAC,IAAI,kBAAE,KAAK,KAAK,EAAE,GAAQ,EAChC,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAQ,EAC/C,QAAQ,IAAI,CACX,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,YACtC,QAAQ,GACL,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useComposeLogs.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useComposeLogs.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,IAAI,SAAM,GACT;IACD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,
|
|
1
|
+
{"version":3,"file":"useComposeLogs.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useComposeLogs.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,IAAI,SAAM,GACT;IACD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAyFA"}
|