@git.zone/tsdeploy 0.2.0 → 0.3.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/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.tsdeploy.d.ts +32 -1
- package/dist_ts/classes.tsdeploy.js +513 -11
- package/dist_ts/cli.js +59 -2
- package/dist_ts/plugins.d.ts +7 -1
- package/dist_ts/plugins.js +10 -2
- package/dist_ts/types.d.ts +79 -2
- package/package.json +4 -2
- package/readme.md +43 -8
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.tsdeploy.ts +594 -10
- package/ts/cli.ts +58 -1
- package/ts/plugins.ts +13 -1
- package/ts/types.ts +86 -2
package/dist_ts/cli.js
CHANGED
|
@@ -4,6 +4,41 @@ const getStringArg = (argvArg, keyArg) => {
|
|
|
4
4
|
const value = argvArg[keyArg];
|
|
5
5
|
return typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
6
6
|
};
|
|
7
|
+
const getStringArgByKeys = (argvArg, keysArg) => {
|
|
8
|
+
for (const key of keysArg) {
|
|
9
|
+
const value = getStringArg(argvArg, key);
|
|
10
|
+
if (value)
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
return undefined;
|
|
14
|
+
};
|
|
15
|
+
const getBooleanArgByKeys = (argvArg, keysArg) => {
|
|
16
|
+
for (const key of keysArg) {
|
|
17
|
+
const value = argvArg[key];
|
|
18
|
+
if (value === true)
|
|
19
|
+
return true;
|
|
20
|
+
if (typeof value === 'string' && ['1', 'true', 'yes'].includes(value.toLowerCase()))
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
};
|
|
25
|
+
const getNumberArgByKeys = (argvArg, keysArg) => {
|
|
26
|
+
let rawValue;
|
|
27
|
+
for (const key of keysArg) {
|
|
28
|
+
const value = argvArg[key];
|
|
29
|
+
if (typeof value === 'number' || (typeof value === 'string' && value.trim())) {
|
|
30
|
+
rawValue = value;
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (rawValue === undefined)
|
|
35
|
+
return undefined;
|
|
36
|
+
const parsed = Number(rawValue);
|
|
37
|
+
if (!Number.isFinite(parsed) || parsed < 0) {
|
|
38
|
+
throw new Error(`Expected a non-negative number for --${keysArg[0]}.`);
|
|
39
|
+
}
|
|
40
|
+
return parsed;
|
|
41
|
+
};
|
|
7
42
|
const printJson = (valueArg) => {
|
|
8
43
|
console.log(JSON.stringify(valueArg, null, 2));
|
|
9
44
|
};
|
|
@@ -68,6 +103,24 @@ const runPlan = async () => {
|
|
|
68
103
|
const runDoctor = async () => {
|
|
69
104
|
printJson(await createTsDeploy().doctor());
|
|
70
105
|
};
|
|
106
|
+
const runDeploy = async (argvArg) => {
|
|
107
|
+
const tsDeploy = createTsDeploy();
|
|
108
|
+
const result = await tsDeploy.deploy({
|
|
109
|
+
dryRun: getBooleanArgByKeys(argvArg, ['dryRun', 'dry-run']),
|
|
110
|
+
skipChecks: getBooleanArgByKeys(argvArg, ['skipChecks', 'skip-checks']),
|
|
111
|
+
skipPush: getBooleanArgByKeys(argvArg, ['skipPush', 'skip-push']),
|
|
112
|
+
tag: getStringArg(argvArg, 'tag'),
|
|
113
|
+
image: getStringArg(argvArg, 'image'),
|
|
114
|
+
platform: getStringArg(argvArg, 'platform'),
|
|
115
|
+
builder: getStringArg(argvArg, 'builder'),
|
|
116
|
+
verifyUrl: getStringArgByKeys(argvArg, ['verifyUrl', 'verify-url']),
|
|
117
|
+
waitSeconds: getNumberArgByKeys(argvArg, ['waitSeconds', 'wait-seconds']),
|
|
118
|
+
token: getStringArg(argvArg, 'token'),
|
|
119
|
+
username: getStringArg(argvArg, 'username'),
|
|
120
|
+
password: getStringArg(argvArg, 'password'),
|
|
121
|
+
});
|
|
122
|
+
printJson(result);
|
|
123
|
+
};
|
|
71
124
|
const printHelp = () => {
|
|
72
125
|
console.log(`
|
|
73
126
|
Usage: tsdeploy <command> [options]
|
|
@@ -79,10 +132,13 @@ Commands:
|
|
|
79
132
|
status
|
|
80
133
|
doctor
|
|
81
134
|
plan
|
|
135
|
+
deploy [--dryRun] [--skipChecks] [--skipPush] [--tag <tag>] [--platform <platform>] [--builder <name>]
|
|
136
|
+
[--verifyUrl <url>] [--waitSeconds <seconds>] [--token <token>]
|
|
82
137
|
|
|
83
138
|
Notes:
|
|
84
139
|
tsdeploy stores only the project pointer in .nogit/tsdeploy.json.
|
|
85
|
-
|
|
140
|
+
Cloudly workload deployment builds and pushes the linked OCI image after validating deployOnPush.
|
|
141
|
+
Onebox deployment mutations are not implemented yet.
|
|
86
142
|
`);
|
|
87
143
|
};
|
|
88
144
|
export const runCli = async () => {
|
|
@@ -101,7 +157,8 @@ export const runCli = async () => {
|
|
|
101
157
|
cli.addCommand('status').subscribe(runStatus);
|
|
102
158
|
cli.addCommand('doctor').subscribe(runDoctor);
|
|
103
159
|
cli.addCommand('plan').subscribe(runPlan);
|
|
160
|
+
cli.addCommand('deploy').subscribe(runDeploy);
|
|
104
161
|
cli.addCommand('help').subscribe(async () => printHelp());
|
|
105
162
|
cli.startParse(getSmartcliArgv());
|
|
106
163
|
};
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRCxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQVksRUFBRSxNQUFjLEVBQXNCLEVBQUU7SUFDeEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDOUUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLE9BQVksRUFBRSxPQUFpQixFQUFzQixFQUFFO0lBQ2pGLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLE9BQVksRUFBRSxPQUFpQixFQUFXLEVBQUU7SUFDdkUsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxLQUFLLEtBQUssSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2hDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxR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
|
package/dist_ts/plugins.d.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import * as fs from 'node:fs/promises';
|
|
2
2
|
import * as fsSync from 'node:fs';
|
|
3
|
+
import * as childProcess from 'node:child_process';
|
|
4
|
+
import * as crypto from 'node:crypto';
|
|
3
5
|
import * as os from 'node:os';
|
|
4
6
|
import * as path from 'node:path';
|
|
5
|
-
export { fs, fsSync, os, path };
|
|
7
|
+
export { fs, fsSync, childProcess, crypto, os, path };
|
|
8
|
+
import * as typedrequest from '@api.global/typedrequest';
|
|
9
|
+
export { typedrequest };
|
|
6
10
|
import * as smartcli from '@push.rocks/smartcli';
|
|
7
11
|
import * as smartconfig from '@push.rocks/smartconfig';
|
|
8
12
|
export { smartcli, smartconfig };
|
|
13
|
+
import * as servezoneInterfaces from '@serve.zone/interfaces';
|
|
14
|
+
export { servezoneInterfaces };
|
package/dist_ts/plugins.js
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
// node native scope
|
|
2
2
|
import * as fs from 'node:fs/promises';
|
|
3
3
|
import * as fsSync from 'node:fs';
|
|
4
|
+
import * as childProcess from 'node:child_process';
|
|
5
|
+
import * as crypto from 'node:crypto';
|
|
4
6
|
import * as os from 'node:os';
|
|
5
7
|
import * as path from 'node:path';
|
|
6
|
-
export { fs, fsSync, os, path };
|
|
8
|
+
export { fs, fsSync, childProcess, crypto, os, path };
|
|
9
|
+
// @api.global scope
|
|
10
|
+
import * as typedrequest from '@api.global/typedrequest';
|
|
11
|
+
export { typedrequest };
|
|
7
12
|
// @push.rocks scope
|
|
8
13
|
import * as smartcli from '@push.rocks/smartcli';
|
|
9
14
|
import * as smartconfig from '@push.rocks/smartconfig';
|
|
10
15
|
export { smartcli, smartconfig };
|
|
11
|
-
|
|
16
|
+
// @serve.zone scope
|
|
17
|
+
import * as servezoneInterfaces from '@serve.zone/interfaces';
|
|
18
|
+
export { servezoneInterfaces };
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxLQUFLLFlBQVksTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEtBQUssTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUVsQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUV0RCxvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFFeEIsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBRWpDLG9CQUFvQjtBQUNwQixPQUFPLEtBQUssbUJBQW1CLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLENBQUMifQ==
|
package/dist_ts/types.d.ts
CHANGED
|
@@ -40,14 +40,14 @@ export interface ITsDeployStatus {
|
|
|
40
40
|
warnings: string[];
|
|
41
41
|
}
|
|
42
42
|
export interface ITsDeployPlanAction {
|
|
43
|
-
type: 'inspect' | 'noop';
|
|
43
|
+
type: 'inspect' | 'deploy' | 'noop';
|
|
44
44
|
title: string;
|
|
45
45
|
description: string;
|
|
46
46
|
}
|
|
47
47
|
export interface ITsDeployPlan {
|
|
48
48
|
schemaVersion: 1;
|
|
49
49
|
projectDir: string;
|
|
50
|
-
mutationAllowed:
|
|
50
|
+
mutationAllowed: boolean;
|
|
51
51
|
summary: string;
|
|
52
52
|
profile?: string;
|
|
53
53
|
deploymentId?: string;
|
|
@@ -65,3 +65,80 @@ export interface ITsDeployDoctorResult {
|
|
|
65
65
|
checks: ITsDeployDoctorCheck[];
|
|
66
66
|
warnings: string[];
|
|
67
67
|
}
|
|
68
|
+
export interface ITsDeployCommandRunOptions {
|
|
69
|
+
command: string;
|
|
70
|
+
args: string[];
|
|
71
|
+
cwd: string;
|
|
72
|
+
env?: Record<string, string | undefined>;
|
|
73
|
+
timeoutMs?: number;
|
|
74
|
+
maxOutputBytes?: number;
|
|
75
|
+
}
|
|
76
|
+
export interface ITsDeployCommandRunResult {
|
|
77
|
+
command: string;
|
|
78
|
+
args: string[];
|
|
79
|
+
exitCode: number;
|
|
80
|
+
stdout: string;
|
|
81
|
+
stderr: string;
|
|
82
|
+
}
|
|
83
|
+
export interface ITsDeployDeployOptions {
|
|
84
|
+
dryRun?: boolean;
|
|
85
|
+
skipChecks?: boolean;
|
|
86
|
+
skipPush?: boolean;
|
|
87
|
+
tag?: string;
|
|
88
|
+
image?: string;
|
|
89
|
+
platform?: string;
|
|
90
|
+
builder?: string;
|
|
91
|
+
verifyUrl?: string;
|
|
92
|
+
waitSeconds?: number;
|
|
93
|
+
token?: string;
|
|
94
|
+
username?: string;
|
|
95
|
+
password?: string;
|
|
96
|
+
}
|
|
97
|
+
export interface ITsDeployDeployStep {
|
|
98
|
+
name: string;
|
|
99
|
+
status: 'skipped' | 'passed' | 'failed';
|
|
100
|
+
message: string;
|
|
101
|
+
}
|
|
102
|
+
export interface ITsDeployCloudlyServiceSummary {
|
|
103
|
+
serviceId: string;
|
|
104
|
+
serviceName: string;
|
|
105
|
+
deployOnPush: boolean;
|
|
106
|
+
registryTarget?: {
|
|
107
|
+
registryHost?: string;
|
|
108
|
+
repository?: string;
|
|
109
|
+
tag?: string;
|
|
110
|
+
imageUrl?: string;
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export interface ITsDeployDeploymentSummary {
|
|
114
|
+
deploymentId: string;
|
|
115
|
+
serviceId: string;
|
|
116
|
+
serviceName?: string;
|
|
117
|
+
status: string;
|
|
118
|
+
healthStatus?: string;
|
|
119
|
+
nodeName?: string;
|
|
120
|
+
version?: string;
|
|
121
|
+
containerId?: string;
|
|
122
|
+
deployedAt?: number;
|
|
123
|
+
updatedAt?: number;
|
|
124
|
+
}
|
|
125
|
+
export interface ITsDeployDeployResult {
|
|
126
|
+
schemaVersion: 1;
|
|
127
|
+
projectDir: string;
|
|
128
|
+
profile: string;
|
|
129
|
+
serviceId: string;
|
|
130
|
+
deploymentId?: string;
|
|
131
|
+
dryRun: boolean;
|
|
132
|
+
image: string;
|
|
133
|
+
tag: string;
|
|
134
|
+
platform: string;
|
|
135
|
+
pushed: boolean;
|
|
136
|
+
triggered: boolean;
|
|
137
|
+
verified: boolean;
|
|
138
|
+
digest?: string;
|
|
139
|
+
verifyStatus?: number;
|
|
140
|
+
service?: ITsDeployCloudlyServiceSummary;
|
|
141
|
+
deployments: ITsDeployDeploymentSummary[];
|
|
142
|
+
steps: ITsDeployDeployStep[];
|
|
143
|
+
warnings: string[];
|
|
144
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/tsdeploy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Cloudly and Onebox first deployment orchestration CLI for git.zone TypeScript tooling.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -29,8 +29,10 @@
|
|
|
29
29
|
},
|
|
30
30
|
"homepage": "https://code.foss.global/git.zone/tsdeploy#readme",
|
|
31
31
|
"dependencies": {
|
|
32
|
+
"@api.global/typedrequest": "^3.3.2",
|
|
32
33
|
"@push.rocks/smartcli": "^4.3.0",
|
|
33
|
-
"@push.rocks/smartconfig": "^6.1.1"
|
|
34
|
+
"@push.rocks/smartconfig": "^6.1.1",
|
|
35
|
+
"@serve.zone/interfaces": "^7.24.0"
|
|
34
36
|
},
|
|
35
37
|
"devDependencies": {
|
|
36
38
|
"@git.zone/tsbuild": "^4.4.2",
|
package/readme.md
CHANGED
|
@@ -14,7 +14,7 @@ pnpm add -g @git.zone/tsdeploy
|
|
|
14
14
|
|
|
15
15
|
## Usage
|
|
16
16
|
|
|
17
|
-
`tsdeploy` stores
|
|
17
|
+
`tsdeploy` stores a small local deployment pointer and uses Cloudly as the source of truth for workload deployment state. Cloudly workload deploys validate the linked service and registry target, then build and push the OCI image that Cloudly deploys through `deployOnPush`.
|
|
18
18
|
|
|
19
19
|
Create or update a local profile in the user config store:
|
|
20
20
|
|
|
@@ -22,12 +22,12 @@ Create or update a local profile in the user config store:
|
|
|
22
22
|
tsdeploy login --profile prod --target cloudly --origin https://cloudly.example.com
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
Link a project to a Cloudly or Onebox
|
|
25
|
+
Link a project to a Cloudly or Onebox pointer. Cloudly workload deploys require `serviceId`; `deploymentId` is optional status context only. Use either `init` for the first pointer write or `link` to replace the current pointer:
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
tsdeploy init --profile prod --
|
|
28
|
+
tsdeploy init --profile prod --serviceId service-123
|
|
29
29
|
# or
|
|
30
|
-
tsdeploy link --profile prod --serviceId service-123
|
|
30
|
+
tsdeploy link --profile prod --serviceId service-123 --deploymentId deployment-123
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
Inspect current local state:
|
|
@@ -38,12 +38,30 @@ tsdeploy doctor
|
|
|
38
38
|
tsdeploy plan
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
+
Deploy a linked Cloudly workload:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
tsdeploy deploy
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Useful deploy flags:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
tsdeploy deploy --dryRun
|
|
51
|
+
tsdeploy deploy --tag latest --platform linux/amd64
|
|
52
|
+
tsdeploy deploy --builder default-builder
|
|
53
|
+
tsdeploy deploy --skipChecks
|
|
54
|
+
tsdeploy deploy --skipPush
|
|
55
|
+
tsdeploy deploy --verifyUrl https://app.example.com --waitSeconds 120
|
|
56
|
+
```
|
|
57
|
+
|
|
41
58
|
The project pointer is written to `.nogit/tsdeploy.json` and is intentionally small:
|
|
42
59
|
|
|
43
60
|
```json
|
|
44
61
|
{
|
|
45
62
|
"schemaVersion": 1,
|
|
46
63
|
"profile": "prod",
|
|
64
|
+
"serviceId": "service-123",
|
|
47
65
|
"deploymentId": "deployment-123"
|
|
48
66
|
}
|
|
49
67
|
```
|
|
@@ -52,9 +70,23 @@ Profiles are stored in the user smartconfig key-value store. Tokens are never pr
|
|
|
52
70
|
|
|
53
71
|
## Current Scope
|
|
54
72
|
|
|
55
|
-
|
|
73
|
+
Implemented deployment scope is Cloudly workload image deployment only. `tsdeploy deploy` does not create App Store installs, perform Cloudly service upgrades, run Onebox installs, or duplicate `gitzone release` / `tsdocker` release semantics.
|
|
56
74
|
|
|
57
|
-
|
|
75
|
+
For a real Cloudly deploy, credentials can be provided through a saved profile token or one of these deploy-time inputs:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
TSDEPLOY_TOKEN=... tsdeploy deploy
|
|
79
|
+
tsdeploy deploy --token ...
|
|
80
|
+
TSDEPLOY_CLOUDLY_USERNAME=... TSDEPLOY_CLOUDLY_PASSWORD=... tsdeploy deploy
|
|
81
|
+
tsdeploy deploy --username ... --password ...
|
|
82
|
+
CLOUDLY_USERNAME=... CLOUDLY_PASSWORD=... tsdeploy deploy
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
`deploy` refuses to push when the linked Cloudly service has `deployOnPush` disabled or when an explicit `--image` does not match Cloudly's registry target for the service. Docker build-arg values configured in `.smartconfig.json` must be available as environment variables; values are passed through the process environment and are not printed in JSON output.
|
|
86
|
+
|
|
87
|
+
`--dryRun` stays local: it reads project config and reports the local image that would be pushed without contacting Cloudly, running project checks, or invoking Docker. If the image cannot be resolved locally, it returns a placeholder and warning instead of requiring Cloudly credentials.
|
|
88
|
+
|
|
89
|
+
Onebox deployment mutations are intentionally not implemented until the exact Onebox deployment APIs are verified upstream.
|
|
58
90
|
|
|
59
91
|
## Programmatic API
|
|
60
92
|
|
|
@@ -71,11 +103,14 @@ await tsDeploy.saveProfile({
|
|
|
71
103
|
|
|
72
104
|
await tsDeploy.writeProjectLink({
|
|
73
105
|
profile: 'prod',
|
|
74
|
-
|
|
106
|
+
serviceId: 'service-123',
|
|
75
107
|
});
|
|
76
108
|
|
|
77
109
|
const plan = await tsDeploy.buildPlan();
|
|
78
|
-
console.log(plan.mutationAllowed); //
|
|
110
|
+
console.log(plan.mutationAllowed); // true for linked Cloudly workloads
|
|
111
|
+
|
|
112
|
+
const result = await tsDeploy.deploy({ dryRun: true });
|
|
113
|
+
console.log(result.image);
|
|
79
114
|
```
|
|
80
115
|
|
|
81
116
|
## License and Legal Information
|