@calltelemetry/cli 0.3.7 → 0.3.8
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/offline.d.ts.map +1 -1
- package/dist/commands/offline.js +78 -105
- package/dist/commands/offline.js.map +1 -1
- package/dist/commands/self-update.d.ts +2 -3
- package/dist/commands/self-update.d.ts.map +1 -1
- package/dist/commands/self-update.js +4 -49
- package/dist/commands/self-update.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +25 -87
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/auto-update.d.ts +15 -5
- package/dist/lib/auto-update.d.ts.map +1 -1
- package/dist/lib/auto-update.js +61 -25
- package/dist/lib/auto-update.js.map +1 -1
- package/dist/lib/bundle.d.ts.map +1 -1
- package/dist/lib/bundle.js +2 -9
- package/dist/lib/bundle.js.map +1 -1
- package/dist/lib/offline-steps.d.ts +33 -0
- package/dist/lib/offline-steps.d.ts.map +1 -0
- package/dist/lib/offline-steps.js +350 -0
- package/dist/lib/offline-steps.js.map +1 -0
- package/dist/lib/update-steps.d.ts +17 -0
- package/dist/lib/update-steps.d.ts.map +1 -0
- package/dist/lib/update-steps.js +169 -0
- package/dist/lib/update-steps.js.map +1 -0
- package/dist/ui/views/CertsStatusView.d.ts.map +1 -1
- package/dist/ui/views/CertsStatusView.js +19 -10
- package/dist/ui/views/CertsStatusView.js.map +1 -1
- package/dist/ui/views/DbBackupView.d.ts.map +1 -1
- package/dist/ui/views/DbBackupView.js +4 -2
- package/dist/ui/views/DbBackupView.js.map +1 -1
- package/dist/ui/views/DbStatusView.d.ts.map +1 -1
- package/dist/ui/views/DbStatusView.js +3 -2
- package/dist/ui/views/DbStatusView.js.map +1 -1
- package/dist/ui/views/DiagDatabaseView.d.ts.map +1 -1
- package/dist/ui/views/DiagDatabaseView.js +12 -10
- package/dist/ui/views/DiagDatabaseView.js.map +1 -1
- package/dist/ui/views/DiagNetworkView.d.ts.map +1 -1
- package/dist/ui/views/DiagNetworkView.js +23 -14
- package/dist/ui/views/DiagNetworkView.js.map +1 -1
- package/dist/ui/views/DiagServiceView.d.ts.map +1 -1
- package/dist/ui/views/DiagServiceView.js +6 -5
- package/dist/ui/views/DiagServiceView.js.map +1 -1
- package/dist/ui/views/DockerStatusView.d.ts.map +1 -1
- package/dist/ui/views/DockerStatusView.js +5 -4
- package/dist/ui/views/DockerStatusView.js.map +1 -1
- package/dist/ui/views/MainMenu.d.ts.map +1 -1
- package/dist/ui/views/MainMenu.js +42 -3
- package/dist/ui/views/MainMenu.js.map +1 -1
- package/dist/ui/views/MigrateRunView.js +1 -1
- package/dist/ui/views/MigrateRunView.js.map +1 -1
- package/dist/ui/views/MigrateWatchView.d.ts.map +1 -1
- package/dist/ui/views/MigrateWatchView.js +2 -2
- package/dist/ui/views/MigrateWatchView.js.map +1 -1
- package/dist/ui/views/OfflineApplyView.d.ts +6 -0
- package/dist/ui/views/OfflineApplyView.d.ts.map +1 -0
- package/dist/ui/views/OfflineApplyView.js +109 -0
- package/dist/ui/views/OfflineApplyView.js.map +1 -0
- package/dist/ui/views/OfflineDownloadView.d.ts +6 -0
- package/dist/ui/views/OfflineDownloadView.d.ts.map +1 -0
- package/dist/ui/views/OfflineDownloadView.js +67 -0
- package/dist/ui/views/OfflineDownloadView.js.map +1 -0
- package/dist/ui/views/OfflineFetchView.d.ts +6 -0
- package/dist/ui/views/OfflineFetchView.d.ts.map +1 -0
- package/dist/ui/views/OfflineFetchView.js +64 -0
- package/dist/ui/views/OfflineFetchView.js.map +1 -0
- package/dist/ui/views/OfflineInspectView.d.ts +6 -0
- package/dist/ui/views/OfflineInspectView.d.ts.map +1 -0
- package/dist/ui/views/OfflineInspectView.js +65 -0
- package/dist/ui/views/OfflineInspectView.js.map +1 -0
- package/dist/ui/views/OfflineListView.d.ts.map +1 -1
- package/dist/ui/views/OfflineListView.js +2 -6
- package/dist/ui/views/OfflineListView.js.map +1 -1
- package/dist/ui/views/UpdateView.d.ts.map +1 -1
- package/dist/ui/views/UpdateView.js +20 -145
- package/dist/ui/views/UpdateView.js.map +1 -1
- package/package.json +4 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offline.d.ts","sourceRoot":"","sources":["../../src/commands/offline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"offline.d.ts","sourceRoot":"","sources":["../../src/commands/offline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAiJtD"}
|
package/dist/commands/offline.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { render } from 'ink';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { join } from 'node:path';
|
|
7
|
-
import { composeUp } from '../lib/compose.js';
|
|
8
|
-
import { getPaths } from '../lib/paths.js';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { runStepsCli } from '../lib/update-steps.js';
|
|
5
|
+
import { fetchSteps, downloadSteps, applySteps, inspectBundle, validateBundle, } from '../lib/offline-steps.js';
|
|
9
6
|
import * as out from '../utils/output.js';
|
|
10
7
|
import { OfflineListView } from '../ui/views/OfflineListView.js';
|
|
11
8
|
export function registerOfflineCommand(program) {
|
|
@@ -15,97 +12,43 @@ export function registerOfflineCommand(program) {
|
|
|
15
12
|
offline.command('fetch <version>')
|
|
16
13
|
.description('Download pre-built config bundle from cloud (fast, no Docker images)')
|
|
17
14
|
.action(async (version) => {
|
|
18
|
-
const { gcsBundleBaseUrl } = getPaths();
|
|
19
|
-
const bundleFile = `calltelemetry-bundle-${version}.tar.gz`;
|
|
20
|
-
const bundleUrl = `${gcsBundleBaseUrl}/${version}/${bundleFile}`;
|
|
21
15
|
out.header('Fetching Pre-built Bundle');
|
|
22
16
|
console.log(`Version: ${version}`);
|
|
23
17
|
console.log();
|
|
24
18
|
try {
|
|
25
|
-
await
|
|
26
|
-
stdout: 'inherit',
|
|
27
|
-
stderr: 'inherit',
|
|
28
|
-
});
|
|
19
|
+
await runStepsCli(fetchSteps(version));
|
|
29
20
|
}
|
|
30
21
|
catch {
|
|
31
|
-
out.errorBox('
|
|
22
|
+
out.errorBox('Fetch failed', [
|
|
32
23
|
`Version ${version} may not exist.`,
|
|
33
24
|
'Check: https://github.com/calltelemetry/calltelemetry/releases',
|
|
34
25
|
]);
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
// Verify checksum if available
|
|
38
|
-
const checksumUrl = `${bundleUrl}.sha256`;
|
|
39
|
-
try {
|
|
40
|
-
await execa('curl', ['-sfL', checksumUrl, '-o', `${bundleFile}.sha256`]);
|
|
41
|
-
await execa('sha256sum', ['-c', `${bundleFile}.sha256`]);
|
|
42
|
-
out.ok('Checksum verified');
|
|
43
|
-
await rm(`${bundleFile}.sha256`, { force: true });
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
out.info('Checksum verification skipped');
|
|
26
|
+
process.exit(1);
|
|
47
27
|
}
|
|
28
|
+
console.log();
|
|
48
29
|
out.successBox('Bundle Downloaded');
|
|
49
|
-
console.log(`File:
|
|
30
|
+
console.log(`File: calltelemetry-bundle-${version}.tar.gz`);
|
|
50
31
|
console.log();
|
|
51
|
-
console.log(`To apply: ct offline apply
|
|
32
|
+
console.log(`To apply: ct offline apply calltelemetry-bundle-${version}.tar.gz`);
|
|
52
33
|
});
|
|
53
34
|
offline.command('download <version>')
|
|
54
35
|
.description('Build full offline bundle with Docker images (slow)')
|
|
55
36
|
.action(async (version) => {
|
|
56
|
-
const { gcsBundleBaseUrl } = getPaths();
|
|
57
|
-
const configBundle = `calltelemetry-bundle-${version}.tar.gz`;
|
|
58
|
-
const bundleDir = `calltelemetry-offline-${version}`;
|
|
59
|
-
const bundleName = `calltelemetry-offline-${version}.tar.gz`;
|
|
60
37
|
out.header('Creating Offline Bundle (with Docker Images)');
|
|
61
38
|
console.log(`Version: ${version}`);
|
|
62
39
|
console.log();
|
|
63
|
-
// Download config bundle
|
|
64
|
-
console.log('Step 1: Downloading config bundle...');
|
|
65
|
-
const bundleUrl = `${gcsBundleBaseUrl}/${version}/${configBundle}`;
|
|
66
40
|
try {
|
|
67
|
-
await
|
|
68
|
-
stdout: 'inherit', stderr: 'inherit',
|
|
69
|
-
});
|
|
41
|
+
await runStepsCli(downloadSteps(version));
|
|
70
42
|
}
|
|
71
43
|
catch {
|
|
72
|
-
out.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
await rm(bundleDir, { recursive: true, force: true });
|
|
78
|
-
await mkdir(bundleDir, { recursive: true });
|
|
79
|
-
await execa('tar', ['-xzf', configBundle, '-C', bundleDir, '--strip-components=1']);
|
|
80
|
-
await rm(configBundle, { force: true });
|
|
81
|
-
// Pull images
|
|
82
|
-
console.log('Step 3: Pulling Docker images...');
|
|
83
|
-
const composePath = join(bundleDir, 'docker-compose.yml');
|
|
84
|
-
if (!existsSync(composePath)) {
|
|
85
|
-
out.fail('docker-compose.yml not found in bundle');
|
|
86
|
-
await rm(bundleDir, { recursive: true, force: true });
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
const content = readFileSync(composePath, 'utf-8');
|
|
90
|
-
const images = [];
|
|
91
|
-
for (const line of content.split('\n')) {
|
|
92
|
-
const match = line.match(/image:\s*["']?([^"'\s]+)/);
|
|
93
|
-
if (match)
|
|
94
|
-
images.push(match[1]);
|
|
95
|
-
}
|
|
96
|
-
for (const img of images) {
|
|
97
|
-
console.log(` Pulling: ${img}`);
|
|
98
|
-
await execa('docker', ['pull', img]).catch(() => out.warn(`Failed to pull ${img}`));
|
|
44
|
+
out.errorBox('Download failed', [
|
|
45
|
+
`Failed to build offline bundle for version ${version}.`,
|
|
46
|
+
'Check network connectivity and Docker status.',
|
|
47
|
+
]);
|
|
48
|
+
process.exit(1);
|
|
99
49
|
}
|
|
100
|
-
|
|
101
|
-
console.log(
|
|
102
|
-
await execa('docker', ['save', ...images, '-o', join(bundleDir, 'images.tar')], {
|
|
103
|
-
stdout: 'inherit',
|
|
104
|
-
});
|
|
105
|
-
// Create final bundle
|
|
106
|
-
console.log('Step 5: Creating final bundle archive...');
|
|
107
|
-
await execa('tar', ['-czf', bundleName, bundleDir]);
|
|
108
|
-
await rm(bundleDir, { recursive: true, force: true });
|
|
50
|
+
const bundleName = `calltelemetry-offline-${version}.tar.gz`;
|
|
51
|
+
console.log();
|
|
109
52
|
out.successBox('Offline Bundle Created');
|
|
110
53
|
console.log(`File: ${bundleName}`);
|
|
111
54
|
console.log();
|
|
@@ -117,49 +60,79 @@ export function registerOfflineCommand(program) {
|
|
|
117
60
|
.action(async (bundle) => {
|
|
118
61
|
if (!existsSync(bundle)) {
|
|
119
62
|
out.fail(`Bundle file not found: ${bundle}`);
|
|
120
|
-
|
|
63
|
+
process.exit(1);
|
|
121
64
|
}
|
|
122
|
-
const { installDir, backupDir } = getPaths();
|
|
123
65
|
out.header('Applying Offline Bundle');
|
|
124
66
|
console.log(`Bundle: ${bundle}`);
|
|
125
|
-
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
// Load Docker images
|
|
131
|
-
const imagesFile = join(extractDir, 'images.tar');
|
|
132
|
-
if (existsSync(imagesFile)) {
|
|
133
|
-
console.log('Loading Docker images...');
|
|
134
|
-
await execa('docker', ['load', '-i', imagesFile], { stdout: 'inherit' });
|
|
135
|
-
}
|
|
136
|
-
// Install configs
|
|
137
|
-
console.log('Installing configuration files...');
|
|
138
|
-
await mkdir(backupDir, { recursive: true });
|
|
139
|
-
const configFiles = ['docker-compose.yml', 'Caddyfile', 'cli.sh', 'nats.conf'];
|
|
140
|
-
for (const file of configFiles) {
|
|
141
|
-
const src = join(extractDir, file);
|
|
142
|
-
if (existsSync(src)) {
|
|
143
|
-
const dest = join(installDir, file);
|
|
144
|
-
if (existsSync(dest)) {
|
|
145
|
-
await copyFile(dest, join(backupDir, `${file}.backup`));
|
|
146
|
-
}
|
|
147
|
-
await copyFile(src, dest);
|
|
148
|
-
console.log(` - ${file}`);
|
|
149
|
-
}
|
|
67
|
+
// Pre-apply validation & summary
|
|
68
|
+
const validation = await validateBundle(bundle);
|
|
69
|
+
if (!validation.valid) {
|
|
70
|
+
out.fail(validation.error);
|
|
71
|
+
process.exit(1);
|
|
150
72
|
}
|
|
151
|
-
|
|
73
|
+
const info = await inspectBundle(bundle);
|
|
74
|
+
console.log(`Size: ${info.sizeLabel}`);
|
|
75
|
+
if (info.version)
|
|
76
|
+
console.log(`Version: ${info.version}`);
|
|
77
|
+
console.log(`Configs: ${info.configFiles.join(', ') || 'none'}`);
|
|
78
|
+
console.log(`Images: ${info.hasImages ? `${info.imageNames.length} bundled` : 'none (config-only)'}`);
|
|
152
79
|
console.log();
|
|
153
|
-
console.log('Restarting services...');
|
|
154
80
|
try {
|
|
155
|
-
await
|
|
81
|
+
await runStepsCli(applySteps(bundle));
|
|
156
82
|
}
|
|
157
83
|
catch {
|
|
158
|
-
|
|
84
|
+
out.errorBox('Apply failed', [
|
|
85
|
+
'Your previous version is still running.',
|
|
86
|
+
'Check logs with: docker compose logs --tail 50',
|
|
87
|
+
]);
|
|
88
|
+
process.exit(1);
|
|
159
89
|
}
|
|
90
|
+
console.log();
|
|
160
91
|
out.successBox('Offline Bundle Applied');
|
|
161
92
|
console.log('Check status with: ct status');
|
|
162
93
|
});
|
|
94
|
+
offline.command('inspect <bundle>')
|
|
95
|
+
.description('Inspect contents of an offline bundle without applying')
|
|
96
|
+
.action(async (bundle) => {
|
|
97
|
+
if (!existsSync(bundle)) {
|
|
98
|
+
out.fail(`Bundle file not found: ${bundle}`);
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
const validation = await validateBundle(bundle);
|
|
102
|
+
if (!validation.valid) {
|
|
103
|
+
out.fail(validation.error);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
const info = await inspectBundle(bundle);
|
|
107
|
+
out.header('Bundle Contents');
|
|
108
|
+
console.log(`File: ${bundle}`);
|
|
109
|
+
console.log(`Size: ${info.sizeLabel}`);
|
|
110
|
+
if (info.version)
|
|
111
|
+
console.log(`Version: ${info.version}`);
|
|
112
|
+
console.log();
|
|
113
|
+
console.log('Configuration files:');
|
|
114
|
+
if (info.configFiles.length > 0) {
|
|
115
|
+
for (const f of info.configFiles) {
|
|
116
|
+
console.log(` - ${f}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
console.log(' (none found)');
|
|
121
|
+
}
|
|
122
|
+
console.log();
|
|
123
|
+
console.log('Docker images:');
|
|
124
|
+
if (info.hasImages && info.imageNames.length > 0) {
|
|
125
|
+
for (const img of info.imageNames) {
|
|
126
|
+
console.log(` - ${img}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else if (info.hasImages) {
|
|
130
|
+
console.log(' images.tar present (could not parse image names)');
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log(' (none — config-only bundle)');
|
|
134
|
+
}
|
|
135
|
+
});
|
|
163
136
|
offline.command('list')
|
|
164
137
|
.description('List images in current docker-compose.yml')
|
|
165
138
|
.action(async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offline.js","sourceRoot":"","sources":["../../src/commands/offline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"offline.js","sourceRoot":"","sources":["../../src/commands/offline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Registered as `ct self-update`. Delegates to the shared updateCli()
|
|
4
|
+
* with interactive (non-silent) output.
|
|
5
5
|
*/
|
|
6
|
-
export declare function selfUpdate(): Promise<void>;
|
|
7
6
|
export declare function registerSelfUpdateCommand(program: Command): void;
|
|
8
7
|
//# sourceMappingURL=self-update.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-update.d.ts","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"self-update.d.ts","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,QAOzD"}
|
|
@@ -1,59 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import * as out from '../utils/output.js';
|
|
1
|
+
import { updateCli } from '../lib/auto-update.js';
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Registered as `ct self-update`. Delegates to the shared updateCli()
|
|
4
|
+
* with interactive (non-silent) output.
|
|
6
5
|
*/
|
|
7
|
-
export async function selfUpdate() {
|
|
8
|
-
console.log('Checking for CLI updates...');
|
|
9
|
-
try {
|
|
10
|
-
const { stdout: installed } = await execa('npm', ['ls', '-g', '@calltelemetry/cli', '--json']);
|
|
11
|
-
const local = JSON.parse(installed)?.dependencies?.['@calltelemetry/cli']?.version;
|
|
12
|
-
const { stdout: registryJson } = await execa('npm', ['view', '@calltelemetry/cli', 'version', '--json']);
|
|
13
|
-
const latest = JSON.parse(registryJson);
|
|
14
|
-
if (local && local === latest) {
|
|
15
|
-
out.ok(`CLI is up to date (v${local})`);
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
console.log(`Updating CLI: ${local ?? 'unknown'} → ${latest}...`);
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
// Can't determine versions — just run the install
|
|
22
|
-
console.log('Installing latest CLI...');
|
|
23
|
-
}
|
|
24
|
-
// Try user-level install first, fallback to sudo
|
|
25
|
-
try {
|
|
26
|
-
await execa('npm', ['install', '-g', '@calltelemetry/cli'], {
|
|
27
|
-
stdout: 'inherit',
|
|
28
|
-
stderr: 'inherit',
|
|
29
|
-
});
|
|
30
|
-
out.ok('CLI updated successfully');
|
|
31
|
-
}
|
|
32
|
-
catch (err) {
|
|
33
|
-
const isPermission = err.stderr?.toString().includes('EACCES') || err.exitCode === 243;
|
|
34
|
-
if (!isPermission) {
|
|
35
|
-
out.warn('CLI self-update failed. You can update manually: npm install -g @calltelemetry/cli');
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
// Permission denied — retry with sudo
|
|
39
|
-
try {
|
|
40
|
-
await execa('sudo', ['npm', 'install', '-g', '@calltelemetry/cli'], {
|
|
41
|
-
stdout: 'inherit',
|
|
42
|
-
stderr: 'inherit',
|
|
43
|
-
});
|
|
44
|
-
out.ok('CLI updated successfully');
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
out.warn('CLI self-update failed. You can update manually: sudo npm install -g @calltelemetry/cli');
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
6
|
export function registerSelfUpdateCommand(program) {
|
|
52
7
|
program
|
|
53
8
|
.command('self-update')
|
|
54
9
|
.description('Update the ct CLI tool to the latest version')
|
|
55
10
|
.action(async () => {
|
|
56
|
-
await
|
|
11
|
+
await updateCli(program.version() ?? '0.0.0');
|
|
57
12
|
});
|
|
58
13
|
}
|
|
59
14
|
//# sourceMappingURL=self-update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -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;AAapC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAkJrD"}
|
package/dist/commands/update.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import {
|
|
4
|
+
import { composeUp } from '../lib/compose.js';
|
|
5
5
|
import { getPaths } from '../lib/paths.js';
|
|
6
|
-
import { fetchLatestVersion
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { isVersionGte } from '../utils/version.js';
|
|
6
|
+
import { fetchLatestVersion } from '../lib/bundle.js';
|
|
7
|
+
import { getDockerVersion } from '../lib/system.js';
|
|
8
|
+
import { getCurrentVersion } from '../lib/update.js';
|
|
10
9
|
import { confirm } from '../utils/prompt.js';
|
|
11
|
-
import {
|
|
12
|
-
import { getCurrentVersion, backupCompose, applyAndRestart, postgresVersionGuard, dockerCleanup, applyIpv6IfEnabled } from '../lib/update.js';
|
|
10
|
+
import { preflightSteps, executeSteps, runStepsCli } from '../lib/update-steps.js';
|
|
13
11
|
import * as out from '../utils/output.js';
|
|
14
12
|
export function registerUpdateCommand(program) {
|
|
15
13
|
program
|
|
@@ -21,11 +19,6 @@ export function registerUpdateCommand(program) {
|
|
|
21
19
|
.option('--no-cleanup', 'Skip Docker cleanup after update')
|
|
22
20
|
.option('--ipv6', 'Enable IPv6 support')
|
|
23
21
|
.action(async (versionArg, opts) => {
|
|
24
|
-
const { installDir, composeFile } = getPaths();
|
|
25
|
-
// Self-update CLI first
|
|
26
|
-
await selfUpdate();
|
|
27
|
-
console.log();
|
|
28
|
-
await generateSelfSignedCerts();
|
|
29
22
|
// Resolve version
|
|
30
23
|
let version = versionArg;
|
|
31
24
|
if (!version && opts.latest) {
|
|
@@ -42,35 +35,18 @@ export function registerUpdateCommand(program) {
|
|
|
42
35
|
console.log(`Current version: ${currentVersion}`);
|
|
43
36
|
console.log(`Target version: ${version}`);
|
|
44
37
|
console.log();
|
|
45
|
-
//
|
|
46
|
-
if (isVersionGte(version, '0.8.4') && !opts.forceUpgrade) {
|
|
47
|
-
console.log(`Checking RAM requirements for version ${version}...`);
|
|
48
|
-
const ram = await checkRam();
|
|
49
|
-
if (!ram.ok) {
|
|
50
|
-
out.errorBox('Insufficient RAM', [
|
|
51
|
-
`Version 0.8.4+ requires 8GB RAM (detected: ${ram.totalMb}MB)`,
|
|
52
|
-
`Use --force-upgrade to proceed anyway.`,
|
|
53
|
-
]);
|
|
54
|
-
process.exit(1);
|
|
55
|
-
}
|
|
56
|
-
out.ok('RAM requirement met');
|
|
57
|
-
console.log();
|
|
58
|
-
}
|
|
59
|
-
// Disk check
|
|
38
|
+
// Preflight checks (shared with TUI)
|
|
60
39
|
if (!opts.forceUpgrade) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
]);
|
|
40
|
+
try {
|
|
41
|
+
await runStepsCli(preflightSteps(version));
|
|
42
|
+
console.log();
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
out.fail('Pre-flight checks failed. Use --force-upgrade to proceed anyway.');
|
|
68
46
|
process.exit(1);
|
|
69
47
|
}
|
|
70
|
-
out.ok('Sufficient disk space available');
|
|
71
|
-
console.log();
|
|
72
48
|
}
|
|
73
|
-
// Docker version
|
|
49
|
+
// Docker version upgrade (CLI-only: auto-upgrades via dnf)
|
|
74
50
|
console.log('Checking Docker version...');
|
|
75
51
|
const dockerVer = await getDockerVersion();
|
|
76
52
|
if (dockerVer === null) {
|
|
@@ -90,7 +66,7 @@ export function registerUpdateCommand(program) {
|
|
|
90
66
|
else {
|
|
91
67
|
out.ok(`Docker version ${dockerVer} is supported`);
|
|
92
68
|
}
|
|
93
|
-
// Ensure Node.js 20.x
|
|
69
|
+
// Ensure Node.js 20.x (CLI-only: auto-installs via dnf)
|
|
94
70
|
console.log();
|
|
95
71
|
console.log('Ensuring Node.js 20.x is installed...');
|
|
96
72
|
try {
|
|
@@ -113,40 +89,10 @@ export function registerUpdateCommand(program) {
|
|
|
113
89
|
await execa('sudo', ['dnf', 'install', '-y', 'nodejs'], { stdout: 'inherit', stderr: 'inherit' });
|
|
114
90
|
out.ok('Node.js 20.x installed');
|
|
115
91
|
}
|
|
116
|
-
catch
|
|
92
|
+
catch {
|
|
117
93
|
out.warn('Could not install Node.js automatically. Please install Node.js 20+ manually.');
|
|
118
94
|
}
|
|
119
95
|
}
|
|
120
|
-
// Backup current compose
|
|
121
|
-
const backupName = await backupCompose();
|
|
122
|
-
if (backupName !== 'no existing file') {
|
|
123
|
-
console.log('Existing docker-compose.yml backed up.');
|
|
124
|
-
}
|
|
125
|
-
// Download bundle
|
|
126
|
-
console.log();
|
|
127
|
-
await downloadBundle(version);
|
|
128
|
-
console.log();
|
|
129
|
-
// Check image availability
|
|
130
|
-
const tempFile = join(installDir, 'temp-docker-compose.yml');
|
|
131
|
-
if (!opts.forceUpgrade) {
|
|
132
|
-
if (!await checkImageAvailability(tempFile)) {
|
|
133
|
-
out.errorBox('Cannot proceed with upgrade', [
|
|
134
|
-
'Some images are not available.',
|
|
135
|
-
'Use --force-upgrade to proceed anyway.',
|
|
136
|
-
]);
|
|
137
|
-
process.exit(1);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
// Pull images
|
|
141
|
-
console.log('Pulling Docker images...');
|
|
142
|
-
await compose(['-f', tempFile, 'pull']);
|
|
143
|
-
out.ok('All images pulled successfully');
|
|
144
|
-
// Show versions
|
|
145
|
-
console.log();
|
|
146
|
-
console.log('Image versions to be deployed:');
|
|
147
|
-
const images = await extractImages(tempFile);
|
|
148
|
-
for (const img of images)
|
|
149
|
-
console.log(` - ${img}`);
|
|
150
96
|
console.log();
|
|
151
97
|
console.log(`Upgrading from ${currentVersion} to ${version}`);
|
|
152
98
|
// Interactive abort
|
|
@@ -156,26 +102,18 @@ export function registerUpdateCommand(program) {
|
|
|
156
102
|
return;
|
|
157
103
|
}
|
|
158
104
|
}
|
|
159
|
-
//
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
console.log(' Auto-pinning for safety. To upgrade later: ct postgres upgrade 17');
|
|
165
|
-
}
|
|
166
|
-
// Apply and restart
|
|
167
|
-
await applyAndRestart();
|
|
168
|
-
console.log('New docker-compose.yml applied. Services restarting.');
|
|
169
|
-
// Re-apply IPv6 if preference is enabled
|
|
170
|
-
const appliedIpv6 = await applyIpv6IfEnabled();
|
|
171
|
-
if (appliedIpv6) {
|
|
172
|
-
console.log('IPv6 dual-stack re-applied per preferences.');
|
|
105
|
+
// Run shared execute pipeline (certs, backup, download, pull, PG guard, apply, IPv6, cleanup)
|
|
106
|
+
let steps = executeSteps(version);
|
|
107
|
+
// Apply CLI-specific flags
|
|
108
|
+
if (opts.forceUpgrade) {
|
|
109
|
+
steps = steps.filter(s => s.label !== 'Check image availability');
|
|
173
110
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
console.log('Cleaning up unused Docker resources...');
|
|
177
|
-
await dockerCleanup();
|
|
111
|
+
if (opts.cleanup === false) {
|
|
112
|
+
steps = steps.filter(s => s.label !== 'Cleanup unused resources');
|
|
178
113
|
}
|
|
114
|
+
console.log();
|
|
115
|
+
await runStepsCli(steps);
|
|
116
|
+
console.log();
|
|
179
117
|
out.successBox('Update complete!');
|
|
180
118
|
});
|
|
181
119
|
program
|
|
@@ -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,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,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,10 +1,20 @@
|
|
|
1
|
+
export interface UpdateCliOptions {
|
|
2
|
+
/** When true, runs silently using debug() logging only. Default: false. */
|
|
3
|
+
silent?: boolean;
|
|
4
|
+
}
|
|
1
5
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
6
|
+
* Update the CLI via npm. Used for both interactive `ct self-update` and
|
|
7
|
+
* background auto-update. The `silent` option controls output:
|
|
4
8
|
*
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
7
|
-
*
|
|
9
|
+
* - silent=false (default): console.log output for interactive use
|
|
10
|
+
* - silent=true: debug() logging only, all errors swallowed
|
|
11
|
+
*
|
|
12
|
+
* Both modes: tries user-level install first, falls back to sudo on EACCES.
|
|
13
|
+
*/
|
|
14
|
+
export declare function updateCli(currentVersion: string, opts?: UpdateCliOptions): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Background auto-update (silent). Kept as a convenience alias
|
|
17
|
+
* so existing callers don't need to change.
|
|
8
18
|
*/
|
|
9
19
|
export declare function checkAndAutoUpdate(currentVersion: string): Promise<void>;
|
|
10
20
|
//# sourceMappingURL=auto-update.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/lib/auto-update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/lib/auto-update.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ElG;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E"}
|