git-push-deploy-cli 0.1.1 → 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 +72 -38
- package/dist/commands/deploy.d.ts +9 -2
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +26 -21
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/init.d.ts +4 -3
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +116 -13
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +21 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +174 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +5 -3
- 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.map +1 -1
- package/dist/commands/status.js +5 -1
- 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 +47 -9
- 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 +16 -9
- package/dist/index.js.map +1 -1
- package/dist/utils/shell.d.ts +1 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +4 -3
- package/dist/utils/shell.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import { existsSync, writeFileSync, mkdirSync } from 'fs';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
import { getServiceConfig, findConfigFile } from '../config/loader.js';
|
|
6
|
+
/**
|
|
7
|
+
* Generate .env file content from config env object
|
|
8
|
+
*/
|
|
9
|
+
function generateEnvContent(env) {
|
|
10
|
+
return Object.entries(env)
|
|
11
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
12
|
+
.join('\n');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Execute shell command with logging
|
|
16
|
+
*/
|
|
17
|
+
function exec(cmd, options = {}) {
|
|
18
|
+
if (!options.silent) {
|
|
19
|
+
console.log(chalk.gray(`$ ${cmd}`));
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
execSync(cmd, {
|
|
23
|
+
cwd: options.cwd,
|
|
24
|
+
stdio: options.silent ? 'pipe' : 'inherit',
|
|
25
|
+
env: { ...process.env }
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
throw new Error(`Command failed: ${cmd}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Execute command as a specific user via sudo
|
|
34
|
+
*/
|
|
35
|
+
function execAsUser(cmd, user, options = {}) {
|
|
36
|
+
// Build environment exports
|
|
37
|
+
const envExports = options.env
|
|
38
|
+
? Object.entries(options.env).map(([k, v]) => `export ${k}="${v}"`).join('; ') + '; '
|
|
39
|
+
: '';
|
|
40
|
+
const fullCmd = `sudo -u ${user} bash -c '${envExports}${cmd.replace(/'/g, "'\\''")}'`;
|
|
41
|
+
console.log(chalk.gray(`$ ${fullCmd}`));
|
|
42
|
+
try {
|
|
43
|
+
execSync(fullCmd, {
|
|
44
|
+
cwd: options.cwd,
|
|
45
|
+
stdio: 'inherit',
|
|
46
|
+
env: { ...process.env }
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
throw new Error(`Command failed: ${fullCmd}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Install command - runs on server after git push (called by post-receive hook)
|
|
55
|
+
*
|
|
56
|
+
* Environment variables from hook:
|
|
57
|
+
* - GPD_TARGET_DIR: Where to install (e.g., /opt/kairox/staging/kairox-api)
|
|
58
|
+
* - GPD_GIT_DIR: Bare repo path (e.g., /git/sym/deploy-kairox/staging/kairox-api)
|
|
59
|
+
* - GPD_SERVICE: Service name (e.g., kairox-api-staging)
|
|
60
|
+
* - PM2_HOME: PM2 home directory (optional)
|
|
61
|
+
*
|
|
62
|
+
* Steps:
|
|
63
|
+
* 1. git checkout from bare repo to target dir
|
|
64
|
+
* 2. Generate .env file from config
|
|
65
|
+
* 3. npm install --omit=dev
|
|
66
|
+
* 4. PM2 restart
|
|
67
|
+
*/
|
|
68
|
+
export async function installCommand(serviceName, options = {}) {
|
|
69
|
+
console.log(chalk.blue(`Installing ${serviceName}...`));
|
|
70
|
+
// Get paths from environment (set by hook) or use config
|
|
71
|
+
const targetDir = process.env.GPD_TARGET_DIR;
|
|
72
|
+
const gitDir = process.env.GPD_GIT_DIR;
|
|
73
|
+
if (!targetDir || !gitDir) {
|
|
74
|
+
throw new Error('GPD_TARGET_DIR and GPD_GIT_DIR must be set. This command should be run by the post-receive hook.');
|
|
75
|
+
}
|
|
76
|
+
// Find config - on server it should be at /etc/gpd/<service>.json or passed via -c
|
|
77
|
+
const configPath = options.configPath || findConfigFile();
|
|
78
|
+
if (!configPath) {
|
|
79
|
+
throw new Error('.git-deploy.json not found. Specify with -c option.');
|
|
80
|
+
}
|
|
81
|
+
const config = getServiceConfig(serviceName, configPath);
|
|
82
|
+
const { processName, pm2Home, pm2User, env } = config;
|
|
83
|
+
console.log(chalk.gray(` Target: ${targetDir}`));
|
|
84
|
+
console.log(chalk.gray(` Git dir: ${gitDir}`));
|
|
85
|
+
if (pm2User)
|
|
86
|
+
console.log(chalk.gray(` PM2 user: ${pm2User}`));
|
|
87
|
+
// Determine which user to run commands as
|
|
88
|
+
const runUser = pm2User || process.env.USER || 'root';
|
|
89
|
+
const userHome = pm2User ? `/home/${pm2User}` : process.env.HOME || '/root';
|
|
90
|
+
// Environment for npm/pm2 commands
|
|
91
|
+
const cmdEnv = {};
|
|
92
|
+
if (pm2Home)
|
|
93
|
+
cmdEnv.PM2_HOME = pm2Home;
|
|
94
|
+
if (pm2User) {
|
|
95
|
+
cmdEnv.HOME = `/opt/kairox`; // Use app directory as home for npm cache
|
|
96
|
+
}
|
|
97
|
+
// 1. Git checkout from bare repo to target dir
|
|
98
|
+
console.log(chalk.blue('Checking out files...'));
|
|
99
|
+
const checkoutCmd = `git --work-tree="${targetDir}" --git-dir="${gitDir}" checkout -f`;
|
|
100
|
+
if (pm2User) {
|
|
101
|
+
execAsUser(checkoutCmd, pm2User);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
exec(checkoutCmd);
|
|
105
|
+
}
|
|
106
|
+
// 2. Generate .env file from config
|
|
107
|
+
if (env && Object.keys(env).length > 0) {
|
|
108
|
+
console.log(chalk.blue('Generating .env file...'));
|
|
109
|
+
const envPath = join(targetDir, '.env');
|
|
110
|
+
const envContent = generateEnvContent(env);
|
|
111
|
+
writeFileSync(envPath, envContent + '\n');
|
|
112
|
+
console.log(chalk.gray(` Written to ${envPath}`));
|
|
113
|
+
// Fix ownership if running as different user
|
|
114
|
+
if (pm2User) {
|
|
115
|
+
exec(`sudo chown ${pm2User}:${pm2User} "${envPath}"`, { silent: true });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// 3. Create logs directory if needed
|
|
119
|
+
const logsDir = join(targetDir, 'logs');
|
|
120
|
+
if (!existsSync(logsDir)) {
|
|
121
|
+
mkdirSync(logsDir, { recursive: true });
|
|
122
|
+
if (pm2User) {
|
|
123
|
+
exec(`sudo chown ${pm2User}:${pm2User} "${logsDir}"`, { silent: true });
|
|
124
|
+
}
|
|
125
|
+
console.log(chalk.gray(` Created ${logsDir}`));
|
|
126
|
+
}
|
|
127
|
+
// 4. npm install
|
|
128
|
+
console.log(chalk.blue('Installing dependencies...'));
|
|
129
|
+
const npmCmd = `npm install --omit=dev --cache=/opt/kairox/.npm`;
|
|
130
|
+
if (pm2User) {
|
|
131
|
+
execAsUser(npmCmd, pm2User, { cwd: targetDir, env: cmdEnv });
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
exec(npmCmd, { cwd: targetDir });
|
|
135
|
+
}
|
|
136
|
+
// 5. PM2 restart (or start if not running)
|
|
137
|
+
console.log(chalk.blue('Restarting PM2 process...'));
|
|
138
|
+
// Check if process exists and restart, otherwise start
|
|
139
|
+
const pm2RestartCmd = `pm2 describe ${processName} > /dev/null 2>&1 && pm2 restart ${processName} --update-env || pm2 start ecosystem.config.cjs --env ${config.environment || 'production'}`;
|
|
140
|
+
if (pm2User) {
|
|
141
|
+
execAsUser(pm2RestartCmd, pm2User, { cwd: targetDir, env: cmdEnv });
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
let fullPm2Cmd = pm2RestartCmd;
|
|
145
|
+
if (pm2Home)
|
|
146
|
+
fullPm2Cmd = `PM2_HOME=${pm2Home} ${fullPm2Cmd}`;
|
|
147
|
+
exec(fullPm2Cmd, { cwd: targetDir });
|
|
148
|
+
}
|
|
149
|
+
// 6. PM2 save
|
|
150
|
+
console.log(chalk.blue('Saving PM2 state...'));
|
|
151
|
+
const pm2SaveCmd = 'pm2 save';
|
|
152
|
+
if (pm2User) {
|
|
153
|
+
execAsUser(pm2SaveCmd, pm2User, { env: cmdEnv });
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
let fullSaveCmd = pm2SaveCmd;
|
|
157
|
+
if (pm2Home)
|
|
158
|
+
fullSaveCmd = `PM2_HOME=${pm2Home} ${fullSaveCmd}`;
|
|
159
|
+
exec(fullSaveCmd);
|
|
160
|
+
}
|
|
161
|
+
console.log(chalk.green(`✓ Installed ${serviceName}`));
|
|
162
|
+
// Show status
|
|
163
|
+
const pm2StatusCmd = 'pm2 status';
|
|
164
|
+
if (pm2User) {
|
|
165
|
+
execAsUser(pm2StatusCmd, pm2User, { env: cmdEnv });
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
let fullStatusCmd = pm2StatusCmd;
|
|
169
|
+
if (pm2Home)
|
|
170
|
+
fullStatusCmd = `PM2_HOME=${pm2Home} ${fullStatusCmd}`;
|
|
171
|
+
exec(fullStatusCmd);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAMvE;;GAEG;AACH,SAAS,kBAAkB,CAAC,GAA8C;IACxE,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;SACvB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;SACxC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,IAAI,CAAC,GAAW,EAAE,UAA8C,EAAE;IACzE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,CAAC;QACH,QAAQ,CAAC,GAAG,EAAE;YACZ,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC1C,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,GAAW,EAAE,IAAY,EAAE,UAA0D,EAAE;IACzG,4BAA4B;IAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG;QAC5B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;QACrF,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,IAAI,aAAa,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IAExC,IAAI,CAAC;QACH,QAAQ,CAAC,OAAO,EAAE;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB,EAAE,UAA0B,EAAE;IACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,WAAW,KAAK,CAAC,CAAC,CAAC;IAExD,yDAAyD;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAEvC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,kGAAkG,CAAC,CAAC;IACtH,CAAC;IAED,mFAAmF;IACnF,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,cAAc,EAAE,CAAC;IAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAEtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC,CAAC;IAChD,IAAI,OAAO;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC,CAAC;IAE/D,0CAA0C;IAC1C,MAAM,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC;IAE5E,mCAAmC;IACnC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,OAAO;QAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC;IACvC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,0CAA0C;IACzE,CAAC;IAED,+CAA+C;IAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,oBAAoB,SAAS,gBAAgB,MAAM,eAAe,CAAC;IACvF,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,WAAW,CAAC,CAAC;IACpB,CAAC;IAED,oCAAoC;IACpC,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC3C,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC,CAAC;QAEnD,6CAA6C;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,cAAc,OAAO,IAAI,OAAO,KAAK,OAAO,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,cAAc,OAAO,IAAI,OAAO,KAAK,OAAO,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,iBAAiB;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,iDAAiD,CAAC;IACjE,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,2CAA2C;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAErD,uDAAuD;IACvD,MAAM,aAAa,GAAG,gBAAgB,WAAW,oCAAoC,WAAW,yDAAyD,MAAM,CAAC,WAAW,IAAI,YAAY,EAAE,CAAC;IAE9L,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,IAAI,UAAU,GAAG,aAAa,CAAC;QAC/B,IAAI,OAAO;YAAE,UAAU,GAAG,YAAY,OAAO,IAAI,UAAU,EAAE,CAAC;QAC9D,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,cAAc;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,UAAU,CAAC;IAC9B,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,IAAI,WAAW,GAAG,UAAU,CAAC;QAC7B,IAAI,OAAO;YAAE,WAAW,GAAG,YAAY,OAAO,IAAI,WAAW,EAAE,CAAC;QAChE,IAAI,CAAC,WAAW,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC,CAAC;IAEvD,cAAc;IACd,MAAM,YAAY,GAAG,YAAY,CAAC;IAClC,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,IAAI,aAAa,GAAG,YAAY,CAAC;QACjC,IAAI,OAAO;YAAE,aAAa,GAAG,YAAY,OAAO,IAAI,aAAa,EAAE,CAAC;QACpE,IAAI,CAAC,aAAa,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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
|
@@ -6,15 +6,17 @@ import { getServiceConfig } from '../config/loader.js';
|
|
|
6
6
|
*/
|
|
7
7
|
export async function logsCommand(serviceName, options = {}) {
|
|
8
8
|
const config = getServiceConfig(serviceName);
|
|
9
|
-
const { host } = config.server;
|
|
9
|
+
const { host, sshOptions } = config.server;
|
|
10
10
|
const { processName, pm2Home } = config;
|
|
11
11
|
const lines = options.lines || '50';
|
|
12
12
|
const pm2Env = pm2Home ? `PM2_HOME=${pm2Home}` : '';
|
|
13
13
|
console.log(chalk.blue(`Logs for ${serviceName} from ${host}...`));
|
|
14
14
|
console.log('');
|
|
15
|
+
// Build SSH args with options
|
|
16
|
+
const sshBaseArgs = sshOptions ? sshOptions.split(' ') : [];
|
|
15
17
|
if (options.follow) {
|
|
16
18
|
// Use spawn for follow mode with SSH
|
|
17
|
-
const sshArgs = [host, `${pm2Env} pm2 logs ${processName} --lines ${lines}`];
|
|
19
|
+
const sshArgs = [...sshBaseArgs, host, `${pm2Env} pm2 logs ${processName} --lines ${lines}`];
|
|
18
20
|
const ssh = spawn('ssh', sshArgs, {
|
|
19
21
|
stdio: 'inherit'
|
|
20
22
|
});
|
|
@@ -24,7 +26,7 @@ export async function logsCommand(serviceName, options = {}) {
|
|
|
24
26
|
}
|
|
25
27
|
else {
|
|
26
28
|
// Non-follow mode: get last N lines
|
|
27
|
-
const sshArgs = [host, `${pm2Env} pm2 logs ${processName} --lines ${lines} --nostream`];
|
|
29
|
+
const sshArgs = [...sshBaseArgs, host, `${pm2Env} pm2 logs ${processName} --lines ${lines} --nostream`];
|
|
28
30
|
const ssh = spawn('ssh', sshArgs, {
|
|
29
31
|
stdio: 'inherit'
|
|
30
32
|
});
|
|
@@ -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;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,GAAG,MAAM,CAAC,MAAM,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":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC1G,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEjF;;;GAGG;AACH,SAAS,sBAAsB,CAC7B,cAAsB,EACtB,IAAY,EACZ,QAAgB,EAChB,UAAmB;IAEnB,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC,CAAC,sBAAsB;IACtC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAC/D,SAAS,CAAC,cAAc,CAAC,CAAC;IAE1B,WAAW;IACX,QAAQ,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAE7D,0BAA0B;IAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjD,QAAQ,CAAC,yBAAyB,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAEpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;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,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,iBAAiB,CAAC;IAExD,mCAAmC;IACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAE9E,wBAAwB;IACxB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;IACrD,MAAM,cAAc,GAAG,sBAAsB,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC1F,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,8CAA8C;IAC9C,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAEpD,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACpB,yCAAyC;YACzC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpB,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC3C,WAAW,EAAE,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,QAAQ,iBAAiB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,WAAW,mBAAmB,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAC9G,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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
|
@@ -16,8 +16,12 @@ export async function statusCommand() {
|
|
|
16
16
|
console.log(chalk.gray(` ${name}`));
|
|
17
17
|
console.log(chalk.gray(` Host: ${svc.server.host}`));
|
|
18
18
|
console.log(chalk.gray(` Process: ${svc.processName}`));
|
|
19
|
-
console.log(chalk.gray(`
|
|
19
|
+
console.log(chalk.gray(` Source: ${svc.sourceDir}`));
|
|
20
|
+
console.log(chalk.gray(` Deploy: ${svc.sourceDir}/${svc.deployRepo}`));
|
|
20
21
|
console.log(chalk.gray(` Target: ${svc.server.targetDir}`));
|
|
22
|
+
if (svc.environment) {
|
|
23
|
+
console.log(chalk.gray(` Environment: ${svc.environment}`));
|
|
24
|
+
}
|
|
21
25
|
}
|
|
22
26
|
console.log('');
|
|
23
27
|
}
|
|
@@ -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;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,
|
|
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
|
@@ -2,42 +2,80 @@
|
|
|
2
2
|
* Process manager type
|
|
3
3
|
*/
|
|
4
4
|
export type ProcessManagerType = 'pm2' | 'systemd';
|
|
5
|
+
/**
|
|
6
|
+
* Environment type for deployment
|
|
7
|
+
*/
|
|
8
|
+
export type EnvironmentType = 'production' | 'staging' | 'development';
|
|
5
9
|
/**
|
|
6
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
|
|
7
17
|
*/
|
|
8
18
|
export interface ServiceConfig {
|
|
9
|
-
/**
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
mainPackage: string;
|
|
13
|
-
/** 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) */
|
|
14
22
|
deployRepo: string;
|
|
23
|
+
/** Files/dirs to copy to deploy repo */
|
|
24
|
+
artifacts: string[];
|
|
15
25
|
/** Process manager type (default: 'pm2') */
|
|
16
26
|
processManager?: ProcessManagerType;
|
|
17
27
|
/** Process name (PM2 name or systemd service name) */
|
|
18
28
|
processName: string;
|
|
19
|
-
/** PM2 home directory
|
|
29
|
+
/** PM2 home directory on server */
|
|
20
30
|
pm2Home?: string;
|
|
21
|
-
/**
|
|
22
|
-
|
|
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>;
|
|
23
37
|
/** Server-side configuration */
|
|
24
38
|
server: {
|
|
25
39
|
/** SSH host (user@hostname) */
|
|
26
40
|
host: string;
|
|
27
|
-
/**
|
|
41
|
+
/** Additional SSH options (e.g., "-p 6771 -4") */
|
|
42
|
+
sshOptions?: string;
|
|
43
|
+
/** Where to install on server (target directory) */
|
|
28
44
|
targetDir: string;
|
|
29
45
|
/** Path to bare git repo on server */
|
|
30
46
|
bareRepo: string;
|
|
47
|
+
/** Unix group for shared access (created if not exists) */
|
|
48
|
+
group?: string;
|
|
31
49
|
};
|
|
50
|
+
/** @deprecated Use sourceDir instead */
|
|
51
|
+
packages?: string[];
|
|
52
|
+
/** @deprecated Use sourceDir instead */
|
|
53
|
+
mainPackage?: string;
|
|
32
54
|
}
|
|
33
55
|
/**
|
|
34
56
|
* Root configuration file (.git-deploy.json)
|
|
35
57
|
*/
|
|
36
58
|
export interface DeployConfig {
|
|
59
|
+
/** Port ranges for different environments (informational) */
|
|
60
|
+
portRanges?: Record<string, Record<string, number>>;
|
|
37
61
|
services: Record<string, ServiceConfig>;
|
|
38
62
|
}
|
|
39
63
|
/**
|
|
40
64
|
* Default artifacts to copy if not specified
|
|
41
65
|
*/
|
|
42
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;
|
|
43
81
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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,WAAW,aAAa;IAC5B,
|
|
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"}
|