@orchestr-sh/orchestr 1.9.6 → 1.9.7
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/dist/Console/Commands/DeployCommand.d.ts +16 -0
- package/dist/Console/Commands/DeployCommand.d.ts.map +1 -0
- package/dist/Console/Commands/DeployCommand.js +153 -0
- package/dist/Console/Commands/DeployCommand.js.map +1 -0
- package/dist/Console/Commands/DeployEnvCommand.d.ts +20 -0
- package/dist/Console/Commands/DeployEnvCommand.d.ts.map +1 -0
- package/dist/Console/Commands/DeployEnvCommand.js +160 -0
- package/dist/Console/Commands/DeployEnvCommand.js.map +1 -0
- package/dist/Console/Commands/DeployInitCommand.d.ts +19 -0
- package/dist/Console/Commands/DeployInitCommand.d.ts.map +1 -0
- package/dist/Console/Commands/DeployInitCommand.js +90 -0
- package/dist/Console/Commands/DeployInitCommand.js.map +1 -0
- package/dist/Console/Commands/DeployLoginCommand.d.ts +14 -0
- package/dist/Console/Commands/DeployLoginCommand.d.ts.map +1 -0
- package/dist/Console/Commands/DeployLoginCommand.js +54 -0
- package/dist/Console/Commands/DeployLoginCommand.js.map +1 -0
- package/dist/Console/Commands/DeployProvisionCommand.d.ts +15 -0
- package/dist/Console/Commands/DeployProvisionCommand.d.ts.map +1 -0
- package/dist/Console/Commands/DeployProvisionCommand.js +96 -0
- package/dist/Console/Commands/DeployProvisionCommand.js.map +1 -0
- package/dist/Console/Commands/DeployRollbackCommand.d.ts +13 -0
- package/dist/Console/Commands/DeployRollbackCommand.d.ts.map +1 -0
- package/dist/Console/Commands/DeployRollbackCommand.js +62 -0
- package/dist/Console/Commands/DeployRollbackCommand.js.map +1 -0
- package/dist/Console/Commands/DeployServerCommand.d.ts +18 -0
- package/dist/Console/Commands/DeployServerCommand.d.ts.map +1 -0
- package/dist/Console/Commands/DeployServerCommand.js +131 -0
- package/dist/Console/Commands/DeployServerCommand.js.map +1 -0
- package/dist/Console/Commands/DeployStatusCommand.d.ts +14 -0
- package/dist/Console/Commands/DeployStatusCommand.d.ts.map +1 -0
- package/dist/Console/Commands/DeployStatusCommand.js +72 -0
- package/dist/Console/Commands/DeployStatusCommand.js.map +1 -0
- package/dist/Console/orchestr.js +17 -0
- package/dist/Console/orchestr.js.map +1 -1
- package/dist/Deploy/CredentialStore.d.ts +31 -0
- package/dist/Deploy/CredentialStore.d.ts.map +1 -0
- package/dist/Deploy/CredentialStore.js +59 -0
- package/dist/Deploy/CredentialStore.js.map +1 -0
- package/dist/Deploy/Deployer.d.ts +32 -0
- package/dist/Deploy/Deployer.d.ts.map +1 -0
- package/dist/Deploy/Deployer.js +88 -0
- package/dist/Deploy/Deployer.js.map +1 -0
- package/dist/Deploy/ProjectConfig.d.ts +26 -0
- package/dist/Deploy/ProjectConfig.d.ts.map +1 -0
- package/dist/Deploy/ProjectConfig.js +47 -0
- package/dist/Deploy/ProjectConfig.js.map +1 -0
- package/dist/Deploy/Provisioner.d.ts +47 -0
- package/dist/Deploy/Provisioner.d.ts.map +1 -0
- package/dist/Deploy/Provisioner.js +119 -0
- package/dist/Deploy/Provisioner.js.map +1 -0
- package/dist/Deploy/SSHConnection.d.ts +38 -0
- package/dist/Deploy/SSHConnection.d.ts.map +1 -0
- package/dist/Deploy/SSHConnection.js +82 -0
- package/dist/Deploy/SSHConnection.js.map +1 -0
- package/dist/Deploy/SymphonyClient.d.ts +158 -0
- package/dist/Deploy/SymphonyClient.d.ts.map +1 -0
- package/dist/Deploy/SymphonyClient.js +117 -0
- package/dist/Deploy/SymphonyClient.js.map +1 -0
- package/dist/Deploy/TarBuilder.d.ts +18 -0
- package/dist/Deploy/TarBuilder.d.ts.map +1 -0
- package/dist/Deploy/TarBuilder.js +52 -0
- package/dist/Deploy/TarBuilder.js.map +1 -0
- package/dist/Deploy/prompt.d.ts +10 -0
- package/dist/Deploy/prompt.d.ts.map +1 -0
- package/dist/Deploy/prompt.js +43 -0
- package/dist/Deploy/prompt.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeployCommand
|
|
3
|
+
*
|
|
4
|
+
* The main deployment command. Runs the full deployment pipeline.
|
|
5
|
+
* Signature: deploy
|
|
6
|
+
* Options: --server=<name> --migrate --no-build
|
|
7
|
+
*/
|
|
8
|
+
import { Command, CommandOptions } from '../../Console/Command';
|
|
9
|
+
export declare class DeployCommand extends Command {
|
|
10
|
+
signature: string;
|
|
11
|
+
description: string;
|
|
12
|
+
handle(_args: string[], options: CommandOptions): Promise<void>;
|
|
13
|
+
private getGitHash;
|
|
14
|
+
private getGitMessage;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=DeployCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeployCommand.d.ts","sourceRoot":"","sources":["../../../src/Console/Commands/DeployCommand.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAO5D,qBAAa,aAAc,SAAQ,OAAO;IACxC,SAAS,SAAY;IACrB,WAAW,SAAsD;IAE3D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA2HrE,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,aAAa;CAOtB"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DeployCommand
|
|
4
|
+
*
|
|
5
|
+
* The main deployment command. Runs the full deployment pipeline.
|
|
6
|
+
* Signature: deploy
|
|
7
|
+
* Options: --server=<name> --migrate --no-build
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.DeployCommand = void 0;
|
|
11
|
+
const child_process_1 = require("child_process");
|
|
12
|
+
const fs_1 = require("fs");
|
|
13
|
+
const Command_1 = require("../../Console/Command");
|
|
14
|
+
const CredentialStore_1 = require("../../Deploy/CredentialStore");
|
|
15
|
+
const ProjectConfig_1 = require("../../Deploy/ProjectConfig");
|
|
16
|
+
const SymphonyClient_1 = require("../../Deploy/SymphonyClient");
|
|
17
|
+
const TarBuilder_1 = require("../../Deploy/TarBuilder");
|
|
18
|
+
const Deployer_1 = require("../../Deploy/Deployer");
|
|
19
|
+
class DeployCommand extends Command_1.Command {
|
|
20
|
+
signature = 'deploy';
|
|
21
|
+
description = 'Deploy the current project to configured servers';
|
|
22
|
+
async handle(_args, options) {
|
|
23
|
+
const credentials = CredentialStore_1.CredentialStore.load();
|
|
24
|
+
if (!credentials) {
|
|
25
|
+
this.error('Not authenticated. Run `orchestr deploy:login` first.');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const config = ProjectConfig_1.ProjectConfig.load();
|
|
29
|
+
if (!config) {
|
|
30
|
+
this.error('No symphony.json found. Run `orchestr deploy:init` first.');
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
const client = new SymphonyClient_1.SymphonyClient(credentials.api, credentials.token);
|
|
34
|
+
// 1. Build (unless --no-build)
|
|
35
|
+
if (!options['no-build']) {
|
|
36
|
+
this.info('Building project...');
|
|
37
|
+
try {
|
|
38
|
+
(0, child_process_1.execSync)('npm run build', { stdio: 'inherit' });
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
this.error('Build failed.');
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// 2. Create tarball
|
|
46
|
+
this.info('Creating deployment artifact...');
|
|
47
|
+
let tarResult;
|
|
48
|
+
try {
|
|
49
|
+
tarResult = TarBuilder_1.TarBuilder.build();
|
|
50
|
+
this.comment(` Archive: ${tarResult.path}`);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
this.error(`Failed to create tarball: ${error.message}`);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
// 3. Fetch server list
|
|
57
|
+
let servers;
|
|
58
|
+
try {
|
|
59
|
+
const result = await client.listServers(config.project);
|
|
60
|
+
servers = result.servers;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
this.error(`Failed to fetch servers: ${error.message}`);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
if (servers.length === 0) {
|
|
67
|
+
this.error('No servers configured. Run `orchestr deploy:server add` first.');
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
// Filter by --server if provided
|
|
71
|
+
const serverFilter = options.server;
|
|
72
|
+
const targetServers = serverFilter ? servers.filter((s) => s.name === serverFilter) : servers;
|
|
73
|
+
if (targetServers.length === 0) {
|
|
74
|
+
this.error(`No server named "${serverFilter}" found.`);
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
// Get current git info
|
|
78
|
+
const commitHash = this.getGitHash();
|
|
79
|
+
const commitMessage = this.getGitMessage();
|
|
80
|
+
// Deploy to each server
|
|
81
|
+
const deployer = new Deployer_1.Deployer(client);
|
|
82
|
+
let anyFailed = false;
|
|
83
|
+
for (const server of targetServers) {
|
|
84
|
+
this.newLine();
|
|
85
|
+
this.info(`Deploying to ${server.name} (${server.host})...`);
|
|
86
|
+
// 4. Create deployment record
|
|
87
|
+
let deploymentUuid;
|
|
88
|
+
try {
|
|
89
|
+
const dep = await client.createDeployment(config.project, {
|
|
90
|
+
server_id: server.id,
|
|
91
|
+
commit_hash: commitHash,
|
|
92
|
+
commit_message: commitMessage,
|
|
93
|
+
});
|
|
94
|
+
deploymentUuid = dep.deployment.uuid;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
this.error(`Failed to create deployment record: ${error.message}`);
|
|
98
|
+
anyFailed = true;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
// 5. SSH deploy
|
|
102
|
+
try {
|
|
103
|
+
await deployer.deployToServer(server, {
|
|
104
|
+
projectSlug: config.project,
|
|
105
|
+
tarPath: tarResult.path,
|
|
106
|
+
timestamp: tarResult.timestamp,
|
|
107
|
+
deploymentUuid,
|
|
108
|
+
keyPath: options.key,
|
|
109
|
+
migrate: !!options.migrate,
|
|
110
|
+
});
|
|
111
|
+
this.info(`✓ ${server.name} deployed successfully`);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
this.error(`✗ ${server.name} deployment failed`);
|
|
115
|
+
if (error?.message) {
|
|
116
|
+
this.error(error.message);
|
|
117
|
+
}
|
|
118
|
+
anyFailed = true;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Cleanup tarball
|
|
122
|
+
try {
|
|
123
|
+
(0, fs_1.unlinkSync)(tarResult.path);
|
|
124
|
+
}
|
|
125
|
+
catch { }
|
|
126
|
+
this.newLine();
|
|
127
|
+
if (anyFailed) {
|
|
128
|
+
this.error('Deployment completed with errors.');
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
this.info('Deployment complete.');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
getGitHash() {
|
|
136
|
+
try {
|
|
137
|
+
return (0, child_process_1.execSync)('git rev-parse --short HEAD', { stdio: 'pipe', encoding: 'utf-8' }).trim();
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
getGitMessage() {
|
|
144
|
+
try {
|
|
145
|
+
return (0, child_process_1.execSync)('git log -1 --pretty=%s', { stdio: 'pipe', encoding: 'utf-8' }).trim();
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
exports.DeployCommand = DeployCommand;
|
|
153
|
+
//# sourceMappingURL=DeployCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeployCommand.js","sourceRoot":"","sources":["../../../src/Console/Commands/DeployCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeployEnvCommand
|
|
3
|
+
*
|
|
4
|
+
* Get and set environment variables for the current project via the Symphony API.
|
|
5
|
+
* Signature: deploy:env [action]
|
|
6
|
+
* Actions: list (default), set, unset, push (from local .env file)
|
|
7
|
+
* Options: --key=<key> --value=<value> --file=<path>
|
|
8
|
+
*/
|
|
9
|
+
import { Command, CommandOptions } from '../../Console/Command';
|
|
10
|
+
export declare class DeployEnvCommand extends Command {
|
|
11
|
+
signature: string;
|
|
12
|
+
description: string;
|
|
13
|
+
handle(args: string[], options: CommandOptions): Promise<void>;
|
|
14
|
+
private list;
|
|
15
|
+
private set;
|
|
16
|
+
private unset;
|
|
17
|
+
private push;
|
|
18
|
+
private parseEnvFile;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=DeployEnvCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeployEnvCommand.d.ts","sourceRoot":"","sources":["../../../src/Console/Commands/DeployEnvCommand.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAM5D,qBAAa,gBAAiB,SAAQ,OAAO;IAC3C,SAAS,SAAyB;IAClC,WAAW,SAAmF;IAExF,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;YAsCtD,IAAI;YAuBJ,GAAG;YAuBH,KAAK;YAyBL,IAAI;IAwBlB,OAAO,CAAC,YAAY;CA2BrB"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DeployEnvCommand
|
|
4
|
+
*
|
|
5
|
+
* Get and set environment variables for the current project via the Symphony API.
|
|
6
|
+
* Signature: deploy:env [action]
|
|
7
|
+
* Actions: list (default), set, unset, push (from local .env file)
|
|
8
|
+
* Options: --key=<key> --value=<value> --file=<path>
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.DeployEnvCommand = void 0;
|
|
12
|
+
const fs_1 = require("fs");
|
|
13
|
+
const path_1 = require("path");
|
|
14
|
+
const Command_1 = require("../../Console/Command");
|
|
15
|
+
const CredentialStore_1 = require("../../Deploy/CredentialStore");
|
|
16
|
+
const ProjectConfig_1 = require("../../Deploy/ProjectConfig");
|
|
17
|
+
const SymphonyClient_1 = require("../../Deploy/SymphonyClient");
|
|
18
|
+
const prompt_1 = require("../../Deploy/prompt");
|
|
19
|
+
class DeployEnvCommand extends Command_1.Command {
|
|
20
|
+
signature = 'deploy:env [action]';
|
|
21
|
+
description = 'Manage environment variables for the current project (list, set, unset, push)';
|
|
22
|
+
async handle(args, options) {
|
|
23
|
+
const action = args[0] ?? 'list';
|
|
24
|
+
if (!['list', 'set', 'unset', 'push'].includes(action)) {
|
|
25
|
+
this.error('Usage: orchestr deploy:env [list|set|unset|push]');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const credentials = CredentialStore_1.CredentialStore.load();
|
|
29
|
+
if (!credentials) {
|
|
30
|
+
this.error('Not authenticated. Run `orchestr deploy:login` first.');
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
const config = ProjectConfig_1.ProjectConfig.load();
|
|
34
|
+
if (!config) {
|
|
35
|
+
this.error('No symphony.json found. Run `orchestr deploy:init` first.');
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
const client = new SymphonyClient_1.SymphonyClient(credentials.api, credentials.token);
|
|
39
|
+
switch (action) {
|
|
40
|
+
case 'list':
|
|
41
|
+
await this.list(client, config.project);
|
|
42
|
+
break;
|
|
43
|
+
case 'set':
|
|
44
|
+
await this.set(client, config.project, options);
|
|
45
|
+
break;
|
|
46
|
+
case 'unset':
|
|
47
|
+
await this.unset(client, config.project, options);
|
|
48
|
+
break;
|
|
49
|
+
case 'push':
|
|
50
|
+
await this.push(client, config.project, options);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async list(client, slug) {
|
|
55
|
+
try {
|
|
56
|
+
const result = await client.getEnvVars(slug);
|
|
57
|
+
if (result.variables.length === 0) {
|
|
58
|
+
this.comment('No environment variables set.');
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this.info(`Environment variables for: ${slug}`);
|
|
62
|
+
this.newLine();
|
|
63
|
+
result.variables.forEach(({ key, value }) => {
|
|
64
|
+
// Mask values longer than 4 chars
|
|
65
|
+
const masked = value.length > 4 ? value.slice(0, 4) + '*'.repeat(Math.min(value.length - 4, 20)) : '****';
|
|
66
|
+
this.line(` ${key}=${masked}`);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
this.error(`Failed to fetch env vars: ${error.message}`);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async set(client, slug, options) {
|
|
75
|
+
const key = options.key ?? (await (0, prompt_1.prompt)('Variable name: '));
|
|
76
|
+
const value = options.value ?? (await (0, prompt_1.prompt)('Value: ', true));
|
|
77
|
+
if (!key.trim()) {
|
|
78
|
+
this.error('Variable name is required.');
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
// Fetch existing vars, merge in the new one
|
|
83
|
+
const existing = await client.getEnvVars(slug);
|
|
84
|
+
const updated = existing.variables.filter((v) => v.key !== key.trim());
|
|
85
|
+
updated.push({ key: key.trim(), value });
|
|
86
|
+
await client.putEnvVars(slug, updated);
|
|
87
|
+
this.info(`Set ${key.trim()}`);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
this.error(`Failed to set env var: ${error.message}`);
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
async unset(client, slug, options) {
|
|
95
|
+
const key = options.key ?? (await (0, prompt_1.prompt)('Variable name to remove: '));
|
|
96
|
+
if (!key.trim()) {
|
|
97
|
+
this.error('Variable name is required.');
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
const existing = await client.getEnvVars(slug);
|
|
102
|
+
const updated = existing.variables.filter((v) => v.key !== key.trim());
|
|
103
|
+
if (updated.length === existing.variables.length) {
|
|
104
|
+
this.warn(`Variable "${key.trim()}" not found.`);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
await client.putEnvVars(slug, updated);
|
|
108
|
+
this.info(`Unset ${key.trim()}`);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
this.error(`Failed to unset env var: ${error.message}`);
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async push(client, slug, options) {
|
|
116
|
+
const filePath = options.file ?? (0, path_1.join)(process.cwd(), '.env');
|
|
117
|
+
if (!(0, fs_1.existsSync)(filePath)) {
|
|
118
|
+
this.error(`.env file not found at: ${filePath}`);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
const variables = this.parseEnvFile(filePath);
|
|
122
|
+
if (variables.length === 0) {
|
|
123
|
+
this.warn('No variables found in .env file.');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
await client.putEnvVars(slug, variables);
|
|
128
|
+
this.info(`Pushed ${variables.length} variable(s) from ${filePath}`);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
this.error(`Failed to push env vars: ${error.message}`);
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
parseEnvFile(filePath) {
|
|
136
|
+
const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
|
|
137
|
+
const variables = [];
|
|
138
|
+
for (const line of content.split('\n')) {
|
|
139
|
+
const trimmed = line.trim();
|
|
140
|
+
// Skip comments and empty lines
|
|
141
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
142
|
+
continue;
|
|
143
|
+
const eqIndex = trimmed.indexOf('=');
|
|
144
|
+
if (eqIndex === -1)
|
|
145
|
+
continue;
|
|
146
|
+
const key = trimmed.slice(0, eqIndex).trim();
|
|
147
|
+
let value = trimmed.slice(eqIndex + 1).trim();
|
|
148
|
+
// Strip surrounding quotes
|
|
149
|
+
if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
|
|
150
|
+
value = value.slice(1, -1);
|
|
151
|
+
}
|
|
152
|
+
if (key) {
|
|
153
|
+
variables.push({ key, value });
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return variables;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
exports.DeployEnvCommand = DeployEnvCommand;
|
|
160
|
+
//# sourceMappingURL=DeployEnvCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeployEnvCommand.js","sourceRoot":"","sources":["../../../src/Console/Commands/DeployEnvCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeployInitCommand
|
|
3
|
+
*
|
|
4
|
+
* Interactive setup: authenticate if needed, prompt for project name,
|
|
5
|
+
* create project via API, write symphony.json to project root.
|
|
6
|
+
* Signature: deploy:init
|
|
7
|
+
*/
|
|
8
|
+
import { Command, CommandOptions } from '../../Console/Command';
|
|
9
|
+
export declare class DeployInitCommand extends Command {
|
|
10
|
+
signature: string;
|
|
11
|
+
description: string;
|
|
12
|
+
options: {
|
|
13
|
+
name?: string;
|
|
14
|
+
repository?: string;
|
|
15
|
+
yes?: boolean;
|
|
16
|
+
};
|
|
17
|
+
handle(_args: string[], options: CommandOptions): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=DeployInitCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeployInitCommand.d.ts","sourceRoot":"","sources":["../../../src/Console/Commands/DeployInitCommand.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAM5D,qBAAa,iBAAkB,SAAQ,OAAO;IAC5C,SAAS,SAAmD;IAC5D,WAAW,SAAuD;IAElE,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,CAAM;IAE9D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAyEtE"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DeployInitCommand
|
|
4
|
+
*
|
|
5
|
+
* Interactive setup: authenticate if needed, prompt for project name,
|
|
6
|
+
* create project via API, write symphony.json to project root.
|
|
7
|
+
* Signature: deploy:init
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.DeployInitCommand = void 0;
|
|
11
|
+
const Command_1 = require("../../Console/Command");
|
|
12
|
+
const CredentialStore_1 = require("../../Deploy/CredentialStore");
|
|
13
|
+
const ProjectConfig_1 = require("../../Deploy/ProjectConfig");
|
|
14
|
+
const SymphonyClient_1 = require("../../Deploy/SymphonyClient");
|
|
15
|
+
const prompt_1 = require("../../Deploy/prompt");
|
|
16
|
+
class DeployInitCommand extends Command_1.Command {
|
|
17
|
+
signature = 'deploy:init [--name=] [--repository=] [--yes]';
|
|
18
|
+
description = 'Initialise a Symphony deployment for this project';
|
|
19
|
+
options = {};
|
|
20
|
+
async handle(_args, options) {
|
|
21
|
+
this.options = {
|
|
22
|
+
name: options.name,
|
|
23
|
+
repository: options.repository,
|
|
24
|
+
yes: options.yes,
|
|
25
|
+
};
|
|
26
|
+
this.info('Symphony — Initialise Project');
|
|
27
|
+
this.newLine();
|
|
28
|
+
const credentials = CredentialStore_1.CredentialStore.load();
|
|
29
|
+
if (!credentials) {
|
|
30
|
+
this.error('Not authenticated. Run `orchestr deploy:login` first.');
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
const client = new SymphonyClient_1.SymphonyClient(credentials.api, credentials.token);
|
|
34
|
+
if (ProjectConfig_1.ProjectConfig.exists()) {
|
|
35
|
+
const existing = ProjectConfig_1.ProjectConfig.load();
|
|
36
|
+
if (!this.options.yes) {
|
|
37
|
+
this.warn(`symphony.json already exists (project: ${existing?.project}).`);
|
|
38
|
+
const overwrite = await (0, prompt_1.prompt)('Overwrite? (y/N): ');
|
|
39
|
+
if (overwrite.toLowerCase() !== 'y') {
|
|
40
|
+
this.comment('Aborted.');
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
let name;
|
|
46
|
+
if (this.options.name) {
|
|
47
|
+
name = this.options.name;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
name = await (0, prompt_1.prompt)('Project name: ');
|
|
51
|
+
}
|
|
52
|
+
if (!name.trim()) {
|
|
53
|
+
this.error('Project name is required.');
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
let repository = '';
|
|
57
|
+
if (this.options.repository) {
|
|
58
|
+
repository = this.options.repository;
|
|
59
|
+
}
|
|
60
|
+
else if (!this.options.name) {
|
|
61
|
+
repository = await (0, prompt_1.prompt)('Git repository URL (optional): ');
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
this.comment('Creating project...');
|
|
65
|
+
const result = await client.createProject(name.trim(), repository.trim() || undefined);
|
|
66
|
+
ProjectConfig_1.ProjectConfig.save({
|
|
67
|
+
project: result.project.slug,
|
|
68
|
+
api: credentials.api,
|
|
69
|
+
});
|
|
70
|
+
this.newLine();
|
|
71
|
+
this.info(`Project "${result.project.name}" created (slug: ${result.project.slug})`);
|
|
72
|
+
this.comment('symphony.json written to project root.');
|
|
73
|
+
this.newLine();
|
|
74
|
+
this.comment('Next steps:');
|
|
75
|
+
this.comment(' orchestr deploy:server add --host=<ip> --name=<name>');
|
|
76
|
+
this.comment(' orchestr deploy');
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (error.status === 409) {
|
|
80
|
+
this.error(`A project with that name already exists.`);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
this.error(`Failed to create project: ${error.message}`);
|
|
84
|
+
}
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.DeployInitCommand = DeployInitCommand;
|
|
90
|
+
//# sourceMappingURL=DeployInitCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeployInitCommand.js","sourceRoot":"","sources":["../../../src/Console/Commands/DeployInitCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeployLoginCommand
|
|
3
|
+
*
|
|
4
|
+
* Authenticate with the Symphony API and store credentials locally.
|
|
5
|
+
* Signature: deploy:login
|
|
6
|
+
* Options: --email=<email> --password=<password> --api=<url>
|
|
7
|
+
*/
|
|
8
|
+
import { Command, CommandOptions } from '../../Console/Command';
|
|
9
|
+
export declare class DeployLoginCommand extends Command {
|
|
10
|
+
signature: string;
|
|
11
|
+
description: string;
|
|
12
|
+
handle(_args: string[], options: CommandOptions): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=DeployLoginCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeployLoginCommand.d.ts","sourceRoot":"","sources":["../../../src/Console/Commands/DeployLoginCommand.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAO5D,qBAAa,kBAAmB,SAAQ,OAAO;IAC7C,SAAS,SAAkB;IAC3B,WAAW,SAAsE;IAE3E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAsCtE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DeployLoginCommand
|
|
4
|
+
*
|
|
5
|
+
* Authenticate with the Symphony API and store credentials locally.
|
|
6
|
+
* Signature: deploy:login
|
|
7
|
+
* Options: --email=<email> --password=<password> --api=<url>
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.DeployLoginCommand = void 0;
|
|
11
|
+
const Command_1 = require("../../Console/Command");
|
|
12
|
+
const CredentialStore_1 = require("../../Deploy/CredentialStore");
|
|
13
|
+
const SymphonyClient_1 = require("../../Deploy/SymphonyClient");
|
|
14
|
+
const prompt_1 = require("../../Deploy/prompt");
|
|
15
|
+
const DEFAULT_API = 'https://symphony.orchestr.sh';
|
|
16
|
+
class DeployLoginCommand extends Command_1.Command {
|
|
17
|
+
signature = 'deploy:login';
|
|
18
|
+
description = 'Authenticate with the Symphony API and store credentials locally';
|
|
19
|
+
async handle(_args, options) {
|
|
20
|
+
const api = options.api ?? DEFAULT_API;
|
|
21
|
+
this.info('Symphony — Orchestr Deployment');
|
|
22
|
+
this.newLine();
|
|
23
|
+
const email = options.email ?? (await (0, prompt_1.prompt)('Email: '));
|
|
24
|
+
const password = options.password ?? (await (0, prompt_1.prompt)('Password: ', true));
|
|
25
|
+
if (!email || !password) {
|
|
26
|
+
this.error('Email and password are required.');
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
const client = new SymphonyClient_1.SymphonyClient(api);
|
|
30
|
+
try {
|
|
31
|
+
this.comment('Authenticating...');
|
|
32
|
+
const result = await client.login(email.trim(), password);
|
|
33
|
+
CredentialStore_1.CredentialStore.save({
|
|
34
|
+
token: result.token,
|
|
35
|
+
email: result.user.email,
|
|
36
|
+
api,
|
|
37
|
+
});
|
|
38
|
+
this.newLine();
|
|
39
|
+
this.info(`Authenticated as ${result.user.email}`);
|
|
40
|
+
this.comment(`Credentials saved to ~/.orchestr/credentials`);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (error.status === 401) {
|
|
44
|
+
this.error('Invalid credentials. Please check your email and password.');
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
this.error(`Login failed: ${error.message}`);
|
|
48
|
+
}
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.DeployLoginCommand = DeployLoginCommand;
|
|
54
|
+
//# sourceMappingURL=DeployLoginCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeployLoginCommand.js","sourceRoot":"","sources":["../../../src/Console/Commands/DeployLoginCommand.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,+CAA4D;AAC5D,8DAA2D;AAC3D,4DAAyD;AACzD,4CAAyC;AAEzC,MAAM,WAAW,GAAG,8BAA8B,CAAC;AAEnD,MAAa,kBAAmB,SAAQ,iBAAO;IAC7C,SAAS,GAAG,cAAc,CAAC;IAC3B,WAAW,GAAG,kEAAkE,CAAC;IAEjF,KAAK,CAAC,MAAM,CAAC,KAAe,EAAE,OAAuB;QACnD,MAAM,GAAG,GAAW,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC;QAE/C,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,MAAM,KAAK,GAAW,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAW,OAAO,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAA,eAAM,EAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;QAEhF,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,+BAAc,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;YAE1D,iCAAe,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;gBACxB,GAAG;aACJ,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF;AA1CD,gDA0CC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeployProvisionCommand
|
|
3
|
+
*
|
|
4
|
+
* Provision a fresh Ubuntu server for Orchestr deployments.
|
|
5
|
+
* Signature: deploy:provision
|
|
6
|
+
* Options: --host=<ip> --user=<root-user> --port=<port> --key=<path>
|
|
7
|
+
* --domain=<domain> --email=<email> --name=<project-name>
|
|
8
|
+
*/
|
|
9
|
+
import { Command, CommandOptions } from '../../Console/Command';
|
|
10
|
+
export declare class DeployProvisionCommand extends Command {
|
|
11
|
+
signature: string;
|
|
12
|
+
description: string;
|
|
13
|
+
handle(_args: string[], options: CommandOptions): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=DeployProvisionCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeployProvisionCommand.d.ts","sourceRoot":"","sources":["../../../src/Console/Commands/DeployProvisionCommand.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAI5D,qBAAa,sBAAuB,SAAQ,OAAO;IACjD,SAAS,SAAsB;IAC/B,WAAW,SAA8D;IAEnE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAqFtE"}
|