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.
- package/README.md +105 -126
- package/dist/commands/deploy.d.ts +9 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +29 -2
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/init.d.ts +7 -3
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +90 -166
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +14 -3
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +156 -49
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/logs.d.ts +1 -1
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +21 -25
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/release.d.ts +2 -0
- package/dist/commands/release.d.ts.map +1 -1
- package/dist/commands/release.js +7 -5
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/stage.d.ts +5 -0
- package/dist/commands/stage.d.ts.map +1 -1
- package/dist/commands/stage.js +58 -22
- package/dist/commands/stage.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +8 -36
- package/dist/commands/status.js.map +1 -1
- package/dist/config/loader.d.ts +14 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +18 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +52 -13
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +24 -1
- package/dist/config/types.js.map +1 -1
- package/dist/index.js +17 -16
- package/dist/index.js.map +1 -1
- package/dist/utils/shell.d.ts +7 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +10 -0
- package/dist/utils/shell.js.map +1 -1
- package/package.json +2 -2
- package/dist/utils/pm2.d.ts +0 -39
- package/dist/utils/pm2.d.ts.map +0 -1
- package/dist/utils/pm2.js +0 -83
- package/dist/utils/pm2.js.map +0 -1
- package/dist/utils/process-manager.d.ts +0 -37
- package/dist/utils/process-manager.d.ts.map +0 -1
- package/dist/utils/process-manager.js +0 -17
- package/dist/utils/process-manager.js.map +0 -1
- package/dist/utils/systemd.d.ts +0 -34
- package/dist/utils/systemd.d.ts.map +0 -1
- package/dist/utils/systemd.js +0 -79
- package/dist/utils/systemd.js.map +0 -1
- package/templates/post-receive.sh +0 -55
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/commands/logs.js
CHANGED
|
@@ -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
|
|
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
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
23
|
+
ssh.on('error', (error) => {
|
|
33
24
|
console.error(chalk.red(`Error: ${error.message}`));
|
|
34
25
|
});
|
|
35
26
|
}
|
|
36
27
|
else {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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;
|
|
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":"
|
|
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"}
|
package/dist/commands/release.js
CHANGED
|
@@ -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 =
|
|
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
|
|
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;
|
|
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"}
|
package/dist/commands/stage.d.ts
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/commands/stage.js
CHANGED
|
@@ -1,37 +1,73 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
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
|
|
37
|
+
const sourceDir = getSourceDir(config, workspaceRoot);
|
|
38
|
+
const deployRepoPath = getDeployRepoPath(config, workspaceRoot);
|
|
13
39
|
const artifacts = config.artifacts || DEFAULT_ARTIFACTS;
|
|
14
|
-
//
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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;
|
|
1
|
+
{"version":3,"file":"stage.js","sourceRoot":"","sources":["../../src/commands/stage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/commands/status.js
CHANGED
|
@@ -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
|
|
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(`
|
|
21
|
-
console.log(chalk.gray(` Process
|
|
22
|
-
console.log(chalk.gray(`
|
|
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":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
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"}
|
package/dist/config/loader.d.ts
CHANGED
|
@@ -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"}
|
package/dist/config/loader.js
CHANGED
|
@@ -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"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -1,42 +1,81 @@
|
|
|
1
|
-
|
|
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
|
-
/**
|
|
7
|
-
|
|
8
|
-
/**
|
|
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
|
|
29
|
+
/** PM2 home directory on server */
|
|
17
30
|
pm2Home?: string;
|
|
18
|
-
/**
|
|
19
|
-
|
|
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
|
-
/**
|
|
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
|
|
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,
|
|
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"}
|
package/dist/config/types.js
CHANGED
|
@@ -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
|
package/dist/config/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"
|
|
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"}
|