@zincapp/znvault-plugin-payara 1.7.18 → 1.8.1

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.
Files changed (175) hide show
  1. package/dist/cli/commands/deploy-config.d.ts +7 -0
  2. package/dist/cli/commands/deploy-config.d.ts.map +1 -0
  3. package/dist/cli/commands/deploy-config.js +204 -0
  4. package/dist/cli/commands/deploy-config.js.map +1 -0
  5. package/dist/cli/commands/deploy-run.d.ts +7 -0
  6. package/dist/cli/commands/deploy-run.d.ts.map +1 -0
  7. package/dist/cli/commands/deploy-run.js +225 -0
  8. package/dist/cli/commands/deploy-run.js.map +1 -0
  9. package/dist/cli/commands/deploy-war.d.ts +7 -0
  10. package/dist/cli/commands/deploy-war.d.ts.map +1 -0
  11. package/dist/cli/commands/deploy-war.js +111 -0
  12. package/dist/cli/commands/deploy-war.js.map +1 -0
  13. package/dist/cli/commands/deploy.d.ts +24 -0
  14. package/dist/cli/commands/deploy.d.ts.map +1 -0
  15. package/dist/cli/commands/deploy.js +352 -0
  16. package/dist/cli/commands/deploy.js.map +1 -0
  17. package/dist/cli/commands/helpers.d.ts +29 -0
  18. package/dist/cli/commands/helpers.d.ts.map +1 -0
  19. package/dist/cli/commands/helpers.js +62 -0
  20. package/dist/cli/commands/helpers.js.map +1 -0
  21. package/dist/cli/commands/index.d.ts +8 -0
  22. package/dist/cli/commands/index.d.ts.map +1 -0
  23. package/dist/cli/commands/index.js +8 -0
  24. package/dist/cli/commands/index.js.map +1 -0
  25. package/dist/cli/commands/lifecycle.d.ts +7 -0
  26. package/dist/cli/commands/lifecycle.d.ts.map +1 -0
  27. package/dist/cli/commands/lifecycle.js +121 -0
  28. package/dist/cli/commands/lifecycle.js.map +1 -0
  29. package/dist/cli/config-store.d.ts +22 -0
  30. package/dist/cli/config-store.d.ts.map +1 -0
  31. package/dist/cli/config-store.js +54 -0
  32. package/dist/cli/config-store.js.map +1 -0
  33. package/dist/cli/constants.d.ts +56 -0
  34. package/dist/cli/constants.d.ts.map +1 -0
  35. package/dist/cli/constants.js +71 -0
  36. package/dist/cli/constants.js.map +1 -0
  37. package/dist/cli/formatters.d.ts +25 -0
  38. package/dist/cli/formatters.d.ts.map +1 -0
  39. package/dist/cli/formatters.js +62 -0
  40. package/dist/cli/formatters.js.map +1 -0
  41. package/dist/cli/host-checks.d.ts +16 -0
  42. package/dist/cli/host-checks.d.ts.map +1 -0
  43. package/dist/cli/host-checks.js +112 -0
  44. package/dist/cli/host-checks.js.map +1 -0
  45. package/dist/cli/http-client.d.ts +38 -0
  46. package/dist/cli/http-client.d.ts.map +1 -0
  47. package/dist/cli/http-client.js +136 -0
  48. package/dist/cli/http-client.js.map +1 -0
  49. package/dist/cli/index.d.ts +10 -0
  50. package/dist/cli/index.d.ts.map +1 -0
  51. package/dist/cli/index.js +14 -0
  52. package/dist/cli/index.js.map +1 -0
  53. package/dist/cli/progress.d.ts +81 -0
  54. package/dist/cli/progress.d.ts.map +1 -0
  55. package/dist/cli/progress.js +464 -0
  56. package/dist/cli/progress.js.map +1 -0
  57. package/dist/cli/types.d.ts +160 -0
  58. package/dist/cli/types.d.ts.map +1 -0
  59. package/dist/cli/types.js +3 -0
  60. package/dist/cli/types.js.map +1 -0
  61. package/dist/cli/war-info.d.ts +33 -0
  62. package/dist/cli/war-info.d.ts.map +1 -0
  63. package/dist/cli/war-info.js +60 -0
  64. package/dist/cli/war-info.js.map +1 -0
  65. package/dist/cli.d.ts +2 -32
  66. package/dist/cli.d.ts.map +1 -1
  67. package/dist/cli.js +10 -1676
  68. package/dist/cli.js.map +1 -1
  69. package/dist/deployment-lock.d.ts +7 -2
  70. package/dist/deployment-lock.d.ts.map +1 -1
  71. package/dist/deployment-lock.js +26 -14
  72. package/dist/deployment-lock.js.map +1 -1
  73. package/dist/deployment-status.d.ts +84 -0
  74. package/dist/deployment-status.d.ts.map +1 -0
  75. package/dist/deployment-status.js +98 -0
  76. package/dist/deployment-status.js.map +1 -0
  77. package/dist/index.d.ts +6 -0
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +57 -394
  80. package/dist/index.js.map +1 -1
  81. package/dist/payara-env.d.ts +45 -0
  82. package/dist/payara-env.d.ts.map +1 -0
  83. package/dist/payara-env.js +81 -0
  84. package/dist/payara-env.js.map +1 -0
  85. package/dist/payara-manager.d.ts +16 -16
  86. package/dist/payara-manager.d.ts.map +1 -1
  87. package/dist/payara-manager.js +70 -122
  88. package/dist/payara-manager.js.map +1 -1
  89. package/dist/plugin-config.d.ts +34 -0
  90. package/dist/plugin-config.d.ts.map +1 -0
  91. package/dist/plugin-config.js +64 -0
  92. package/dist/plugin-config.js.map +1 -0
  93. package/dist/plugin-health.d.ts +35 -0
  94. package/dist/plugin-health.d.ts.map +1 -0
  95. package/dist/plugin-health.js +93 -0
  96. package/dist/plugin-health.js.map +1 -0
  97. package/dist/plugin-startup.d.ts +37 -0
  98. package/dist/plugin-startup.d.ts.map +1 -0
  99. package/dist/plugin-startup.js +94 -0
  100. package/dist/plugin-startup.js.map +1 -0
  101. package/dist/routes/deploy.d.ts +15 -0
  102. package/dist/routes/deploy.d.ts.map +1 -0
  103. package/dist/routes/deploy.js +285 -0
  104. package/dist/routes/deploy.js.map +1 -0
  105. package/dist/routes/helpers.d.ts +80 -0
  106. package/dist/routes/helpers.d.ts.map +1 -0
  107. package/dist/routes/helpers.js +102 -0
  108. package/dist/routes/helpers.js.map +1 -0
  109. package/dist/routes/index.d.ts +15 -0
  110. package/dist/routes/index.d.ts.map +1 -0
  111. package/dist/routes/index.js +36 -0
  112. package/dist/routes/index.js.map +1 -0
  113. package/dist/routes/lifecycle.d.ts +13 -0
  114. package/dist/routes/lifecycle.d.ts.map +1 -0
  115. package/dist/routes/lifecycle.js +100 -0
  116. package/dist/routes/lifecycle.js.map +1 -0
  117. package/dist/routes/status.d.ts +13 -0
  118. package/dist/routes/status.d.ts.map +1 -0
  119. package/dist/routes/status.js +131 -0
  120. package/dist/routes/status.js.map +1 -0
  121. package/dist/routes/types.d.ts +18 -0
  122. package/dist/routes/types.d.ts.map +1 -0
  123. package/dist/routes/types.js +16 -0
  124. package/dist/routes/types.js.map +1 -0
  125. package/dist/routes.d.ts +2 -13
  126. package/dist/routes.d.ts.map +1 -1
  127. package/dist/routes.js +5 -518
  128. package/dist/routes.js.map +1 -1
  129. package/dist/secrets-handler.d.ts +31 -0
  130. package/dist/secrets-handler.d.ts.map +1 -0
  131. package/dist/secrets-handler.js +190 -0
  132. package/dist/secrets-handler.js.map +1 -0
  133. package/dist/session-store.d.ts +87 -0
  134. package/dist/session-store.d.ts.map +1 -0
  135. package/dist/session-store.js +156 -0
  136. package/dist/session-store.js.map +1 -0
  137. package/dist/types.d.ts +2 -0
  138. package/dist/types.d.ts.map +1 -1
  139. package/dist/utils/error.d.ts +15 -0
  140. package/dist/utils/error.d.ts.map +1 -0
  141. package/dist/utils/error.js +18 -0
  142. package/dist/utils/error.js.map +1 -0
  143. package/dist/utils/index.d.ts +5 -0
  144. package/dist/utils/index.d.ts.map +1 -0
  145. package/dist/utils/index.js +6 -0
  146. package/dist/utils/index.js.map +1 -0
  147. package/dist/utils/polling.d.ts +42 -0
  148. package/dist/utils/polling.d.ts.map +1 -0
  149. package/dist/utils/polling.js +60 -0
  150. package/dist/utils/polling.js.map +1 -0
  151. package/dist/utils/process-killer.d.ts +47 -0
  152. package/dist/utils/process-killer.d.ts.map +1 -0
  153. package/dist/utils/process-killer.js +80 -0
  154. package/dist/utils/process-killer.js.map +1 -0
  155. package/dist/utils/temp-dir.d.ts +26 -0
  156. package/dist/utils/temp-dir.d.ts.map +1 -0
  157. package/dist/utils/temp-dir.js +51 -0
  158. package/dist/utils/temp-dir.js.map +1 -0
  159. package/dist/utils/ttl-cache.d.ts +78 -0
  160. package/dist/utils/ttl-cache.d.ts.map +1 -0
  161. package/dist/utils/ttl-cache.js +101 -0
  162. package/dist/utils/ttl-cache.js.map +1 -0
  163. package/dist/utils/zip.d.ts +39 -0
  164. package/dist/utils/zip.d.ts.map +1 -0
  165. package/dist/utils/zip.js +72 -0
  166. package/dist/utils/zip.js.map +1 -0
  167. package/dist/war-deployer.d.ts +21 -19
  168. package/dist/war-deployer.d.ts.map +1 -1
  169. package/dist/war-deployer.js +111 -112
  170. package/dist/war-deployer.js.map +1 -1
  171. package/dist/war-utils.d.ts +29 -0
  172. package/dist/war-utils.d.ts.map +1 -0
  173. package/dist/war-utils.js +62 -0
  174. package/dist/war-utils.js.map +1 -0
  175. package/package.json +13 -13
@@ -0,0 +1,7 @@
1
+ import type { Command } from 'commander';
2
+ import type { CLIPluginContext } from '../types.js';
3
+ /**
4
+ * Register deploy config commands
5
+ */
6
+ export declare function registerConfigCommands(configCmd: Command, ctx: CLIPluginContext): void;
7
+ //# sourceMappingURL=deploy-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/deploy-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,aAAa,CAAC;AAKlE;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,OAAO,EAClB,GAAG,EAAE,gBAAgB,GACpB,IAAI,CAkON"}
@@ -0,0 +1,204 @@
1
+ // Path: src/cli/commands/deploy-config.ts
2
+ // Deploy config management commands
3
+ import { loadDeployConfigs, saveDeployConfigs } from '../config-store.js';
4
+ import { ANSI, parsePort } from '../constants.js';
5
+ import { getConfigOrExit, confirmPrompt, withErrorHandling } from './helpers.js';
6
+ /**
7
+ * Register deploy config commands
8
+ */
9
+ export function registerConfigCommands(configCmd, ctx) {
10
+ // deploy config create <name>
11
+ configCmd
12
+ .command('create <name>')
13
+ .description('Create a new deployment configuration')
14
+ .option('-w, --war <path>', 'Path to WAR file')
15
+ .option('-h, --hosts <hosts>', 'Comma-separated list of hosts')
16
+ .option('-p, --port <port>', 'Agent port (default: 9100)', '9100')
17
+ .option('--parallel', 'Deploy to hosts in parallel')
18
+ .option('-d, --description <desc>', 'Configuration description')
19
+ .action(async (name, options) => {
20
+ await withErrorHandling(ctx, async () => {
21
+ const store = await loadDeployConfigs();
22
+ if (store.configs[name]) {
23
+ ctx.output.error(`Config '${name}' already exists`);
24
+ process.exit(1);
25
+ }
26
+ const config = {
27
+ name,
28
+ hosts: options.hosts ? options.hosts.split(',').map(h => h.trim()) : [],
29
+ warPath: options.war ?? '',
30
+ port: parsePort(options.port),
31
+ parallel: options.parallel ?? false,
32
+ description: options.description,
33
+ };
34
+ store.configs[name] = config;
35
+ await saveDeployConfigs(store);
36
+ ctx.output.success(`Created deployment config: ${name}`);
37
+ if (config.hosts.length > 0) {
38
+ ctx.output.info(` Hosts: ${config.hosts.join(', ')}`);
39
+ }
40
+ if (config.warPath) {
41
+ ctx.output.info(` WAR: ${config.warPath}`);
42
+ }
43
+ }, 'Failed to create config');
44
+ });
45
+ // deploy config list
46
+ configCmd
47
+ .command('list')
48
+ .alias('ls')
49
+ .description('List all deployment configurations')
50
+ .option('--json', 'Output as JSON')
51
+ .action(async (options) => {
52
+ await withErrorHandling(ctx, async () => {
53
+ const store = await loadDeployConfigs();
54
+ const configs = Object.values(store.configs);
55
+ if (configs.length === 0) {
56
+ if (options.json) {
57
+ console.log(JSON.stringify([], null, 2));
58
+ }
59
+ else {
60
+ ctx.output.info('No deployment configurations found.');
61
+ ctx.output.info('Create one with: znvault deploy config create <name>');
62
+ }
63
+ return;
64
+ }
65
+ if (options.json) {
66
+ console.log(JSON.stringify(configs, null, 2));
67
+ return;
68
+ }
69
+ console.log('\nDeployment Configurations:\n');
70
+ for (const config of configs) {
71
+ console.log(` ${ANSI.bold}${config.name}${ANSI.reset}`);
72
+ if (config.description) {
73
+ console.log(` ${ANSI.dim}${config.description}${ANSI.reset}`);
74
+ }
75
+ console.log(` Hosts: ${config.hosts.length > 0 ? config.hosts.join(', ') : ANSI.dim + '(none)' + ANSI.reset}`);
76
+ console.log(` WAR: ${config.warPath || ANSI.dim + '(not set)' + ANSI.reset}`);
77
+ console.log(` Mode: ${config.parallel ? 'parallel' : 'sequential'}`);
78
+ console.log();
79
+ }
80
+ }, 'Failed to list configs');
81
+ });
82
+ // deploy config show <name>
83
+ configCmd
84
+ .command('show <name>')
85
+ .description('Show deployment configuration details')
86
+ .option('--json', 'Output as JSON')
87
+ .action(async (name, options) => {
88
+ await withErrorHandling(ctx, async () => {
89
+ const { config } = await getConfigOrExit(ctx, name);
90
+ if (options.json) {
91
+ console.log(JSON.stringify(config, null, 2));
92
+ return;
93
+ }
94
+ console.log(`\n${ANSI.bold}Deployment Config: ${config.name}${ANSI.reset}\n`);
95
+ if (config.description) {
96
+ console.log(` Description: ${config.description}`);
97
+ }
98
+ console.log(` WAR Path: ${config.warPath || ANSI.dim + '(not set)' + ANSI.reset}`);
99
+ console.log(` Port: ${config.port}`);
100
+ console.log(` Mode: ${config.parallel ? 'parallel' : 'sequential'}`);
101
+ console.log(`\n Hosts (${config.hosts.length}):`);
102
+ if (config.hosts.length === 0) {
103
+ console.log(` ${ANSI.dim}(none)${ANSI.reset}`);
104
+ }
105
+ else {
106
+ for (const host of config.hosts) {
107
+ console.log(` - ${host}`);
108
+ }
109
+ }
110
+ console.log();
111
+ }, 'Failed to show config');
112
+ });
113
+ // deploy config delete <name>
114
+ configCmd
115
+ .command('delete <name>')
116
+ .alias('rm')
117
+ .description('Delete a deployment configuration')
118
+ .option('-y, --yes', 'Skip confirmation')
119
+ .action(async (name, options) => {
120
+ await withErrorHandling(ctx, async () => {
121
+ const store = await loadDeployConfigs();
122
+ if (!store.configs[name]) {
123
+ ctx.output.error(`Config '${name}' not found`);
124
+ process.exit(1);
125
+ }
126
+ if (!options.yes) {
127
+ const confirmed = await confirmPrompt(`Delete deployment config '${name}'?`, false);
128
+ if (!confirmed) {
129
+ ctx.output.info('Cancelled');
130
+ return;
131
+ }
132
+ }
133
+ delete store.configs[name];
134
+ await saveDeployConfigs(store);
135
+ ctx.output.success(`Deleted config: ${name}`);
136
+ }, 'Failed to delete config');
137
+ });
138
+ // deploy config add-host <name> <host>
139
+ configCmd
140
+ .command('add-host <name> <host>')
141
+ .description('Add a host to deployment configuration')
142
+ .action(async (name, host) => {
143
+ await withErrorHandling(ctx, async () => {
144
+ const { store, config } = await getConfigOrExit(ctx, name);
145
+ if (config.hosts.includes(host)) {
146
+ ctx.output.warn(`Host '${host}' already in config`);
147
+ return;
148
+ }
149
+ config.hosts.push(host);
150
+ await saveDeployConfigs(store);
151
+ ctx.output.success(`Added host: ${host}`);
152
+ ctx.output.info(`Config '${name}' now has ${config.hosts.length} host(s)`);
153
+ }, 'Failed to add host');
154
+ });
155
+ // deploy config remove-host <name> <host>
156
+ configCmd
157
+ .command('remove-host <name> <host>')
158
+ .description('Remove a host from deployment configuration')
159
+ .action(async (name, host) => {
160
+ await withErrorHandling(ctx, async () => {
161
+ const { store, config } = await getConfigOrExit(ctx, name);
162
+ const index = config.hosts.indexOf(host);
163
+ if (index === -1) {
164
+ ctx.output.error(`Host '${host}' not found in config`);
165
+ process.exit(1);
166
+ }
167
+ config.hosts.splice(index, 1);
168
+ await saveDeployConfigs(store);
169
+ ctx.output.success(`Removed host: ${host}`);
170
+ ctx.output.info(`Config '${name}' now has ${config.hosts.length} host(s)`);
171
+ }, 'Failed to remove host');
172
+ });
173
+ // deploy config set <name> <key> <value>
174
+ configCmd
175
+ .command('set <name> <key> <value>')
176
+ .description('Set a configuration value (war, port, parallel, description)')
177
+ .action(async (name, key, value) => {
178
+ await withErrorHandling(ctx, async () => {
179
+ const { store, config } = await getConfigOrExit(ctx, name);
180
+ switch (key.toLowerCase()) {
181
+ case 'war':
182
+ case 'warpath':
183
+ config.warPath = value;
184
+ break;
185
+ case 'port':
186
+ config.port = parsePort(value);
187
+ break;
188
+ case 'parallel':
189
+ config.parallel = value.toLowerCase() === 'true' || value === '1';
190
+ break;
191
+ case 'description':
192
+ case 'desc':
193
+ config.description = value;
194
+ break;
195
+ default:
196
+ ctx.output.error(`Unknown config key: ${key}`);
197
+ ctx.output.info('Valid keys: war, port, parallel, description');
198
+ process.exit(1);
199
+ }
200
+ await saveDeployConfigs(store);
201
+ ctx.output.success(`Set ${key} = ${value}`);
202
+ }, 'Failed to set config');
203
+ });
204
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-config.js","sourceRoot":"","sources":["../../../src/cli/commands/deploy-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Command } from 'commander';
2
+ import type { CLIPluginContext } from '../types.js';
3
+ /**
4
+ * Register deploy run command for multi-host deployment
5
+ */
6
+ export declare function registerDeployRunCommand(deploy: Command, ctx: CLIPluginContext): void;
7
+ //# sourceMappingURL=deploy-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/deploy-run.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBzC,OAAO,KAAK,EAAE,gBAAgB,EAA4B,MAAM,aAAa,CAAC;AAI9E;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,gBAAgB,GACpB,IAAI,CAkQN"}
@@ -0,0 +1,225 @@
1
+ // Path: src/cli/commands/deploy-run.ts
2
+ // Deploy run command - multi-host deployment using saved configurations
3
+ import { resolve } from 'node:path';
4
+ import { calculateWarHashes } from '../../war-deployer.js';
5
+ import { loadDeployConfigs } from '../config-store.js';
6
+ import { getWarInfo, ProgressReporter, } from '../progress.js';
7
+ import { ANSI } from '../constants.js';
8
+ import { checkPluginVersions, triggerPluginUpdate, checkHostReachable, } from '../host-checks.js';
9
+ import { getErrorMessage } from '../../utils/error.js';
10
+ import { deployToHost } from './deploy.js';
11
+ /**
12
+ * Register deploy run command for multi-host deployment
13
+ */
14
+ export function registerDeployRunCommand(deploy, ctx) {
15
+ deploy
16
+ .command('run <configName>')
17
+ .alias('to')
18
+ .description('Deploy WAR to all hosts in a saved configuration')
19
+ .option('-f, --force', 'Force full deployment (no diff)')
20
+ .option('--dry-run', 'Show what would be deployed without deploying')
21
+ .option('--sequential', 'Deploy to hosts one at a time (override parallel setting)')
22
+ .option('--skip-preflight', 'Skip pre-flight checks')
23
+ .option('--skip-version-check', 'Skip plugin version check')
24
+ .option('--update-plugins', 'Update plugins if updates are available')
25
+ .option('-y, --yes', 'Skip confirmation prompts')
26
+ .action(async (configName, options) => {
27
+ const progress = new ProgressReporter(ctx.isPlainMode());
28
+ try {
29
+ const store = await loadDeployConfigs();
30
+ const config = store.configs[configName];
31
+ if (!config) {
32
+ ctx.output.error(`Deployment config '${configName}' not found`);
33
+ ctx.output.info('Use "znvault deploy config list" to see available configs');
34
+ process.exit(1);
35
+ }
36
+ if (config.hosts.length === 0) {
37
+ ctx.output.error('No hosts configured for this deployment');
38
+ ctx.output.info(`Use "znvault deploy config add-host ${configName} <host>" to add hosts`);
39
+ process.exit(1);
40
+ }
41
+ // Resolve WAR path and get detailed info
42
+ const warPath = resolve(config.warPath);
43
+ let warInfo;
44
+ try {
45
+ warInfo = await getWarInfo(warPath);
46
+ }
47
+ catch {
48
+ ctx.output.error(`WAR file not found: ${warPath}`);
49
+ process.exit(1);
50
+ }
51
+ // Header with detailed WAR info
52
+ if (!ctx.isPlainMode()) {
53
+ console.log(`\n${ANSI.bold}Deploying ${ANSI.cyan}${configName}${ANSI.reset}`);
54
+ }
55
+ else {
56
+ ctx.output.info(`Deploying ${configName}`);
57
+ }
58
+ progress.showWarInfo(warInfo);
59
+ if (!ctx.isPlainMode()) {
60
+ console.log(`${ANSI.dim} Hosts: ${ANSI.reset}${config.hosts.length}`);
61
+ console.log(`${ANSI.dim} Mode: ${ANSI.reset}${options.sequential || !config.parallel ? 'sequential' : 'parallel'}`);
62
+ }
63
+ else {
64
+ ctx.output.info(` Hosts: ${config.hosts.length}`);
65
+ ctx.output.info(` Mode: ${options.sequential || !config.parallel ? 'sequential' : 'parallel'}`);
66
+ }
67
+ // Pre-flight checks
68
+ if (!options.skipPreflight) {
69
+ progress.showPreflightHeader(config.hosts.length);
70
+ const preflightResults = [];
71
+ for (const [i, host] of config.hosts.entries()) {
72
+ progress.showPreflightChecking(host);
73
+ const result = await checkHostReachable(host, config.port, (attempt, delay, error) => {
74
+ progress.showPreflightRetry(host, attempt, delay, error);
75
+ });
76
+ preflightResults.push(result);
77
+ progress.showPreflightResult(result, i, config.hosts.length);
78
+ }
79
+ const allReachable = progress.showPreflightSummary(preflightResults);
80
+ if (!allReachable && !options.yes) {
81
+ // Ask user if they want to continue
82
+ const unreachableHosts = preflightResults.filter(r => !r.reachable).map(r => r.host);
83
+ console.log('');
84
+ ctx.output.warn(`Unreachable hosts will be skipped: ${unreachableHosts.join(', ')}`);
85
+ // Dynamic import of inquirer
86
+ const inquirerModule = await import('inquirer');
87
+ const inquirer = inquirerModule.default;
88
+ const answers = await inquirer.prompt([{
89
+ type: 'confirm',
90
+ name: 'continue',
91
+ message: 'Continue with deployment to reachable hosts?',
92
+ default: true,
93
+ }]);
94
+ if (!answers.continue) {
95
+ ctx.output.info('Deployment cancelled');
96
+ return;
97
+ }
98
+ // Filter to only reachable hosts
99
+ config.hosts = config.hosts.filter(h => preflightResults.find(r => r.host === h)?.reachable);
100
+ }
101
+ }
102
+ // Plugin version check (after preflight so we know hosts are reachable)
103
+ if (!options.skipVersionCheck && !options.skipPreflight) {
104
+ progress.showVersionCheckHeader();
105
+ const versionResults = [];
106
+ for (const host of config.hosts) {
107
+ const result = await checkPluginVersions(host, config.port);
108
+ versionResults.push({ host, result });
109
+ progress.showVersionCheckResult(host, result);
110
+ }
111
+ const hostsWithUpdates = versionResults.filter(r => r.result.success && r.result.response?.hasUpdates).length;
112
+ const hasUpdates = progress.showVersionSummary(hostsWithUpdates, config.hosts.length);
113
+ if (hasUpdates) {
114
+ if (options.updatePlugins) {
115
+ // Auto-update plugins
116
+ console.log('');
117
+ let hostsRestarting = 0;
118
+ for (const { host, result } of versionResults) {
119
+ if (!result.success || !result.response?.hasUpdates)
120
+ continue;
121
+ progress.showVersionUpdateHeader(host);
122
+ const updateResult = await triggerPluginUpdate(host, config.port);
123
+ progress.showVersionUpdateResult(host, updateResult);
124
+ if (updateResult.success && updateResult.response?.willRestart) {
125
+ hostsRestarting++;
126
+ }
127
+ }
128
+ // If any agents are restarting, wait for them
129
+ if (hostsRestarting > 0) {
130
+ console.log('');
131
+ // Wait 25 seconds total for agents to restart (2s delay + 15s restart + buffer)
132
+ const RESTART_WAIT_TIME = 25;
133
+ for (let i = RESTART_WAIT_TIME; i > 0; i--) {
134
+ progress.showAgentRestartWaiting(i);
135
+ await new Promise(r => setTimeout(r, 1000));
136
+ }
137
+ progress.showAgentRestartComplete();
138
+ }
139
+ }
140
+ else if (!options.yes) {
141
+ // Ask user if they want to update
142
+ console.log('');
143
+ const inquirerModule = await import('inquirer');
144
+ const inquirer = inquirerModule.default;
145
+ const answers = await inquirer.prompt([{
146
+ type: 'confirm',
147
+ name: 'update',
148
+ message: 'Update plugins before deploying?',
149
+ default: false,
150
+ }]);
151
+ if (answers.update) {
152
+ let hostsRestarting = 0;
153
+ for (const { host, result } of versionResults) {
154
+ if (!result.success || !result.response?.hasUpdates)
155
+ continue;
156
+ progress.showVersionUpdateHeader(host);
157
+ const updateResult = await triggerPluginUpdate(host, config.port);
158
+ progress.showVersionUpdateResult(host, updateResult);
159
+ if (updateResult.success && updateResult.response?.willRestart) {
160
+ hostsRestarting++;
161
+ }
162
+ }
163
+ // If any agents are restarting, wait for them
164
+ if (hostsRestarting > 0) {
165
+ console.log('');
166
+ const RESTART_WAIT_TIME = 25;
167
+ for (let i = RESTART_WAIT_TIME; i > 0; i--) {
168
+ progress.showAgentRestartWaiting(i);
169
+ await new Promise(r => setTimeout(r, 1000));
170
+ }
171
+ progress.showAgentRestartComplete();
172
+ }
173
+ }
174
+ }
175
+ }
176
+ }
177
+ // Calculate local hashes once
178
+ if (!ctx.isPlainMode()) {
179
+ console.log('');
180
+ }
181
+ const localHashes = await calculateWarHashes(warPath);
182
+ if (options.dryRun) {
183
+ ctx.output.info(`Dry run - would deploy ${warInfo.fileCount} files to ${config.hosts.length} host(s)`);
184
+ return;
185
+ }
186
+ const results = [];
187
+ const deployToHostWrapper = async (host) => {
188
+ progress.setHost(host);
189
+ const result = await deployToHost(ctx, host, config.port, warPath, localHashes, options.force ?? false, progress);
190
+ results.push({
191
+ host,
192
+ success: result.success,
193
+ error: result.error,
194
+ result: result.result,
195
+ });
196
+ if (result.success && result.result) {
197
+ progress.deployed(result.result);
198
+ }
199
+ else {
200
+ progress.failed(result.error ?? 'Unknown error');
201
+ }
202
+ };
203
+ if (options.sequential || !config.parallel) {
204
+ // Sequential deployment
205
+ for (const host of config.hosts) {
206
+ await deployToHostWrapper(host);
207
+ }
208
+ }
209
+ else {
210
+ // Parallel deployment
211
+ await Promise.all(config.hosts.map(deployToHostWrapper));
212
+ }
213
+ const successful = results.filter(r => r.success).length;
214
+ const failed = results.filter(r => !r.success).length;
215
+ progress.summary(successful, config.hosts.length, failed);
216
+ if (failed > 0) {
217
+ process.exit(1);
218
+ }
219
+ }
220
+ catch (err) {
221
+ ctx.output.error(`Deployment failed: ${getErrorMessage(err)}`);
222
+ process.exit(1);
223
+ }
224
+ });
225
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-run.js","sourceRoot":"","sources":["../../../src/cli/commands/deploy-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Command } from 'commander';
2
+ import type { CLIPluginContext } from '../types.js';
3
+ /**
4
+ * Register deploy war command for single-host deployment
5
+ */
6
+ export declare function registerDeployWarCommand(deploy: Command, ctx: CLIPluginContext): void;
7
+ //# sourceMappingURL=deploy-war.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-war.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/deploy-war.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,gBAAgB,GACpB,IAAI,CAwHN"}
@@ -0,0 +1,111 @@
1
+ // Path: src/cli/commands/deploy-war.ts
2
+ // Deploy WAR command - single-host deployment with diff transfer
3
+ import { stat } from 'node:fs/promises';
4
+ import { calculateWarHashes, calculateDiff } from '../../war-deployer.js';
5
+ import { ProgressReporter } from '../progress.js';
6
+ import { ANSI, parsePort } from '../constants.js';
7
+ import { agentGet, buildPluginUrl } from '../http-client.js';
8
+ import { getErrorMessage } from '../../utils/error.js';
9
+ import { deployToHost } from './deploy.js';
10
+ /**
11
+ * Register deploy war command for single-host deployment
12
+ */
13
+ export function registerDeployWarCommand(deploy, ctx) {
14
+ deploy
15
+ .command('war <warFile>')
16
+ .description('Deploy WAR file using diff transfer (single host)')
17
+ .option('-t, --target <host>', 'Target server URL (default: from profile)')
18
+ .option('-p, --port <port>', 'Agent health port (default: 9100)', '9100')
19
+ .option('-f, --force', 'Force full deployment (no diff)')
20
+ .option('--dry-run', 'Show what would be deployed without deploying')
21
+ .action(async (warFile, options) => {
22
+ const progress = new ProgressReporter(ctx.isPlainMode());
23
+ try {
24
+ // Verify WAR file exists
25
+ let warStats;
26
+ try {
27
+ warStats = await stat(warFile);
28
+ }
29
+ catch {
30
+ ctx.output.error(`WAR file not found: ${warFile}`);
31
+ process.exit(1);
32
+ }
33
+ progress.analyzing(warFile);
34
+ // Calculate local hashes
35
+ const localHashes = await calculateWarHashes(warFile);
36
+ progress.foundFiles(Object.keys(localHashes).length, warStats.size);
37
+ // Build target URL
38
+ const target = options.target ?? ctx.getConfig().url;
39
+ const pluginUrl = buildPluginUrl(target, parsePort(options.port));
40
+ // Get remote hashes (for dry-run we need to fetch them separately)
41
+ let remoteHashes = {};
42
+ let remoteIsEmpty = false;
43
+ if (!options.force) {
44
+ try {
45
+ const response = await agentGet(`${pluginUrl}/hashes`);
46
+ remoteHashes = response.hashes ?? {};
47
+ remoteIsEmpty = Object.keys(remoteHashes).length === 0;
48
+ }
49
+ catch (err) {
50
+ ctx.output.warn(`Could not fetch remote hashes: ${getErrorMessage(err)}`);
51
+ ctx.output.warn('Will do full deployment');
52
+ remoteIsEmpty = true;
53
+ }
54
+ }
55
+ else {
56
+ remoteIsEmpty = true;
57
+ }
58
+ // Calculate diff
59
+ const { changed, deleted } = calculateDiff(localHashes, remoteHashes);
60
+ if (remoteIsEmpty) {
61
+ ctx.output.info('Remote has no WAR, will upload full WAR file');
62
+ }
63
+ else {
64
+ progress.diff(changed.length, deleted.length, changed, deleted);
65
+ }
66
+ // Dry run - just show what would be deployed
67
+ if (options.dryRun) {
68
+ if (remoteIsEmpty) {
69
+ ctx.output.info(`Would upload full WAR (${Object.keys(localHashes).length} files)`);
70
+ return;
71
+ }
72
+ if (changed.length > 0) {
73
+ ctx.output.info('\nFiles to update:');
74
+ for (const file of changed.slice(0, 20)) {
75
+ console.log(` ${ANSI.green}+${ANSI.reset} ${file}`);
76
+ }
77
+ if (changed.length > 20) {
78
+ console.log(` ${ANSI.dim}... and ${changed.length - 20} more${ANSI.reset}`);
79
+ }
80
+ }
81
+ if (deleted.length > 0) {
82
+ ctx.output.info('\nFiles to delete:');
83
+ for (const file of deleted.slice(0, 20)) {
84
+ console.log(` ${ANSI.red}-${ANSI.reset} ${file}`);
85
+ }
86
+ if (deleted.length > 20) {
87
+ console.log(` ${ANSI.dim}... and ${deleted.length - 20} more${ANSI.reset}`);
88
+ }
89
+ }
90
+ if (changed.length === 0 && deleted.length === 0) {
91
+ progress.noChanges();
92
+ }
93
+ return;
94
+ }
95
+ // Deploy using deployToHost
96
+ progress.setHost(target);
97
+ const result = await deployToHost(ctx, target, parsePort(options.port), warFile, localHashes, options.force ?? false, progress);
98
+ if (result.success && result.result) {
99
+ progress.deployed(result.result);
100
+ }
101
+ else {
102
+ progress.failed(result.error ?? 'Unknown error');
103
+ process.exit(1);
104
+ }
105
+ }
106
+ catch (err) {
107
+ ctx.output.error(`Deployment failed: ${getErrorMessage(err)}`);
108
+ process.exit(1);
109
+ }
110
+ });
111
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-war.js","sourceRoot":"","sources":["../../../src/cli/commands/deploy-war.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import AdmZip from 'adm-zip';
2
+ import type { WarFileHashes } from '../../types.js';
3
+ import type { CLIPluginContext, DeployOperationResult } from '../types.js';
4
+ import { ProgressReporter } from '../progress.js';
5
+ export type { DeployOperationResult } from '../types.js';
6
+ /**
7
+ * Upload full WAR file to server with progress tracking and polling
8
+ *
9
+ * If the upload times out or receives 409 "Deployment in progress",
10
+ * polls the deployment status endpoint until completion.
11
+ */
12
+ export declare function uploadFullWar(ctx: CLIPluginContext, pluginUrl: string, warPath: string, progress: ProgressReporter): Promise<DeployOperationResult>;
13
+ /**
14
+ * Deploy files using chunked upload with progress
15
+ *
16
+ * The final chunk triggers the actual deployment, which may take several minutes.
17
+ * If timeout or 409 occurs, polls the deployment status endpoint.
18
+ */
19
+ export declare function deployChunked(ctx: CLIPluginContext, pluginUrl: string, zip: AdmZip, changed: string[], deleted: string[], progress: ProgressReporter): Promise<DeployOperationResult>;
20
+ /**
21
+ * Deploy to a single host with progress reporting
22
+ */
23
+ export declare function deployToHost(ctx: CLIPluginContext, host: string, port: number, warPath: string, localHashes: WarFileHashes, force: boolean, progress: ProgressReporter): Promise<DeployOperationResult>;
24
+ //# sourceMappingURL=deploy.d.ts.map