@devalade/shipnode 2.0.3 → 2.0.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/deploy.ts"],"names":[],"mappings":"AAMA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB/H"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/deploy.ts"],"names":[],"mappings":"AAOA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B/H"}
@@ -1,3 +1,4 @@
1
+ import chalk from 'chalk';
1
2
  import { loadConfig } from '../../config/loader.js';
2
3
  import { DeployService } from '../../services/deploy.service.js';
3
4
  import { runRemoteCommand } from '../runner.js';
@@ -9,87 +10,77 @@ export async function cmdDeploy(cwd, options) {
9
10
  return;
10
11
  }
11
12
  await runRemoteCommand(cwd, async ({ config, executor }) => {
12
- ui.info(`Deploying ${config.app} to ${config.ssh.user}@${config.ssh.host}...`);
13
- ui.info('Connecting to server...');
14
- ui.success('Connected');
13
+ ui.banner();
14
+ const spin = ui.spinner();
15
+ spin.start(`Deploying ${chalk.bold(config.pm2?.name ?? config.app)} → ${config.ssh.user}@${config.ssh.host}`);
15
16
  const deployer = new DeployService(executor, config, cwd);
16
17
  await deployer.execute(options.skipBuild ?? false);
17
- ui.success('Deployment complete');
18
+ spin.stop(`Deployed ${chalk.bold(config.pm2?.name ?? config.app)}`);
19
+ const lines = [
20
+ `host ${config.ssh.user}@${config.ssh.host}`,
21
+ config.domain ? `url https://${config.domain}` : '',
22
+ ].filter(Boolean).join('\n');
23
+ ui.note(lines, 'Done');
24
+ ui.outro('Run shipnode status to check your app.');
18
25
  }, { configPath: options.config });
19
26
  }
20
27
  function printDryRun(config, skipBuild) {
21
- console.log('\n===========================================');
22
- console.log(' DEPLOYMENT DRY RUN MODE');
23
- console.log('===========================================\n');
24
- console.log('Configuration:');
25
- console.log(` App Type: ${config.app}`);
26
- console.log(` SSH User: ${config.ssh.user}`);
27
- console.log(` SSH Host: ${config.ssh.host}`);
28
- console.log(` SSH Port: ${config.ssh.port}`);
29
- console.log(` Remote Path: ${config.remotePath}`);
30
- console.log(` Zero Downtime: ${config.zeroDowntime}`);
28
+ ui.banner();
29
+ const serverRows = [
30
+ ['App type', config.app],
31
+ ['Host', `${config.ssh.user}@${config.ssh.host}:${config.ssh.port}`],
32
+ ['Remote path', config.remotePath],
33
+ ['Mode', config.zeroDowntime ? `zero-downtime (keep ${config.keepReleases})` : 'legacy'],
34
+ ];
31
35
  if (config.app === 'backend') {
32
- console.log(` PM2 App Name: ${config.pm2?.name ?? 'N/A'}`);
33
- console.log(` Backend Port: ${config.backend?.port ?? 3000}`);
36
+ if (config.pm2?.name)
37
+ serverRows.push(['PM2 name', config.pm2.name]);
38
+ serverRows.push(['Port', String(config.backend?.port ?? 3000)]);
34
39
  }
35
- if (config.domain) {
36
- console.log(` Domain: ${config.domain}`);
37
- }
38
- console.log('\nLocal Build Commands:');
40
+ if (config.domain)
41
+ serverRows.push(['Domain', config.domain]);
42
+ const buildRows = [];
39
43
  if (skipBuild) {
40
- console.log(' [SKIPPED via --skip-build flag]');
44
+ buildRows.push(['', chalk.dim('skipped (--skip-build)')]);
41
45
  }
42
46
  else if (config.app === 'frontend') {
43
- console.log(' 1. npm run build (or detected package manager)');
44
- console.log(' 2. Detected build output: dist/');
47
+ buildRows.push(['', 'npm run build']);
48
+ buildRows.push(['output', config.buildDir ?? 'dist/ (auto-detected)']);
45
49
  }
46
50
  else {
47
- console.log(' [Backend builds happen on remote server]');
48
- }
49
- console.log('\nRemote Deployment Commands:');
50
- if (config.zeroDowntime) {
51
- console.log(' Mode: Zero-Downtime Deployment');
52
- console.log('\n Deployment Flow:');
53
- console.log(' 1. Acquire deployment lock');
54
- console.log(' 2. Create new release directory');
55
- console.log(' 3. Setup release structure');
56
- console.log(' 4. Rsync local files to release directory');
57
- console.log(' 5. Link shared resources');
58
- console.log(' 6. Install dependencies');
59
- if (config.app === 'backend') {
60
- console.log(' 7. Run pre-deploy hook (if configured)');
61
- console.log(' 8. Atomic symlink switch');
62
- console.log(' 9. Reload PM2');
63
- console.log(' 10. Health check');
64
- console.log(' 11. Record release');
65
- console.log(' 12. Cleanup old releases');
66
- console.log(' 13. Run post-deploy hook (if configured)');
67
- console.log(' 14. Release deployment lock');
68
- }
69
- else {
70
- console.log(' 7. Atomic symlink switch');
71
- console.log(' 8. Record release');
72
- console.log(' 9. Cleanup old releases');
73
- console.log(' 10. Run post-deploy hook (if configured)');
74
- console.log(' 11. Release deployment lock');
75
- }
76
- }
77
- else {
78
- console.log(' Mode: Legacy Deployment (Non-Zero-Downtime)');
79
- console.log('\n Deployment Steps:');
80
- console.log(' 1. Rsync files to remote path');
81
- console.log(' 2. Install dependencies');
82
- if (config.app === 'backend') {
83
- console.log(' 3. Reload PM2');
84
- }
85
- console.log(' 4. Run post-deploy hook (if configured)');
86
- }
87
- if (config.domain) {
88
- console.log('\nCaddy Configuration:');
89
- console.log(` - Reverse proxy: ${config.domain} -> localhost:${config.backend?.port ?? 3000}`);
51
+ buildRows.push(['', chalk.dim('runs on remote server')]);
90
52
  }
91
- console.log('\n===========================================');
92
- console.log(' DRY RUN COMPLETE - No changes made');
93
- console.log('===========================================\n');
53
+ const steps = config.zeroDowntime
54
+ ? [
55
+ 'Acquire deploy lock',
56
+ 'Create release directory',
57
+ 'Rsync files',
58
+ 'Install dependencies',
59
+ config.hooks?.preDeploy ? 'Run preDeploy hook' : '',
60
+ 'Switch symlink (atomic)',
61
+ config.app === 'backend' ? 'Reload PM2' : '',
62
+ config.healthCheck.enabled ? `Health check ${config.healthCheck.path}` : '',
63
+ 'Record release',
64
+ 'Clean old releases',
65
+ config.hooks?.postDeploy ? 'Run postDeploy hook' : '',
66
+ 'Release lock',
67
+ ].filter(Boolean)
68
+ : [
69
+ 'Rsync files',
70
+ 'Install dependencies',
71
+ config.app === 'backend' ? 'Reload PM2' : '',
72
+ config.hooks?.postDeploy ? 'Run postDeploy hook' : '',
73
+ ].filter(Boolean);
74
+ const flowRows = steps.map((s, i) => [`${i + 1}.`, s]);
75
+ ui.note([
76
+ chalk.bold('Server'),
77
+ ...serverRows.map(([k, v]) => ` ${chalk.dim(k.padEnd(12))} ${v}`),
78
+ '',
79
+ chalk.bold('Build'),
80
+ ...buildRows.map(([k, v]) => ` ${chalk.dim(k.padEnd(12))} ${v}`),
81
+ '',
82
+ chalk.bold('Deploy flow'),
83
+ ...flowRows.map(([k, v]) => ` ${chalk.dim(k.padEnd(4))} ${v}`),
84
+ ].join('\n'), 'Dry run — no changes will be made');
94
85
  }
95
86
  //# sourceMappingURL=deploy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/cli/commands/deploy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/cli/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/help.ts"],"names":[],"mappings":"AAEA,wBAAgB,OAAO,IAAI,IAAI,CAgG9B"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/help.ts"],"names":[],"mappings":"AAGA,wBAAgB,OAAO,IAAI,IAAI,CAgG9B"}
@@ -1,7 +1,8 @@
1
1
  import chalk from 'chalk';
2
+ import { ui } from '../ui.js';
2
3
  export function cmdHelp() {
3
- console.log(`
4
- ${chalk.bold.blue('ShipNode')} v2.0.0 - Deploy Node.js apps to a single VPS
4
+ ui.banner();
5
+ console.log(`${chalk.bold.blue('ShipNode')} Deploy Node.js apps to a single VPS
5
6
 
6
7
  ${chalk.bold('USAGE')}
7
8
  shipnode <command> [options]
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/cli/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,OAAO;IACrB,OAAO,CAAC,GAAG,CAAC;EACZ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;;EAE3B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;;EAGnB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IAChB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IACnB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;IACpB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;IACrB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;IACrB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;;EAEvB,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;IAC9B,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;IACvB,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;;EAExB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;IACvB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;IAClB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;;EAEpB,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;IAC9B,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IACnB,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;IACtB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IACnB,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;;EAExB,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC;IAClC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;IACrB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;;EAEvB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IACjB,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;IACxB,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;IACxB,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;;EAE5B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;IAClB,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC;IAC3B,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;IACzB,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC;IAC5B,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;;EAE5B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;IACtB,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC;IAC9B,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC;IAC/B,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC;;EAElC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IACjB,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;IACxB,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;;EAE5B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;IACzB,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;IAC1B,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC;IAC9B,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;;EAE5B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;IACzB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;IACpB,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;;EAExB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;;;;;;;;;;EAUrB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;IACpB,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;;;IAG3B,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC;;;IAGpC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC;;;IAGvC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC;;;IAG/C,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC;;;IAGrC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC;;;IAGvC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC;;;EAGvC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;;CAE5B,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/cli/commands/help.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAoBA,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2GhH"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAiBA,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0MhH"}
@@ -1,22 +1,18 @@
1
- import { writeFile, readFile as readFileNode } from 'node:fs/promises';
1
+ import { writeFile, readFile as readFileNode, chmod } from 'node:fs/promises';
2
2
  import { ensureDir, pathExists } from 'fs-extra';
3
3
  import { resolve } from 'path';
4
- import { createInterface } from 'readline';
4
+ import { text, select, confirm, isCancel, group } from '@clack/prompts';
5
5
  import { detectFramework, detectPkgManager } from '../../domain/framework/detector.js';
6
6
  import { isValidIpOrHostname, isValidPort } from '../../domain/validation/ip.js';
7
7
  import { ORM_PATTERNS } from '../../shared/constants.js';
8
8
  import { ui } from '../ui.js';
9
- const rl = createInterface({ input: process.stdin, output: process.stdout });
10
- function ask(question, defaultValue) {
11
- return new Promise((resolve) => {
12
- const prompt = defaultValue ? `${question} (${defaultValue}): ` : `${question}: `;
13
- rl.question(prompt, (answer) => {
14
- resolve(answer.trim() || defaultValue || '');
15
- });
16
- });
9
+ function cancelIfNeeded(v) {
10
+ if (isCancel(v)) {
11
+ ui.warn('Cancelled.');
12
+ process.exit(0);
13
+ }
17
14
  }
18
15
  export async function cmdInit(cwd, options) {
19
- ui.info('Initializing ShipNode configuration...');
20
16
  const detection = await detectFramework(cwd);
21
17
  const pkgManager = await detectPkgManager(cwd);
22
18
  const isBackend = detection.appType === 'backend';
@@ -34,8 +30,7 @@ export async function cmdInit(cwd, options) {
34
30
  return;
35
31
  }
36
32
  const configPath = resolve(cwd, 'shipnode.config.ts');
37
- const exists = await pathExists(configPath);
38
- if (exists) {
33
+ if (await pathExists(configPath)) {
39
34
  ui.warn('shipnode.config.ts already exists. Use --force to overwrite.');
40
35
  return;
41
36
  }
@@ -44,66 +39,156 @@ export async function cmdInit(cwd, options) {
44
39
  await generateShipnodeDir(cwd, detection.orm);
45
40
  return;
46
41
  }
47
- ui.info(`Detected: ${detection.name} (${detection.appType})`);
48
- if (detection.orm) {
49
- ui.info(`ORM: ${detection.orm}`);
50
- }
51
- const appType = await ask('App type', isBackend ? 'backend' : 'frontend');
52
- const sshHost = await ask('SSH host');
42
+ ui.banner();
43
+ ui.note(`Detected: ${detection.name} (${detection.appType})` +
44
+ (detection.orm ? `\nORM: ${detection.orm}` : ''), 'Project');
45
+ // ── Server ─────────────────────────────────────────────────────
46
+ const appTypeVal = await select({
47
+ message: 'App type',
48
+ initialValue: isBackend ? 'backend' : 'frontend',
49
+ options: [
50
+ { value: 'backend', label: 'Backend', hint: 'Node.js server, PM2 managed' },
51
+ { value: 'frontend', label: 'Frontend', hint: 'Static files, served by Caddy' },
52
+ ],
53
+ });
54
+ cancelIfNeeded(appTypeVal);
55
+ const appType = appTypeVal;
56
+ const sshHost = await text({ message: 'SSH host', placeholder: '1.2.3.4' });
57
+ cancelIfNeeded(sshHost);
53
58
  if (!isValidIpOrHostname(sshHost)) {
54
59
  ui.error('Invalid host. Must be an IP address or hostname.');
55
60
  process.exit(1);
56
61
  }
57
- const sshUser = await ask('SSH user', 'deploy');
58
- const sshPortStr = await ask('SSH port', '22');
62
+ const sshUser = await text({ message: 'SSH user', initialValue: 'deploy' });
63
+ cancelIfNeeded(sshUser);
64
+ const sshPortStr = await text({ message: 'SSH port', initialValue: '22' });
65
+ cancelIfNeeded(sshPortStr);
59
66
  const sshPort = parseInt(sshPortStr, 10);
60
67
  if (!isValidPort(sshPort)) {
61
68
  ui.error('Invalid port number.');
62
69
  process.exit(1);
63
70
  }
64
- const remotePath = await ask('Remote deploy path', `/var/www/${appName}`);
71
+ const remotePath = await text({ message: 'Remote deploy path', initialValue: `/var/www/${appName}` });
72
+ cancelIfNeeded(remotePath);
65
73
  let pm2Name = '';
66
74
  let backendPort = defaultPort;
67
75
  let domain = '';
68
76
  let zeroDowntime = true;
69
77
  let healthCheckPath = '/health';
78
+ let dbType;
79
+ let dbHost;
80
+ let dbPort;
81
+ let dbName;
82
+ let dbUser;
83
+ let dbPassword;
70
84
  if (appType === 'backend') {
71
- pm2Name = await ask('PM2 app name', appName);
72
- backendPort = parseInt(await ask('Backend port', String(defaultPort)), 10);
73
- domain = await ask('Domain (optional)', '');
74
- const zd = await ask('Enable zero-downtime deployments?', 'yes');
75
- zeroDowntime = zd.toLowerCase().startsWith('y');
85
+ const pm2Val = await text({ message: 'PM2 app name', initialValue: appName });
86
+ cancelIfNeeded(pm2Val);
87
+ pm2Name = pm2Val;
88
+ const portVal = await text({ message: 'Backend port', initialValue: String(defaultPort) });
89
+ cancelIfNeeded(portVal);
90
+ backendPort = parseInt(portVal, 10);
91
+ const domainVal = await text({ message: 'Domain', placeholder: 'api.example.com (optional)' });
92
+ cancelIfNeeded(domainVal);
93
+ domain = domainVal;
94
+ const zdVal = await confirm({ message: 'Enable zero-downtime deployments?' });
95
+ cancelIfNeeded(zdVal);
96
+ zeroDowntime = zdVal;
76
97
  if (zeroDowntime) {
77
- healthCheckPath = await ask('Health check path', '/health');
98
+ const hcVal = await text({ message: 'Health check path', initialValue: '/health' });
99
+ cancelIfNeeded(hcVal);
100
+ healthCheckPath = hcVal;
101
+ }
102
+ const hasDb = await confirm({ message: 'Configure a database?', initialValue: false });
103
+ cancelIfNeeded(hasDb);
104
+ if (hasDb) {
105
+ const dbTypeVal = await select({
106
+ message: 'Database type',
107
+ options: [
108
+ { value: 'postgres', label: 'PostgreSQL', hint: 'port 5432' },
109
+ { value: 'mysql', label: 'MySQL', hint: 'port 3306' },
110
+ { value: 'sqlite', label: 'SQLite', hint: 'file-based' },
111
+ { value: 'mongodb', label: 'MongoDB', hint: 'port 27017' },
112
+ ],
113
+ });
114
+ cancelIfNeeded(dbTypeVal);
115
+ dbType = dbTypeVal;
116
+ if (dbType !== 'sqlite') {
117
+ const defaultDbPort = dbType === 'postgres' ? '5432' : dbType === 'mysql' ? '3306' : '27017';
118
+ const dbVals = await group({
119
+ dbHost: () => text({ message: 'Database host', initialValue: 'localhost' }),
120
+ dbPort: () => text({ message: 'Database port', initialValue: defaultDbPort }),
121
+ dbName: () => text({ message: 'Database name', initialValue: appName }),
122
+ dbUser: () => text({ message: 'Database user', initialValue: appName }),
123
+ dbPassword: () => text({ message: 'Database password', placeholder: 'optional' }),
124
+ });
125
+ dbHost = dbVals.dbHost;
126
+ dbPort = parseInt(dbVals.dbPort, 10);
127
+ dbName = dbVals.dbName;
128
+ dbUser = dbVals.dbUser;
129
+ dbPassword = dbVals.dbPassword || undefined;
130
+ }
131
+ else {
132
+ const sqliteVal = await text({ message: 'SQLite file path', initialValue: './data.db' });
133
+ cancelIfNeeded(sqliteVal);
134
+ dbName = sqliteVal;
135
+ }
78
136
  }
79
137
  }
80
138
  else {
81
- domain = await ask('Domain (optional)', '');
139
+ const domainVal = await text({ message: 'Domain', placeholder: 'example.com (optional)' });
140
+ cancelIfNeeded(domainVal);
141
+ domain = domainVal;
142
+ }
143
+ // ── Users ──────────────────────────────────────────────────────
144
+ const users = [];
145
+ const addUsers = await confirm({ message: 'Add SSH users to the server?', initialValue: false });
146
+ cancelIfNeeded(addUsers);
147
+ if (addUsers) {
148
+ let addMore = true;
149
+ while (addMore) {
150
+ const username = await text({ message: 'Username' });
151
+ cancelIfNeeded(username);
152
+ if (!username)
153
+ break;
154
+ const publicKey = await text({ message: `Public key for ${username}`, placeholder: 'ssh-ed25519 AAAA...' });
155
+ cancelIfNeeded(publicKey);
156
+ const sudo = await confirm({ message: `Grant sudo to ${username}?`, initialValue: false });
157
+ cancelIfNeeded(sudo);
158
+ users.push({ username: username, publicKey: publicKey, sudo: sudo });
159
+ const more = await confirm({ message: 'Add another user?', initialValue: false });
160
+ cancelIfNeeded(more);
161
+ addMore = more;
162
+ }
82
163
  }
83
- rl.close();
84
164
  const config = generateConfig({
85
165
  app: appType,
86
166
  appName,
87
- sshHost,
88
- sshUser,
167
+ sshHost: sshHost,
168
+ sshUser: sshUser,
89
169
  sshPort,
90
- remotePath,
170
+ remotePath: remotePath,
91
171
  pm2Name,
92
172
  backendPort,
93
173
  domain: domain || undefined,
94
174
  zeroDowntime,
95
175
  healthCheckPath,
96
176
  pkgManager: pkgManager ?? undefined,
177
+ dbType,
178
+ dbHost,
179
+ dbPort,
180
+ dbName,
181
+ dbUser,
182
+ dbPassword: dbPassword || undefined,
97
183
  });
98
184
  const configPath = resolve(cwd, 'shipnode.config.ts');
99
- const exists = await pathExists(configPath);
100
- if (exists) {
185
+ if (await pathExists(configPath)) {
101
186
  ui.warn('shipnode.config.ts already exists. Use --force to overwrite.');
102
187
  return;
103
188
  }
104
189
  await writeFile(configPath, config, 'utf-8');
105
- ui.success('Created shipnode.config.ts');
106
- await generateShipnodeDir(cwd, detection.orm);
190
+ await generateShipnodeDir(cwd, detection.orm, users);
191
+ ui.outro('Ready! Run shipnode setup to provision your server.');
107
192
  }
108
193
  async function getAppName(cwd) {
109
194
  try {
@@ -119,7 +204,7 @@ async function getAppName(cwd) {
119
204
  }
120
205
  return cwd.split('/').pop() ?? 'myapp';
121
206
  }
122
- async function generateShipnodeDir(cwd, detectedOrm) {
207
+ async function generateShipnodeDir(cwd, detectedOrm, users = []) {
123
208
  const dir = resolve(cwd, '.shipnode');
124
209
  await ensureDir(dir);
125
210
  const preDeployPath = resolve(dir, 'pre-deploy.sh');
@@ -127,15 +212,25 @@ async function generateShipnodeDir(cwd, detectedOrm) {
127
212
  const ignorePath = resolve(cwd, '.shipnodeignore');
128
213
  if (!(await pathExists(preDeployPath))) {
129
214
  await writeFile(preDeployPath, generatePreDeployHook(detectedOrm), 'utf-8');
130
- await import('fs/promises').then((fs) => fs.chmod(preDeployPath, 0o755));
215
+ await chmod(preDeployPath, 0o755);
131
216
  }
132
217
  if (!(await pathExists(postDeployPath))) {
133
218
  await writeFile(postDeployPath, generatePostDeployHook(), 'utf-8');
134
- await import('fs/promises').then((fs) => fs.chmod(postDeployPath, 0o755));
219
+ await chmod(postDeployPath, 0o755);
135
220
  }
136
221
  if (!(await pathExists(ignorePath))) {
137
222
  await writeFile(ignorePath, generateShipnodeIgnore(), 'utf-8');
138
223
  }
224
+ if (users.length > 0) {
225
+ const usersPath = resolve(dir, 'users.yml');
226
+ const yaml = users.map((u) => [
227
+ `- username: ${u.username}`,
228
+ ` publicKey: ${u.publicKey}`,
229
+ ` sudo: ${u.sudo}`,
230
+ ].join('\n')).join('\n') + '\n';
231
+ await writeFile(usersPath, yaml, 'utf-8');
232
+ ui.success(`Created .shipnode/users.yml with ${users.length} user(s)`);
233
+ }
139
234
  const ormMsg = detectedOrm ? ` with ${detectedOrm} commands` : '';
140
235
  ui.success(`Generated .shipnode/ hooks${ormMsg} and .shipnodeignore`);
141
236
  }
@@ -214,8 +309,7 @@ function generateConfig(opts) {
214
309
  sshOpts.push(`host: '${opts.sshHost}'`);
215
310
  if (opts.sshUser)
216
311
  sshOpts.push(`user: '${opts.sshUser}'`);
217
- if (opts.sshPort && opts.sshPort !== 22)
218
- sshOpts.push(`port: ${opts.sshPort}`);
312
+ sshOpts.push(`port: ${opts.sshPort ?? 22}`);
219
313
  if (sshOpts.length > 0) {
220
314
  lines.push(` .ssh({ ${sshOpts.join(', ')} })`);
221
315
  }
@@ -225,8 +319,8 @@ function generateConfig(opts) {
225
319
  if (opts.pm2Name) {
226
320
  lines.push(` .pm2('${opts.pm2Name}')`);
227
321
  }
228
- if (opts.backendPort && opts.backendPort !== 3000) {
229
- lines.push(` .port(${opts.backendPort})`);
322
+ if (opts.app === 'backend') {
323
+ lines.push(` .port(${opts.backendPort ?? 3000})`);
230
324
  }
231
325
  if (opts.domain) {
232
326
  lines.push(` .domain('${opts.domain}')`);
@@ -234,12 +328,29 @@ function generateConfig(opts) {
234
328
  if (opts.zeroDowntime !== false) {
235
329
  lines.push(' .zeroDowntime()');
236
330
  }
237
- if (opts.healthCheckPath && opts.healthCheckPath !== '/health') {
331
+ if (opts.healthCheckPath) {
238
332
  lines.push(` .healthCheck('${opts.healthCheckPath}')`);
239
333
  }
240
- else if (opts.healthCheckPath) {
241
- lines.push(` .healthCheck('${opts.healthCheckPath}')`);
334
+ if (opts.pkgManager) {
335
+ lines.push(` .pkgManager('${opts.pkgManager}')`);
336
+ }
337
+ if (opts.dbType) {
338
+ if (opts.dbType === 'sqlite') {
339
+ lines.push(` .database({ type: 'sqlite', host: 'localhost', port: 0, name: '${opts.dbName ?? './data.db'}', user: '' })`);
340
+ }
341
+ else {
342
+ const dbOpts = [
343
+ `type: '${opts.dbType}'`,
344
+ `host: '${opts.dbHost ?? 'localhost'}'`,
345
+ `port: ${opts.dbPort ?? 5432}`,
346
+ `name: '${opts.dbName ?? ''}'`,
347
+ `user: '${opts.dbUser ?? ''}'`,
348
+ ...(opts.dbPassword ? [`password: process.env.DB_PASSWORD ?? '${opts.dbPassword}'`] : [`// password: process.env.DB_PASSWORD`]),
349
+ ];
350
+ lines.push(` .database({ ${dbOpts.join(', ')} })`);
351
+ }
242
352
  }
353
+ lines.push(' .build();');
243
354
  lines.push('');
244
355
  return lines.join('\n');
245
356
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAGA,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqEvF"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAMA,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAavF"}
@@ -1,46 +1,61 @@
1
+ import { Listr } from 'listr2';
1
2
  import { runRemoteCommand } from '../runner.js';
2
3
  import { ui } from '../ui.js';
3
4
  export async function cmdSetup(cwd, options) {
4
5
  await runRemoteCommand(cwd, async ({ config, executor }) => {
5
- const nodeVersion = config.nodeVersion === 'lts' ? '24' : config.nodeVersion;
6
- const mise = `export PATH="$HOME/.local/bin:$HOME/.local/share/mise/shims:$PATH"`;
7
- ui.info(`Setting up server ${config.ssh.user}@${config.ssh.host}...`);
8
- ui.info('Installing system dependencies...');
9
- await executor.exec('SUDO=""; [ "$EUID" -ne 0 ] && SUDO="sudo"; ' +
10
- '$SUDO apt-get update -qq && ' +
11
- '$SUDO apt-get install -y curl git jq rsync build-essential');
12
- ui.success('System dependencies installed');
13
- ui.info('Installing Mise (version manager)...');
14
- await executor.exec(`if ! command -v mise &>/dev/null; then curl -fsSL https://mise.run | sh; fi`);
15
- ui.success('Mise ready');
16
- ui.info(`Installing Node.js ${nodeVersion}...`);
17
- await executor.exec(`${mise}; ` +
18
- `mise install -y "node@${nodeVersion}"; ` +
19
- `mise use -g -y "node@${nodeVersion}"`);
20
- ui.success(`Node.js ${nodeVersion} installed`);
21
- ui.info('Installing PM2...');
22
- await executor.exec(`${mise}; ` +
23
- `if ! mise exec "node@${nodeVersion}" -- pm2 --version &>/dev/null; then ` +
24
- ` mise exec "node@${nodeVersion}" -- npm install -g pm2; ` +
25
- `fi; ` +
26
- `mise exec "node@${nodeVersion}" -- pm2 startup systemd -u $USER --hp $HOME || true; ` +
27
- `mise exec "node@${nodeVersion}" -- pm2 save --force || true`);
28
- ui.success('PM2 ready');
29
- ui.info('Installing Caddy...');
30
- await executor.exec('SUDO=""; [ "$EUID" -ne 0 ] && SUDO="sudo"; ' +
31
- 'if ! command -v caddy &>/dev/null; then ' +
32
- ' $SUDO apt-get install -y debian-keyring debian-archive-keyring apt-transport-https; ' +
33
- ' curl -1sLf "https://dl.cloudsmith.io/public/caddy/stable/gpg.key" | $SUDO gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg; ' +
34
- ' curl -1sLf "https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt" | $SUDO tee /etc/apt/sources.list.d/caddy-stable.list; ' +
35
- ' $SUDO apt-get update && $SUDO apt-get install -y caddy; ' +
36
- 'fi');
37
- ui.success('Caddy ready');
38
- ui.info('Creating deployment directories...');
39
- await executor.exec(`mkdir -p "${config.remotePath}/releases" "${config.remotePath}/shared" "${config.remotePath}/.shipnode"`);
40
- await executor.exec('SUDO=""; [ "$EUID" -ne 0 ] && SUDO="sudo"; ' +
41
- '$SUDO mkdir -p /etc/caddy/conf.d /var/log/caddy');
42
- ui.success('Directories created');
43
- ui.success(`Server ready — run: shipnode deploy`);
6
+ ui.banner();
7
+ ui.step(`Setting up ${config.ssh.user}@${config.ssh.host}`);
8
+ await buildTasks(executor, config).run();
9
+ ui.outro('Server ready — run: shipnode deploy');
44
10
  }, { configPath: options.config });
45
11
  }
12
+ function buildTasks(executor, config) {
13
+ const nodeVersion = config.nodeVersion === 'lts' ? '24' : config.nodeVersion;
14
+ const mise = `export PATH="$HOME/.local/bin:$HOME/.local/share/mise/shims:$PATH"`;
15
+ return new Listr([
16
+ {
17
+ title: 'System dependencies',
18
+ task: () => executor.exec('SUDO=""; [ "$EUID" -ne 0 ] && SUDO="sudo"; ' +
19
+ '$SUDO apt-get update -qq && ' +
20
+ '$SUDO apt-get install -y curl git jq rsync build-essential'),
21
+ },
22
+ {
23
+ title: 'Mise (version manager)',
24
+ task: () => executor.exec(`if ! command -v mise &>/dev/null; then curl -fsSL https://mise.run | sh; fi`),
25
+ },
26
+ {
27
+ title: `Node.js ${nodeVersion}`,
28
+ task: () => executor.exec(`${mise}; ` +
29
+ `mise install -y "node@${nodeVersion}"; ` +
30
+ `mise use -g -y "node@${nodeVersion}"`),
31
+ },
32
+ {
33
+ title: 'PM2',
34
+ task: () => executor.exec(`${mise}; ` +
35
+ `if ! mise exec "node@${nodeVersion}" -- pm2 --version &>/dev/null; then ` +
36
+ ` mise exec "node@${nodeVersion}" -- npm install -g pm2; ` +
37
+ `fi; ` +
38
+ `mise exec "node@${nodeVersion}" -- pm2 startup systemd -u $USER --hp $HOME || true; ` +
39
+ `mise exec "node@${nodeVersion}" -- pm2 save --force || true`),
40
+ },
41
+ {
42
+ title: 'Caddy',
43
+ task: () => executor.exec('SUDO=""; [ "$EUID" -ne 0 ] && SUDO="sudo"; ' +
44
+ 'if ! command -v caddy &>/dev/null; then ' +
45
+ ' $SUDO apt-get install -y debian-keyring debian-archive-keyring apt-transport-https; ' +
46
+ ' curl -1sLf "https://dl.cloudsmith.io/public/caddy/stable/gpg.key" | $SUDO gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg; ' +
47
+ ' curl -1sLf "https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt" | $SUDO tee /etc/apt/sources.list.d/caddy-stable.list; ' +
48
+ ' $SUDO apt-get update && $SUDO apt-get install -y caddy; ' +
49
+ 'fi'),
50
+ },
51
+ {
52
+ title: 'Deployment directories',
53
+ task: async () => {
54
+ await executor.exec(`mkdir -p "${config.remotePath}/releases" "${config.remotePath}/shared" "${config.remotePath}/.shipnode"`);
55
+ await executor.exec('SUDO=""; [ "$EUID" -ne 0 ] && SUDO="sudo"; ' +
56
+ '$SUDO mkdir -p /etc/caddy/conf.d /var/log/caddy');
57
+ },
58
+ },
59
+ ], { rendererOptions: { collapseErrors: false } });
60
+ }
46
61
  //# sourceMappingURL=setup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAE9B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,OAA4B;IACtE,MAAM,gBAAgB,CACpB,GAAG,EACH,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QAC7E,MAAM,IAAI,GAAG,oEAAoE,CAAC;QAElF,EAAE,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC;QAEtE,EAAE,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAC7C,MAAM,QAAQ,CAAC,IAAI,CACjB,6CAA6C;YAC7C,8BAA8B;YAC9B,4DAA4D,CAC7D,CAAC;QACF,EAAE,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;QAE5C,EAAE,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAChD,MAAM,QAAQ,CAAC,IAAI,CACjB,6EAA6E,CAC9E,CAAC;QACF,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAEzB,EAAE,CAAC,IAAI,CAAC,sBAAsB,WAAW,KAAK,CAAC,CAAC;QAChD,MAAM,QAAQ,CAAC,IAAI,CACjB,GAAG,IAAI,IAAI;YACX,yBAAyB,WAAW,KAAK;YACzC,wBAAwB,WAAW,GAAG,CACvC,CAAC;QACF,EAAE,CAAC,OAAO,CAAC,WAAW,WAAW,YAAY,CAAC,CAAC;QAE/C,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC7B,MAAM,QAAQ,CAAC,IAAI,CACjB,GAAG,IAAI,IAAI;YACX,wBAAwB,WAAW,uCAAuC;YAC1E,qBAAqB,WAAW,2BAA2B;YAC3D,MAAM;YACN,mBAAmB,WAAW,wDAAwD;YACtF,mBAAmB,WAAW,+BAA+B,CAC9D,CAAC;QACF,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAExB,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC/B,MAAM,QAAQ,CAAC,IAAI,CACjB,6CAA6C;YAC7C,0CAA0C;YAC1C,wFAAwF;YACxF,qJAAqJ;YACrJ,oIAAoI;YACpI,4DAA4D;YAC5D,IAAI,CACL,CAAC;QACF,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAE1B,EAAE,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAC9C,MAAM,QAAQ,CAAC,IAAI,CACjB,aAAa,MAAM,CAAC,UAAU,eAAe,MAAM,CAAC,UAAU,aAAa,MAAM,CAAC,UAAU,aAAa,CAC1G,CAAC;QAEF,MAAM,QAAQ,CAAC,IAAI,CACjB,6CAA6C;YAC7C,iDAAiD,CAClD,CAAC;QACF,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAElC,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;IACpD,CAAC,EACD,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,CAC/B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAI9B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,OAA4B;IACtE,MAAM,gBAAgB,CACpB,GAAG,EACH,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC7B,EAAE,CAAC,MAAM,EAAE,CAAC;QACZ,EAAE,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAE5D,MAAM,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAEzC,EAAE,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAClD,CAAC,EACD,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,CAC/B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,QAAwB,EAAE,MAAsB;IAClE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;IAC7E,MAAM,IAAI,GAAG,oEAAoE,CAAC;IAElF,OAAO,IAAI,KAAK,CACd;QACE;YACE,KAAK,EAAE,qBAAqB;YAC5B,IAAI,EAAE,GAAG,EAAE,CACT,QAAQ,CAAC,IAAI,CACX,6CAA6C;gBAC7C,8BAA8B;gBAC9B,4DAA4D,CAC7D;SACJ;QACD;YACE,KAAK,EAAE,wBAAwB;YAC/B,IAAI,EAAE,GAAG,EAAE,CACT,QAAQ,CAAC,IAAI,CACX,6EAA6E,CAC9E;SACJ;QACD;YACE,KAAK,EAAE,WAAW,WAAW,EAAE;YAC/B,IAAI,EAAE,GAAG,EAAE,CACT,QAAQ,CAAC,IAAI,CACX,GAAG,IAAI,IAAI;gBACX,yBAAyB,WAAW,KAAK;gBACzC,wBAAwB,WAAW,GAAG,CACvC;SACJ;QACD;YACE,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,GAAG,EAAE,CACT,QAAQ,CAAC,IAAI,CACX,GAAG,IAAI,IAAI;gBACX,wBAAwB,WAAW,uCAAuC;gBAC1E,qBAAqB,WAAW,2BAA2B;gBAC3D,MAAM;gBACN,mBAAmB,WAAW,wDAAwD;gBACtF,mBAAmB,WAAW,+BAA+B,CAC9D;SACJ;QACD;YACE,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,GAAG,EAAE,CACT,QAAQ,CAAC,IAAI,CACX,6CAA6C;gBAC7C,0CAA0C;gBAC1C,wFAAwF;gBACxF,qJAAqJ;gBACrJ,oIAAoI;gBACpI,4DAA4D;gBAC5D,IAAI,CACL;SACJ;QACD;YACE,KAAK,EAAE,wBAAwB;YAC/B,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,QAAQ,CAAC,IAAI,CACjB,aAAa,MAAM,CAAC,UAAU,eAAe,MAAM,CAAC,UAAU,aAAa,MAAM,CAAC,UAAU,aAAa,CAC1G,CAAC;gBACF,MAAM,QAAQ,CAAC,IAAI,CACjB,6CAA6C;oBAC7C,iDAAiD,CAClD,CAAC;YACJ,CAAC;SACF;KACF,EACD,EAAE,eAAe,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,CAC/C,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/cli/prompt.ts"],"names":[],"mappings":"AAEA,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ1D"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/cli/prompt.ts"],"names":[],"mappings":"AAGA,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhE"}
@@ -1,11 +1,11 @@
1
- import { createInterface } from 'readline';
2
- export function confirm(question) {
3
- const rl = createInterface({ input: process.stdin, output: process.stdout });
4
- return new Promise((resolve) => {
5
- rl.question(`${question} (y/N) `, (answer) => {
6
- rl.close();
7
- resolve(answer.trim().toLowerCase() === 'y');
8
- });
9
- });
1
+ import { confirm as clackConfirm, isCancel } from '@clack/prompts';
2
+ import { ui } from './ui.js';
3
+ export async function confirm(question) {
4
+ const result = await clackConfirm({ message: question });
5
+ if (isCancel(result)) {
6
+ ui.warn('Cancelled.');
7
+ process.exit(0);
8
+ }
9
+ return result;
10
10
  }
11
11
  //# sourceMappingURL=prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/cli/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,UAAU,OAAO,CAAC,QAAgB;IACtC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/cli/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,QAAgB;IAC5C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzD,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,MAAiB,CAAC;AAC3B,CAAC"}
package/dist/cli/ui.d.ts CHANGED
@@ -1,8 +1,15 @@
1
+ import * as clack from '@clack/prompts';
2
+ export { clack };
1
3
  export declare const ui: {
4
+ banner(version?: string): void;
5
+ outro(msg: string): void;
2
6
  info(msg: string): void;
3
7
  success(msg: string): void;
4
8
  warn(msg: string): void;
5
9
  error(msg: string): void;
10
+ step(msg: string): void;
11
+ note(msg: string, title?: string): void;
12
+ spinner(): clack.SpinnerResult;
6
13
  heading(msg: string): void;
7
14
  section(title: string, items: [string, string][]): void;
8
15
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,EAAE;cACH,MAAM;iBAGH,MAAM;cAGT,MAAM;eAGL,MAAM;iBAGJ,MAAM;mBAGJ,MAAM,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,IAAI;CAOxD,CAAC"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB,eAAO,MAAM,EAAE;qBACI,MAAM,GAAG,IAAI;eAKnB,MAAM,GAAG,IAAI;cAId,MAAM,GAAG,IAAI;iBAIV,MAAM,GAAG,IAAI;cAIhB,MAAM,GAAG,IAAI;eAIZ,MAAM,GAAG,IAAI;cAId,MAAM,GAAG,IAAI;cAIb,MAAM,UAAU,MAAM,GAAG,IAAI;;iBAQ1B,MAAM,GAAG,IAAI;mBAIX,MAAM,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,IAAI;CAIxD,CAAC"}
package/dist/cli/ui.js CHANGED
@@ -1,26 +1,41 @@
1
1
  import chalk from 'chalk';
2
+ import * as clack from '@clack/prompts';
3
+ export { clack };
2
4
  export const ui = {
5
+ banner(version) {
6
+ const v = version ? chalk.dim(` v${version}`) : '';
7
+ clack.intro(`${chalk.bold.cyan('⚓ ShipNode')}${v}`);
8
+ },
9
+ outro(msg) {
10
+ clack.outro(msg);
11
+ },
3
12
  info(msg) {
4
- console.log(`${chalk.blue('→')} ${msg}`);
13
+ clack.log.info(msg);
5
14
  },
6
15
  success(msg) {
7
- console.log(`${chalk.green('✓')} ${msg}`);
16
+ clack.log.success(msg);
8
17
  },
9
18
  warn(msg) {
10
- console.log(`${chalk.yellow('⚠')} ${msg}`);
19
+ clack.log.warn(msg);
11
20
  },
12
21
  error(msg) {
13
- console.error(`${chalk.red('Error:')} ${msg}`);
22
+ clack.log.error(msg);
23
+ },
24
+ step(msg) {
25
+ clack.log.step(msg);
26
+ },
27
+ note(msg, title) {
28
+ clack.note(msg, title);
29
+ },
30
+ spinner() {
31
+ return clack.spinner();
14
32
  },
15
33
  heading(msg) {
16
- console.log(`\n${chalk.blue.bold(msg)}\n`);
34
+ clack.log.step(chalk.bold(msg));
17
35
  },
18
36
  section(title, items) {
19
- console.log(chalk.bold(title));
20
- for (const [key, value] of items) {
21
- console.log(` ${chalk.dim(key.padEnd(20))} ${value}`);
22
- }
23
- console.log();
37
+ const rows = items.map(([k, v]) => `${chalk.dim(k.padEnd(18))} ${v}`).join('\n');
38
+ clack.note(rows, title);
24
39
  },
25
40
  };
26
41
  //# sourceMappingURL=ui.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,IAAI,CAAC,GAAW;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,GAAW;QACjB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,GAAW;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,KAAK,CAAC,GAAW;QACf,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,CAAC,GAAW;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,KAAa,EAAE,KAAyB;QAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,MAAM,CAAC,OAAgB;QACrB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,GAAW;QACf,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,GAAW;QACd,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,GAAW;QACd,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,GAAW;QACf,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,GAAW;QACd,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,KAAc;QAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,OAAO;QACL,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,KAAyB;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjF,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1B,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/ssh/connection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC;AAED,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;;IAMpB,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCzC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IA0C1E,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IASxC,UAAU,IAAI,IAAI;IAKlB,WAAW,IAAI,OAAO;CAGvB"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/ssh/connection.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC;AAED,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;;IAMpB,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDzC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IA0C1E,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IASxC,UAAU,IAAI,IAAI;IAKlB,WAAW,IAAI,OAAO;CAGvB"}
@@ -1,4 +1,6 @@
1
- import { readFileSync } from 'fs';
1
+ import { readFileSync, existsSync } from 'fs';
2
+ import { homedir } from 'os';
3
+ import { join } from 'path';
2
4
  import { Client } from 'ssh2';
3
5
  import { SshError } from '../../shared/errors.js';
4
6
  export class SshConnection {
@@ -17,6 +19,23 @@ export class SshConnection {
17
19
  if (config.identityFile) {
18
20
  sshConfig.privateKey = readFileSync(config.identityFile);
19
21
  }
22
+ else {
23
+ if (process.env['SSH_AUTH_SOCK']) {
24
+ sshConfig.agent = process.env['SSH_AUTH_SOCK'];
25
+ }
26
+ // Also try default key files — agent may be set but have no keys loaded
27
+ const defaults = ['id_ed25519', 'id_ecdsa', 'id_rsa', 'id_dsa'];
28
+ for (const name of defaults) {
29
+ const keyPath = join(homedir(), '.ssh', name);
30
+ if (existsSync(keyPath)) {
31
+ sshConfig.privateKey = readFileSync(keyPath);
32
+ break;
33
+ }
34
+ }
35
+ if (!sshConfig.agent && !sshConfig.privateKey) {
36
+ throw new SshError('No SSH auth method found. Set identityFile in config, run ssh-add, or place a key in ~/.ssh/');
37
+ }
38
+ }
20
39
  if (config.proxyMode === 'cloudflare') {
21
40
  throw new SshError('Cloudflare Access proxy requires external connector. Use ssh2-http-proxy-agent.');
22
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/infrastructure/ssh/connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/infrastructure/ssh/connection.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devalade/shipnode",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
4
4
  "description": "Deploy Node.js apps to a single VPS with zero configuration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -18,12 +18,14 @@
18
18
  "shipnode": "dist/cli/index.js"
19
19
  },
20
20
  "dependencies": {
21
+ "@clack/prompts": "^1.4.0",
21
22
  "chalk": "^5.3.0",
22
23
  "commander": "^12.1.0",
23
24
  "execa": "^9.5.1",
24
25
  "fs-extra": "^11.3.5",
25
26
  "jiti": "^2.4.2",
26
27
  "js-yaml": "^4.1.0",
28
+ "listr2": "^10.2.1",
27
29
  "ora": "^8.1.1",
28
30
  "ssh2": "^1.16.0",
29
31
  "zod": "^3.24.1"