git-push-deploy-cli 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +105 -126
  2. package/dist/commands/deploy.d.ts +9 -1
  3. package/dist/commands/deploy.d.ts.map +1 -1
  4. package/dist/commands/deploy.js +29 -2
  5. package/dist/commands/deploy.js.map +1 -1
  6. package/dist/commands/init.d.ts +7 -3
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +90 -166
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/install.d.ts +14 -3
  11. package/dist/commands/install.d.ts.map +1 -1
  12. package/dist/commands/install.js +156 -49
  13. package/dist/commands/install.js.map +1 -1
  14. package/dist/commands/logs.d.ts +1 -1
  15. package/dist/commands/logs.d.ts.map +1 -1
  16. package/dist/commands/logs.js +21 -25
  17. package/dist/commands/logs.js.map +1 -1
  18. package/dist/commands/release.d.ts +2 -0
  19. package/dist/commands/release.d.ts.map +1 -1
  20. package/dist/commands/release.js +7 -5
  21. package/dist/commands/release.js.map +1 -1
  22. package/dist/commands/stage.d.ts +5 -0
  23. package/dist/commands/stage.d.ts.map +1 -1
  24. package/dist/commands/stage.js +58 -22
  25. package/dist/commands/stage.js.map +1 -1
  26. package/dist/commands/status.d.ts +1 -1
  27. package/dist/commands/status.d.ts.map +1 -1
  28. package/dist/commands/status.js +8 -36
  29. package/dist/commands/status.js.map +1 -1
  30. package/dist/config/loader.d.ts +14 -0
  31. package/dist/config/loader.d.ts.map +1 -1
  32. package/dist/config/loader.js +18 -0
  33. package/dist/config/loader.js.map +1 -1
  34. package/dist/config/types.d.ts +52 -13
  35. package/dist/config/types.d.ts.map +1 -1
  36. package/dist/config/types.js +24 -1
  37. package/dist/config/types.js.map +1 -1
  38. package/dist/index.js +17 -16
  39. package/dist/index.js.map +1 -1
  40. package/dist/utils/shell.d.ts +7 -0
  41. package/dist/utils/shell.d.ts.map +1 -1
  42. package/dist/utils/shell.js +10 -0
  43. package/dist/utils/shell.js.map +1 -1
  44. package/package.json +2 -2
  45. package/dist/utils/pm2.d.ts +0 -39
  46. package/dist/utils/pm2.d.ts.map +0 -1
  47. package/dist/utils/pm2.js +0 -83
  48. package/dist/utils/pm2.js.map +0 -1
  49. package/dist/utils/process-manager.d.ts +0 -37
  50. package/dist/utils/process-manager.d.ts.map +0 -1
  51. package/dist/utils/process-manager.js +0 -17
  52. package/dist/utils/process-manager.js.map +0 -1
  53. package/dist/utils/systemd.d.ts +0 -34
  54. package/dist/utils/systemd.d.ts.map +0 -1
  55. package/dist/utils/systemd.js +0 -79
  56. package/dist/utils/systemd.js.map +0 -1
  57. package/templates/post-receive.sh +0 -55
@@ -1 +1 @@
1
- {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAMA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC/F"}
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC/F"}
@@ -1,42 +1,38 @@
1
1
  import chalk from 'chalk';
2
2
  import { spawn } from 'child_process';
3
3
  import { getServiceConfig } from '../config/loader.js';
4
- import { exec } from '../utils/shell.js';
5
- import { exists } from '../utils/files.js';
6
4
  /**
7
- * Logs command - show deployment logs
5
+ * Logs command - show PM2 logs from server via SSH
8
6
  */
9
7
  export async function logsCommand(serviceName, options = {}) {
8
+ const config = getServiceConfig(serviceName);
9
+ const { host, sshOptions } = config.server;
10
+ const { processName, pm2Home } = config;
10
11
  const lines = options.lines || '50';
11
- const logFile = `/var/log/deploy-${serviceName}.log`;
12
- // Check if log file exists
13
- if (!exists(logFile)) {
14
- // Try to get config to show better error message
15
- try {
16
- getServiceConfig(serviceName);
17
- console.log(chalk.yellow(`Log file not found: ${logFile}`));
18
- console.log(chalk.gray('The service may not have been deployed yet.'));
19
- }
20
- catch {
21
- console.log(chalk.red(`Unknown service: ${serviceName}`));
22
- }
23
- return;
24
- }
12
+ const pm2Env = pm2Home ? `PM2_HOME=${pm2Home}` : '';
13
+ console.log(chalk.blue(`Logs for ${serviceName} from ${host}...`));
14
+ console.log('');
15
+ // Build SSH args with options
16
+ const sshBaseArgs = sshOptions ? sshOptions.split(' ') : [];
25
17
  if (options.follow) {
26
- console.log(chalk.blue(`Following logs for ${serviceName} (Ctrl+C to exit)...`));
27
- console.log('');
28
- // Use spawn for follow mode
29
- const tail = spawn('tail', ['-f', '-n', lines, logFile], {
18
+ // Use spawn for follow mode with SSH
19
+ const sshArgs = [...sshBaseArgs, host, `${pm2Env} pm2 logs ${processName} --lines ${lines}`];
20
+ const ssh = spawn('ssh', sshArgs, {
30
21
  stdio: 'inherit'
31
22
  });
32
- tail.on('error', (error) => {
23
+ ssh.on('error', (error) => {
33
24
  console.error(chalk.red(`Error: ${error.message}`));
34
25
  });
35
26
  }
36
27
  else {
37
- console.log(chalk.blue(`Deployment logs for ${serviceName} (last ${lines} lines):`));
38
- console.log('');
39
- exec(`tail -n ${lines} ${logFile}`);
28
+ // Non-follow mode: get last N lines
29
+ const sshArgs = [...sshBaseArgs, host, `${pm2Env} pm2 logs ${processName} --lines ${lines} --nostream`];
30
+ const ssh = spawn('ssh', sshArgs, {
31
+ stdio: 'inherit'
32
+ });
33
+ ssh.on('error', (error) => {
34
+ console.error(chalk.red(`Error: ${error.message}`));
35
+ });
40
36
  }
41
37
  }
42
38
  //# sourceMappingURL=logs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAO3C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,UAAuB,EAAE;IAC9E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;IACpC,MAAM,OAAO,GAAG,mBAAmB,WAAW,MAAM,CAAC;IAErD,2BAA2B;IAC3B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACrB,iDAAiD;QACjD,IAAI,CAAC;YACH,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,WAAW,sBAAsB,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,4BAA4B;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;YACvD,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,WAAW,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,CAAC,WAAW,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAOvD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,UAAuB,EAAE;IAC9E,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,WAAW,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,8BAA8B;IAC9B,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,qCAAqC;QACrC,MAAM,OAAO,GAAG,CAAC,GAAG,WAAW,EAAE,IAAI,EAAE,GAAG,MAAM,aAAa,WAAW,YAAY,KAAK,EAAE,CAAC,CAAC;QAC7F,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE;YAChC,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,oCAAoC;QACpC,MAAM,OAAO,GAAG,CAAC,GAAG,WAAW,EAAE,IAAI,EAAE,GAAG,MAAM,aAAa,WAAW,YAAY,KAAK,aAAa,CAAC,CAAC;QACxG,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE;YAChC,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -3,6 +3,8 @@ interface ReleaseOptions {
3
3
  }
4
4
  /**
5
5
  * Release command - commit and push deploy repository
6
+ *
7
+ * Pushes to the bare repo on the server, which triggers the post-receive hook.
6
8
  */
7
9
  export declare function releaseCommand(serviceName: string, options?: ReleaseOptions): Promise<void>;
8
10
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AAKA,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BrG"}
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AAIA,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BrG"}
@@ -1,29 +1,31 @@
1
1
  import chalk from 'chalk';
2
- import { getServiceConfig, getWorkspaceRoot } from '../config/loader.js';
2
+ import { getServiceConfig, getWorkspaceRoot, getDeployRepoPath } from '../config/loader.js';
3
3
  import { gitAddAll, gitCommit, gitPush, hasChanges, getCurrentBranch } from '../utils/git.js';
4
- import { joinPath } from '../utils/files.js';
5
4
  /**
6
5
  * Release command - commit and push deploy repository
6
+ *
7
+ * Pushes to the bare repo on the server, which triggers the post-receive hook.
7
8
  */
8
9
  export async function releaseCommand(serviceName, options = {}) {
9
10
  console.log(chalk.blue(`Releasing ${serviceName}...`));
10
11
  const config = getServiceConfig(serviceName);
11
12
  const workspaceRoot = getWorkspaceRoot();
12
- const deployRepoPath = joinPath(workspaceRoot, config.deployRepo);
13
+ const deployRepoPath = getDeployRepoPath(config, workspaceRoot);
13
14
  // Check for changes
14
15
  if (!hasChanges(deployRepoPath)) {
15
16
  console.log(chalk.yellow('No changes to release.'));
16
17
  return;
17
18
  }
18
19
  // Commit
19
- const message = options.message || `deploy: ${serviceName}`;
20
+ const timestamp = new Date().toISOString().replace('T', ' ').substring(0, 19);
21
+ const message = options.message || `deploy: ${serviceName} @ ${timestamp}`;
20
22
  gitAddAll(deployRepoPath);
21
23
  const committed = gitCommit(deployRepoPath, message);
22
24
  if (!committed) {
23
25
  console.log(chalk.yellow('No changes to commit.'));
24
26
  return;
25
27
  }
26
- // Push
28
+ // Push (this triggers the post-receive hook on the server)
27
29
  const branch = getCurrentBranch(deployRepoPath);
28
30
  console.log(chalk.gray(` Pushing to origin/${branch}...`));
29
31
  gitPush(deployRepoPath, 'origin', branch);
@@ -1 +1 @@
1
- {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAM7C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB,EAAE,UAA0B,EAAE;IACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,WAAW,KAAK,CAAC,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAElE,oBAAoB;IACpB,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,SAAS;IACT,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,WAAW,WAAW,EAAE,CAAC;IAC5D,SAAS,CAAC,cAAc,CAAC,CAAC;IAE1B,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,OAAO;IACP,MAAM,MAAM,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,KAAK,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAM9F;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB,EAAE,UAA0B,EAAE;IACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,WAAW,KAAK,CAAC,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAEhE,oBAAoB;IACpB,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,SAAS;IACT,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,WAAW,WAAW,MAAM,SAAS,EAAE,CAAC;IAC3E,SAAS,CAAC,cAAc,CAAC,CAAC;IAE1B,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,2DAA2D;IAC3D,MAAM,MAAM,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,KAAK,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -1,5 +1,10 @@
1
1
  /**
2
2
  * Stage command - copy build artifacts to deploy repository
3
+ *
4
+ * New architecture:
5
+ * - sourceDir: where the project is (e.g., kairox-api-node)
6
+ * - deployRepo: relative to sourceDir (e.g., deploy/staging)
7
+ * - artifacts: copied from sourceDir to deployRepo
3
8
  */
4
9
  export declare function stageCommand(serviceName: string): Promise<void>;
5
10
  //# sourceMappingURL=stage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stage.d.ts","sourceRoot":"","sources":["../../src/commands/stage.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCrE"}
1
+ {"version":3,"file":"stage.d.ts","sourceRoot":"","sources":["../../src/commands/stage.ts"],"names":[],"mappings":"AAmCA;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CrE"}
@@ -1,37 +1,73 @@
1
1
  import chalk from 'chalk';
2
- import { getServiceConfig, getWorkspaceRoot } from '../config/loader.js';
3
- import { DEFAULT_ARTIFACTS } from '../config/types.js';
2
+ import { execSync } from 'child_process';
3
+ import { getServiceConfig, getWorkspaceRoot, getSourceDir, getDeployRepoPath } from '../config/loader.js';
4
+ import { DEFAULT_ARTIFACTS, parseSshPort, buildSshUrl } from '../config/types.js';
4
5
  import { ensureDir, removeDir, copy, exists, joinPath } from '../utils/files.js';
6
+ /**
7
+ * Initialize deploy repo if it doesn't exist (lazy init)
8
+ * Creates git repo and adds remote pointing to server bare repo
9
+ */
10
+ function initDeployRepoIfNeeded(deployRepoPath, host, bareRepo, sshOptions) {
11
+ if (exists(joinPath(deployRepoPath, '.git'))) {
12
+ return false; // Already initialized
13
+ }
14
+ console.log(chalk.blue(' Initializing deploy repository...'));
15
+ ensureDir(deployRepoPath);
16
+ // git init
17
+ execSync('git init', { cwd: deployRepoPath, stdio: 'pipe' });
18
+ // Add remote with SSH URL
19
+ const port = parseSshPort(sshOptions);
20
+ const sshUrl = buildSshUrl(host, bareRepo, port);
21
+ execSync(`git remote add origin ${sshUrl}`, { cwd: deployRepoPath, stdio: 'pipe' });
22
+ console.log(chalk.gray(` Remote: ${sshUrl}`));
23
+ return true;
24
+ }
5
25
  /**
6
26
  * Stage command - copy build artifacts to deploy repository
27
+ *
28
+ * New architecture:
29
+ * - sourceDir: where the project is (e.g., kairox-api-node)
30
+ * - deployRepo: relative to sourceDir (e.g., deploy/staging)
31
+ * - artifacts: copied from sourceDir to deployRepo
7
32
  */
8
33
  export async function stageCommand(serviceName) {
9
34
  console.log(chalk.blue(`Staging ${serviceName}...`));
10
35
  const config = getServiceConfig(serviceName);
11
36
  const workspaceRoot = getWorkspaceRoot();
12
- const deployRepoPath = joinPath(workspaceRoot, config.deployRepo);
37
+ const sourceDir = getSourceDir(config, workspaceRoot);
38
+ const deployRepoPath = getDeployRepoPath(config, workspaceRoot);
13
39
  const artifacts = config.artifacts || DEFAULT_ARTIFACTS;
14
- // Stage each package
15
- for (const pkg of config.packages) {
16
- const pkgPath = joinPath(workspaceRoot, pkg);
17
- const destPath = joinPath(deployRepoPath, pkg);
18
- if (!exists(pkgPath)) {
19
- console.log(chalk.yellow(` Warning: Package ${pkg} not found at ${pkgPath}`));
20
- continue;
40
+ // Validate source directory exists
41
+ if (!exists(sourceDir)) {
42
+ throw new Error(`Source directory not found: ${sourceDir}`);
43
+ }
44
+ console.log(chalk.gray(` Source: ${config.sourceDir}`));
45
+ console.log(chalk.gray(` Deploy: ${config.sourceDir}/${config.deployRepo}`));
46
+ // Lazy init deploy repo
47
+ const { host, bareRepo, sshOptions } = config.server;
48
+ const wasInitialized = initDeployRepoIfNeeded(deployRepoPath, host, bareRepo, sshOptions);
49
+ if (wasInitialized) {
50
+ console.log(chalk.green(' ✓ Deploy repo initialized'));
51
+ }
52
+ // Copy artifacts from sourceDir to deployRepo
53
+ let copiedCount = 0;
54
+ for (const artifact of artifacts) {
55
+ const srcPath = joinPath(sourceDir, artifact);
56
+ const destPath = joinPath(deployRepoPath, artifact);
57
+ if (exists(srcPath)) {
58
+ // Remove old artifact first (clean copy)
59
+ removeDir(destPath);
60
+ copy(srcPath, destPath);
61
+ console.log(chalk.gray(` ${artifact}`));
62
+ copiedCount++;
21
63
  }
22
- // Remove old staged files
23
- removeDir(destPath);
24
- ensureDir(destPath);
25
- // Copy artifacts
26
- for (const artifact of artifacts) {
27
- const srcArtifact = joinPath(pkgPath, artifact);
28
- const destArtifact = joinPath(destPath, artifact);
29
- if (exists(srcArtifact)) {
30
- copy(srcArtifact, destArtifact);
31
- console.log(chalk.gray(` ${pkg}/${artifact}`));
32
- }
64
+ else {
65
+ console.log(chalk.yellow(` Warning: ${artifact} not found in ${config.sourceDir}`));
33
66
  }
34
67
  }
35
- console.log(chalk.green(`✓ Staged ${config.packages.length} package(s) to ${config.deployRepo}`));
68
+ if (copiedCount === 0) {
69
+ throw new Error('No artifacts were copied. Check your artifacts config and build output.');
70
+ }
71
+ console.log(chalk.green(`✓ Staged ${copiedCount} artifact(s) to ${config.sourceDir}/${config.deployRepo}`));
36
72
  }
37
73
  //# sourceMappingURL=stage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stage.js","sourceRoot":"","sources":["../../src/commands/stage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEjF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,WAAW,KAAK,CAAC,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,iBAAiB,CAAC;IAExD,qBAAqB;IACrB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QAE/C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,GAAG,iBAAiB,OAAO,EAAE,CAAC,CAAC,CAAC;YAC/E,SAAS;QACX,CAAC;QAED,0BAA0B;QAC1B,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpB,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEpB,iBAAiB;QACjB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAElD,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,QAAQ,CAAC,MAAM,kBAAkB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACpG,CAAC"}
1
+ {"version":3,"file":"stage.js","sourceRoot":"","sources":["../../src/commands/stage.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Status command - show all services and process manager status
2
+ * Status command - show all configured services
3
3
  */
4
4
  export declare function statusCommand(): Promise<void>;
5
5
  //# sourceMappingURL=status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAqDnD"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA2BnD"}
@@ -1,9 +1,7 @@
1
1
  import chalk from 'chalk';
2
2
  import { loadConfig, listServices } from '../config/loader.js';
3
- import { createProcessManager } from '../utils/process-manager.js';
4
- import { commandExists } from '../utils/shell.js';
5
3
  /**
6
- * Status command - show all services and process manager status
4
+ * Status command - show all configured services
7
5
  */
8
6
  export async function statusCommand() {
9
7
  console.log(chalk.blue('Service Status'));
@@ -15,12 +13,15 @@ export async function statusCommand() {
15
13
  console.log(chalk.white('Configured Services:'));
16
14
  for (const name of services) {
17
15
  const svc = config.services[name];
18
- const pmType = svc.processManager || 'pm2';
19
16
  console.log(chalk.gray(` ${name}`));
20
- console.log(chalk.gray(` Process Manager: ${pmType}`));
21
- console.log(chalk.gray(` Process Name: ${svc.processName}`));
22
- console.log(chalk.gray(` Packages: ${svc.packages.join(', ')}`));
17
+ console.log(chalk.gray(` Host: ${svc.server.host}`));
18
+ console.log(chalk.gray(` Process: ${svc.processName}`));
19
+ console.log(chalk.gray(` Source: ${svc.sourceDir}`));
20
+ console.log(chalk.gray(` Deploy: ${svc.sourceDir}/${svc.deployRepo}`));
23
21
  console.log(chalk.gray(` Target: ${svc.server.targetDir}`));
22
+ if (svc.environment) {
23
+ console.log(chalk.gray(` Environment: ${svc.environment}`));
24
+ }
24
25
  }
25
26
  console.log('');
26
27
  }
@@ -28,34 +29,5 @@ export async function statusCommand() {
28
29
  console.log(chalk.yellow('No .git-deploy.json found in current directory tree.'));
29
30
  console.log('');
30
31
  }
31
- // Show PM2 status if available
32
- if (commandExists('pm2')) {
33
- console.log(chalk.white('PM2 Processes:'));
34
- try {
35
- const pm2 = createProcessManager('pm2');
36
- const status = pm2.list();
37
- console.log(status);
38
- }
39
- catch {
40
- console.log(chalk.gray(' No PM2 processes running or PM2 not accessible.'));
41
- }
42
- }
43
- // Show systemd status if available
44
- if (commandExists('systemctl')) {
45
- console.log(chalk.white('Systemd Services (running):'));
46
- try {
47
- const systemd = createProcessManager('systemd');
48
- const status = systemd.list();
49
- // Filter to show only relevant lines
50
- const lines = status.split('\n').slice(0, 10);
51
- console.log(chalk.gray(lines.join('\n')));
52
- if (status.split('\n').length > 10) {
53
- console.log(chalk.gray(' ... (use systemctl for full list)'));
54
- }
55
- }
56
- catch {
57
- console.log(chalk.gray(' Could not query systemd.'));
58
- }
59
- }
60
32
  }
61
33
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,2BAA2B;IAC3B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAE5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACjD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAC/D,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sDAAsD,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -15,6 +15,20 @@ export declare function getServiceConfig(serviceName: string, configPath?: strin
15
15
  * Get workspace root (directory containing .git-deploy.json)
16
16
  */
17
17
  export declare function getWorkspaceRoot(): string;
18
+ /**
19
+ * Get absolute path to source directory
20
+ * @param config Service configuration
21
+ * @param workspaceRoot Workspace root path
22
+ * @returns Absolute path to sourceDir (e.g., /workspace/kairox-api-node)
23
+ */
24
+ export declare function getSourceDir(config: ServiceConfig, workspaceRoot: string): string;
25
+ /**
26
+ * Get absolute path to deploy repository
27
+ * @param config Service configuration
28
+ * @param workspaceRoot Workspace root path
29
+ * @returns Absolute path to deployRepo (e.g., /workspace/kairox-api-node/deploy/staging)
30
+ */
31
+ export declare function getDeployRepoPath(config: ServiceConfig, workspaceRoot: string): string;
18
32
  /**
19
33
  * List all configured services
20
34
  */
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI9D;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAY9E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CAgB5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAUxF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAMzC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAG1D"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI9D;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAY9E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CAgB5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAUxF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAMzC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAEtF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAG1D"}
@@ -56,6 +56,24 @@ export function getWorkspaceRoot() {
56
56
  }
57
57
  return dirname(configPath);
58
58
  }
59
+ /**
60
+ * Get absolute path to source directory
61
+ * @param config Service configuration
62
+ * @param workspaceRoot Workspace root path
63
+ * @returns Absolute path to sourceDir (e.g., /workspace/kairox-api-node)
64
+ */
65
+ export function getSourceDir(config, workspaceRoot) {
66
+ return join(workspaceRoot, config.sourceDir);
67
+ }
68
+ /**
69
+ * Get absolute path to deploy repository
70
+ * @param config Service configuration
71
+ * @param workspaceRoot Workspace root path
72
+ * @returns Absolute path to deployRepo (e.g., /workspace/kairox-api-node/deploy/staging)
73
+ */
74
+ export function getDeployRepoPath(config, workspaceRoot) {
75
+ return join(workspaceRoot, config.sourceDir, config.deployRepo);
76
+ }
59
77
  /**
60
78
  * List all configured services
61
79
  */
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGrC,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAE3C;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAC7D,IAAI,UAAU,GAAG,QAAQ,CAAC;IAE1B,OAAO,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACrD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,UAAmB;IAC5C,MAAM,IAAI,GAAG,UAAU,IAAI,cAAc,EAAE,CAAC;IAE5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,eAAe,eAAe,sDAAsD,CAAC,CAAC;IACxG,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,UAAmB;IACvE,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAEnD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,YAAY,WAAW,qCAAqC,SAAS,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,eAAe,eAAe,aAAa,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,UAAmB;IAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGrC,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAE3C;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAC7D,IAAI,UAAU,GAAG,QAAQ,CAAC;IAE1B,OAAO,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACrD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,UAAmB;IAC5C,MAAM,IAAI,GAAG,UAAU,IAAI,cAAc,EAAE,CAAC;IAE5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,eAAe,eAAe,sDAAsD,CAAC,CAAC;IACxG,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,UAAmB;IACvE,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAEnD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,YAAY,WAAW,qCAAqC,SAAS,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,eAAe,eAAe,aAAa,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAqB,EAAE,aAAqB;IACvE,OAAO,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAqB,EAAE,aAAqB;IAC5E,OAAO,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,UAAmB;IAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC"}
@@ -1,42 +1,81 @@
1
- import type { ProcessManagerType } from '../utils/process-manager.js';
1
+ /**
2
+ * Process manager type
3
+ */
4
+ export type ProcessManagerType = 'pm2' | 'systemd';
5
+ /**
6
+ * Environment type for deployment
7
+ */
8
+ export type EnvironmentType = 'production' | 'staging' | 'development';
2
9
  /**
3
10
  * Service configuration for git-deploy
11
+ *
12
+ * New architecture: deploy/ folder inside source project
13
+ * Example:
14
+ * sourceDir: "kairox-api-node"
15
+ * deployRepo: "deploy/staging" (relative to sourceDir)
16
+ * → Full path: workspace/kairox-api-node/deploy/staging
4
17
  */
5
18
  export interface ServiceConfig {
6
- /** Packages to deploy (monorepo support) */
7
- packages: string[];
8
- /** Package with package.json for npm install */
9
- mainPackage: string;
10
- /** Path to local deploy repository (relative to workspace root) */
19
+ /** Source directory containing the project (relative to workspace root) */
20
+ sourceDir: string;
21
+ /** Path to deploy repository (relative to sourceDir) */
11
22
  deployRepo: string;
23
+ /** Files/dirs to copy to deploy repo */
24
+ artifacts: string[];
12
25
  /** Process manager type (default: 'pm2') */
13
26
  processManager?: ProcessManagerType;
14
27
  /** Process name (PM2 name or systemd service name) */
15
28
  processName: string;
16
- /** PM2 home directory (optional, only for PM2) */
29
+ /** PM2 home directory on server */
17
30
  pm2Home?: string;
18
- /** Files/dirs to copy (default: dist, package.json, package-lock.json) */
19
- artifacts?: string[];
31
+ /** User to run PM2 commands as (via sudo -u) */
32
+ pm2User?: string;
33
+ /** Environment type (production, staging, development) */
34
+ environment?: EnvironmentType;
35
+ /** Environment variables to write to .env file on server */
36
+ env?: Record<string, string | number | boolean>;
20
37
  /** Server-side configuration */
21
38
  server: {
22
- /** Where to install on server */
39
+ /** SSH host (user@hostname) */
40
+ host: string;
41
+ /** Additional SSH options (e.g., "-p 6771 -4") */
42
+ sshOptions?: string;
43
+ /** Where to install on server (target directory) */
23
44
  targetDir: string;
24
45
  /** Path to bare git repo on server */
25
46
  bareRepo: string;
26
- /** Unix user for file ownership */
27
- user?: string;
28
- /** Unix group (default: deploy-<service>) */
47
+ /** Unix group for shared access (created if not exists) */
29
48
  group?: string;
30
49
  };
50
+ /** @deprecated Use sourceDir instead */
51
+ packages?: string[];
52
+ /** @deprecated Use sourceDir instead */
53
+ mainPackage?: string;
31
54
  }
32
55
  /**
33
56
  * Root configuration file (.git-deploy.json)
34
57
  */
35
58
  export interface DeployConfig {
59
+ /** Port ranges for different environments (informational) */
60
+ portRanges?: Record<string, Record<string, number>>;
36
61
  services: Record<string, ServiceConfig>;
37
62
  }
38
63
  /**
39
64
  * Default artifacts to copy if not specified
40
65
  */
41
66
  export declare const DEFAULT_ARTIFACTS: string[];
67
+ /**
68
+ * Parse SSH options to extract port
69
+ * @param sshOptions e.g. "-p 6771 -4"
70
+ * @returns port number or undefined
71
+ */
72
+ export declare function parseSshPort(sshOptions?: string): number | undefined;
73
+ /**
74
+ * Build SSH URL for git remote
75
+ * @param host e.g. "aschulz@symbio-raspi5"
76
+ * @param bareRepo e.g. "/git/sym/deploy-kairox/staging/kairox-api"
77
+ * @param port e.g. 6771
78
+ * @returns e.g. "ssh://aschulz@symbio-raspi5:6771/git/sym/deploy-kairox/staging/kairox-api"
79
+ */
80
+ export declare function buildSshUrl(host: string, bareRepo: string, port?: number): string;
42
81
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IAEpB,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC;IAEnB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,kBAAkB,CAAC;IAEpC,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IAEpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB,gCAAgC;IAChC,MAAM,EAAE;QACN,iCAAiC;QACjC,SAAS,EAAE,MAAM,CAAC;QAElB,sCAAsC;QACtC,QAAQ,EAAE,MAAM,CAAC;QAEjB,mCAAmC;QACnC,IAAI,CAAC,EAAE,MAAM,CAAC;QAEd,6CAA6C;QAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,UAK7B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,SAAS,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,aAAa,CAAC;AAEvE;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAElB,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IAEnB,wCAAwC;IACxC,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,kBAAkB,CAAC;IAEpC,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IAEpB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,eAAe,CAAC;IAE9B,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IAEhD,gCAAgC;IAChC,MAAM,EAAE;QACN,+BAA+B;QAC/B,IAAI,EAAE,MAAM,CAAC;QAEb,kDAAkD;QAClD,UAAU,CAAC,EAAE,MAAM,CAAC;QAEpB,oDAAoD;QACpD,SAAS,EAAE,MAAM,CAAC;QAElB,sCAAsC;QACtC,QAAQ,EAAE,MAAM,CAAC;QAEjB,2DAA2D;QAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAGF,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAEpD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,UAI7B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIpE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAKjF"}
@@ -4,7 +4,30 @@
4
4
  export const DEFAULT_ARTIFACTS = [
5
5
  'dist',
6
6
  'package.json',
7
- 'package-lock.json',
8
7
  'ecosystem.config.cjs'
9
8
  ];
9
+ /**
10
+ * Parse SSH options to extract port
11
+ * @param sshOptions e.g. "-p 6771 -4"
12
+ * @returns port number or undefined
13
+ */
14
+ export function parseSshPort(sshOptions) {
15
+ if (!sshOptions)
16
+ return undefined;
17
+ const match = sshOptions.match(/-p\s*(\d+)/);
18
+ return match ? parseInt(match[1], 10) : undefined;
19
+ }
20
+ /**
21
+ * Build SSH URL for git remote
22
+ * @param host e.g. "aschulz@symbio-raspi5"
23
+ * @param bareRepo e.g. "/git/sym/deploy-kairox/staging/kairox-api"
24
+ * @param port e.g. 6771
25
+ * @returns e.g. "ssh://aschulz@symbio-raspi5:6771/git/sym/deploy-kairox/staging/kairox-api"
26
+ */
27
+ export function buildSshUrl(host, bareRepo, port) {
28
+ if (port) {
29
+ return `ssh://${host}:${port}${bareRepo}`;
30
+ }
31
+ return `ssh://${host}${bareRepo}`;
32
+ }
10
33
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAkDA;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,MAAM;IACN,cAAc;IACd,mBAAmB;IACnB,sBAAsB;CACvB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAkFA;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,MAAM;IACN,cAAc;IACd,sBAAsB;CACvB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,UAAmB;IAC9C,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,QAAgB,EAAE,IAAa;IACvE,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,SAAS,IAAI,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,SAAS,IAAI,GAAG,QAAQ,EAAE,CAAC;AACpC,CAAC"}