@lizard-build/cli 0.1.0 → 0.3.29
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/.github/workflows/release.yml +90 -0
- package/README.md +41 -0
- package/dist/commands/add.js +318 -45
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.js +68 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/docs.d.ts +2 -0
- package/dist/commands/docs.js +13 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/domain.d.ts +9 -0
- package/dist/commands/domain.js +195 -0
- package/dist/commands/domain.js.map +1 -0
- package/dist/commands/git.js +175 -36
- package/dist/commands/git.js.map +1 -1
- package/dist/commands/init.d.ts +24 -0
- package/dist/commands/init.js +128 -86
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/link.d.ts +7 -0
- package/dist/commands/link.js +104 -33
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/login.js +4 -3
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logs.js +223 -30
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/open.js +3 -2
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/port.d.ts +7 -0
- package/dist/commands/port.js +49 -0
- package/dist/commands/port.js.map +1 -0
- package/dist/commands/projects.js +36 -6
- package/dist/commands/projects.js.map +1 -1
- package/dist/commands/ps.js +32 -39
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/redeploy.js +48 -8
- package/dist/commands/redeploy.js.map +1 -1
- package/dist/commands/regions.js +2 -5
- package/dist/commands/regions.js.map +1 -1
- package/dist/commands/restart.js +84 -10
- package/dist/commands/restart.js.map +1 -1
- package/dist/commands/run.d.ts +9 -0
- package/dist/commands/run.js +61 -22
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/scale.d.ts +10 -0
- package/dist/commands/scale.js +166 -0
- package/dist/commands/scale.js.map +1 -0
- package/dist/commands/secrets.js +200 -89
- package/dist/commands/secrets.js.map +1 -1
- package/dist/commands/service-set.d.ts +49 -0
- package/dist/commands/service-set.js +552 -0
- package/dist/commands/service-set.js.map +1 -0
- package/dist/commands/service-show.d.ts +11 -0
- package/dist/commands/service-show.js +44 -0
- package/dist/commands/service-show.js.map +1 -0
- package/dist/commands/service.d.ts +8 -0
- package/dist/commands/service.js +262 -0
- package/dist/commands/service.js.map +1 -0
- package/dist/commands/ssh.d.ts +2 -0
- package/dist/commands/ssh.js +161 -0
- package/dist/commands/ssh.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.js +49 -38
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/unlink.d.ts +5 -0
- package/dist/commands/unlink.js +18 -0
- package/dist/commands/unlink.js.map +1 -0
- package/dist/commands/up.d.ts +9 -0
- package/dist/commands/up.js +417 -0
- package/dist/commands/up.js.map +1 -0
- package/dist/commands/upgrade.d.ts +2 -0
- package/dist/commands/upgrade.js +79 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/whoami.js +26 -6
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/workspace.d.ts +8 -0
- package/dist/commands/workspace.js +36 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/index.js +204 -82
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +17 -2
- package/dist/lib/api.js +85 -51
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/auth.d.ts +3 -11
- package/dist/lib/auth.js +16 -36
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/config.d.ts +36 -15
- package/dist/lib/config.js +71 -58
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/format.d.ts +1 -0
- package/dist/lib/format.js +17 -4
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/name.d.ts +11 -0
- package/dist/lib/name.js +26 -0
- package/dist/lib/name.js.map +1 -0
- package/dist/lib/picker.d.ts +32 -0
- package/dist/lib/picker.js +91 -0
- package/dist/lib/picker.js.map +1 -0
- package/dist/lib/resolve.d.ts +85 -0
- package/dist/lib/resolve.js +203 -0
- package/dist/lib/resolve.js.map +1 -0
- package/dist/lib/updater.d.ts +16 -0
- package/dist/lib/updater.js +102 -0
- package/dist/lib/updater.js.map +1 -0
- package/lizard-wrapper.sh +2 -0
- package/package.json +11 -3
- package/src/commands/add.ts +388 -56
- package/src/commands/config.ts +80 -0
- package/src/commands/docs.ts +15 -0
- package/src/commands/domain.ts +248 -0
- package/src/commands/git.ts +201 -40
- package/src/commands/init.ts +149 -100
- package/src/commands/link.ts +127 -35
- package/src/commands/login.ts +4 -3
- package/src/commands/logs.ts +283 -27
- package/src/commands/open.ts +3 -2
- package/src/commands/port.ts +57 -0
- package/src/commands/projects.ts +43 -6
- package/src/commands/ps.ts +39 -60
- package/src/commands/redeploy.ts +51 -10
- package/src/commands/regions.ts +2 -6
- package/src/commands/restart.ts +84 -10
- package/src/commands/run.ts +68 -24
- package/src/commands/scale.ts +216 -0
- package/src/commands/secrets.ts +277 -100
- package/src/commands/service-set.ts +669 -0
- package/src/commands/service-show.ts +52 -0
- package/src/commands/service.ts +298 -0
- package/src/commands/ssh.ts +176 -0
- package/src/commands/status.ts +51 -46
- package/src/commands/unlink.ts +17 -0
- package/src/commands/up.ts +461 -0
- package/src/commands/upgrade.ts +87 -0
- package/src/commands/whoami.ts +34 -6
- package/src/commands/workspace.ts +44 -0
- package/src/index.ts +214 -85
- package/src/lib/api.ts +114 -51
- package/src/lib/auth.ts +22 -46
- package/src/lib/config.ts +100 -65
- package/src/lib/format.ts +18 -4
- package/src/lib/name.ts +27 -0
- package/src/lib/picker.ts +133 -0
- package/src/lib/resolve.ts +285 -0
- package/src/lib/updater.ts +106 -0
- package/test/cli.test.ts +491 -0
- package/test/fixtures/hello-app/Dockerfile +5 -0
- package/test/fixtures/hello-app/index.js +5 -0
- package/test/unit/api.test.ts +66 -0
- package/test/unit/config.test.ts +94 -0
- package/test/unit/init.test.ts +211 -0
- package/test/unit/json.test.ts +208 -0
- package/test/unit/picker.test.ts +161 -0
- package/test/unit/resolve.test.ts +124 -0
- package/test/unit/service-set.test.ts +355 -0
- package/vitest.config.ts +10 -0
- package/dist/commands/connect.d.ts +0 -2
- package/dist/commands/connect.js +0 -117
- package/dist/commands/connect.js.map +0 -1
- package/dist/commands/context.d.ts +0 -2
- package/dist/commands/context.js +0 -71
- package/dist/commands/context.js.map +0 -1
- package/dist/commands/deploy.d.ts +0 -2
- package/dist/commands/deploy.js +0 -120
- package/dist/commands/deploy.js.map +0 -1
- package/dist/commands/destroy.d.ts +0 -2
- package/dist/commands/destroy.js +0 -51
- package/dist/commands/destroy.js.map +0 -1
- package/dist/commands/update.d.ts +0 -2
- package/dist/commands/update.js +0 -41
- package/dist/commands/update.js.map +0 -1
- package/dist/commands/version.d.ts +0 -2
- package/dist/commands/version.js +0 -37
- package/dist/commands/version.js.map +0 -1
- package/src/commands/connect.ts +0 -145
- package/src/commands/context.ts +0 -93
- package/src/commands/deploy.ts +0 -153
- package/src/commands/destroy.ts +0 -51
- package/src/commands/update.ts +0 -44
- package/src/commands/version.ts +0 -37
package/dist/commands/secrets.js
CHANGED
|
@@ -1,18 +1,84 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import * as p from "@clack/prompts";
|
|
3
|
+
import { Option } from "commander";
|
|
4
|
+
import { api, withScope } from "../lib/api.js";
|
|
5
|
+
import { getProjectLink } from "../lib/config.js";
|
|
6
|
+
import { getActiveService, resolveProjectScope } from "../lib/resolve.js";
|
|
7
|
+
import { success, isJSONMode, printJSON, table, isTTY } from "../lib/format.js";
|
|
8
|
+
async function resolveScope(projectFlag, serviceFlag, global) {
|
|
9
|
+
const { projectId, scope: rs } = await resolveProjectScope(projectFlag);
|
|
10
|
+
if (global) {
|
|
11
|
+
return {
|
|
12
|
+
path: withScope(`/api/projects/${projectId}/secrets`, rs),
|
|
13
|
+
label: "project",
|
|
14
|
+
projectId,
|
|
15
|
+
scope: rs,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if (serviceFlag) {
|
|
19
|
+
const svc = await getActiveService(serviceFlag, projectId);
|
|
20
|
+
return {
|
|
21
|
+
path: withScope(`/api/apps/${svc.id}/secrets`, rs),
|
|
22
|
+
label: "service",
|
|
23
|
+
projectId,
|
|
24
|
+
serviceId: svc.id,
|
|
25
|
+
serviceName: svc.name,
|
|
26
|
+
scope: rs,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
const link = getProjectLink();
|
|
30
|
+
if (!link?.serviceId) {
|
|
31
|
+
throw new Error("No service linked. Pass --service <name>, run `lizard service link <name>`, or use --global.");
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
path: withScope(`/api/apps/${link.serviceId}/secrets`, rs),
|
|
35
|
+
label: "service",
|
|
36
|
+
projectId,
|
|
37
|
+
serviceId: link.serviceId,
|
|
38
|
+
serviceName: link.serviceName || link.serviceId,
|
|
39
|
+
scope: rs,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
async function configApplySecrets(scope, secrets) {
|
|
43
|
+
const payload = scope.label === "project"
|
|
44
|
+
? { secrets: { shared: secrets } }
|
|
45
|
+
: { secrets: { services: { [scope.serviceName]: secrets } } };
|
|
46
|
+
await api.post(withScope(`/api/projects/${scope.projectId}/config:apply`, scope.scope), payload);
|
|
47
|
+
}
|
|
48
|
+
function parsePairs(pairs) {
|
|
49
|
+
const out = {};
|
|
50
|
+
for (const pair of pairs) {
|
|
51
|
+
const eq = pair.indexOf("=");
|
|
52
|
+
if (eq < 1) {
|
|
53
|
+
throw new Error(`Invalid format: "${pair}". Use KEY=value (e.g. \`lizard secrets set DATABASE_URL=postgres://...\`).`);
|
|
54
|
+
}
|
|
55
|
+
out[pair.slice(0, eq)] = pair.slice(eq + 1);
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
5
59
|
export function registerSecrets(program) {
|
|
6
|
-
const
|
|
7
|
-
.command("
|
|
8
|
-
.
|
|
9
|
-
|
|
10
|
-
.
|
|
11
|
-
.
|
|
12
|
-
.option("--
|
|
60
|
+
const cmd = program
|
|
61
|
+
.command("secrets")
|
|
62
|
+
.alias("secret")
|
|
63
|
+
.description("Manage secrets (default scope: service; --global for project)")
|
|
64
|
+
.option("--global", "Target the whole project")
|
|
65
|
+
.option("--show", "Reveal values")
|
|
66
|
+
.option("--ref", "List reference templates available in this scope")
|
|
67
|
+
.addOption(new Option("--refs").hideHelp().implies({ ref: true }))
|
|
68
|
+
.option("-s, --service <name>", "Service to scope to (overrides linked)")
|
|
69
|
+
.option("-p, --project <id>", "Project to scope to")
|
|
70
|
+
.addHelpText("after", `
|
|
71
|
+
Notes:
|
|
72
|
+
Secrets apply live to running VMs. Keys prefixed with NEXT_PUBLIC_* or VITE_*
|
|
73
|
+
trigger a redeploy because they're baked into the client bundle at build time.`)
|
|
13
74
|
.action(async (opts) => {
|
|
14
|
-
const
|
|
15
|
-
|
|
75
|
+
const scope = await resolveScope(opts.project, opts.service, opts.global);
|
|
76
|
+
// --ref → list reference templates exposed by the platform
|
|
77
|
+
if (opts.ref) {
|
|
78
|
+
await printRefs(scope);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const secrets = await api.get(scope.path);
|
|
16
82
|
if (isJSONMode()) {
|
|
17
83
|
printJSON(opts.show
|
|
18
84
|
? secrets
|
|
@@ -20,119 +86,164 @@ export function registerSecrets(program) {
|
|
|
20
86
|
return;
|
|
21
87
|
}
|
|
22
88
|
if (secrets.length === 0) {
|
|
23
|
-
console.log(
|
|
89
|
+
console.log(`No ${scope.label} secrets. Use \`lizard secrets set KEY=value${opts.global ? " --global" : ""}\`.`);
|
|
24
90
|
return;
|
|
25
91
|
}
|
|
26
92
|
table(["Key", "Value"], secrets.map((s) => [
|
|
27
93
|
s.key,
|
|
28
|
-
opts.show
|
|
94
|
+
opts.show
|
|
95
|
+
? s.value
|
|
96
|
+
: chalk.dim("•".repeat(Math.min(s.value.length, 20))),
|
|
29
97
|
]));
|
|
30
98
|
});
|
|
31
|
-
|
|
99
|
+
cmd
|
|
100
|
+
.command("list")
|
|
101
|
+
.description("List secrets")
|
|
102
|
+
.option("--global", "Target the whole project")
|
|
103
|
+
.option("--show", "Reveal values")
|
|
104
|
+
.option("--ref", "List reference templates available in this scope")
|
|
105
|
+
.addOption(new Option("--refs").hideHelp().implies({ ref: true }))
|
|
106
|
+
.option("-s, --service <name>", "Service to scope to (overrides linked)")
|
|
107
|
+
.option("-p, --project <id>", "Project to scope to")
|
|
108
|
+
.action(async (opts, sub) => {
|
|
109
|
+
const inherited = sub.parent?.opts() || {};
|
|
110
|
+
const scope = await resolveScope(opts.project ?? inherited.project, opts.service ?? inherited.service, opts.global || inherited.global);
|
|
111
|
+
if (opts.ref) {
|
|
112
|
+
await printRefs(scope);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const secrets = await api.get(scope.path);
|
|
116
|
+
if (isJSONMode()) {
|
|
117
|
+
printJSON(opts.show
|
|
118
|
+
? secrets
|
|
119
|
+
: secrets.map((s) => ({ key: s.key, value: "***" })));
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (secrets.length === 0) {
|
|
123
|
+
console.log(`No ${scope.label} secrets.`);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
table(["Key", "Value"], secrets.map((s) => [
|
|
127
|
+
s.key,
|
|
128
|
+
opts.show
|
|
129
|
+
? s.value
|
|
130
|
+
: chalk.dim("•".repeat(Math.min(s.value.length, 20))),
|
|
131
|
+
]));
|
|
132
|
+
});
|
|
133
|
+
cmd
|
|
32
134
|
.command("set")
|
|
33
135
|
.argument("<pairs...>", "KEY=value pairs")
|
|
34
136
|
.description("Set one or more secrets")
|
|
35
|
-
.option("--
|
|
36
|
-
.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
throw new Error(`Invalid format: "${pair}". Use KEY=value`);
|
|
44
|
-
}
|
|
45
|
-
newSecrets[pair.slice(0, eqIdx)] = pair.slice(eqIdx + 1);
|
|
46
|
-
}
|
|
47
|
-
// Get existing secrets, merge, update
|
|
48
|
-
const existing = await api.get(`/api/projects/${projectId}/secrets`);
|
|
49
|
-
const merged = [];
|
|
50
|
-
const existingKeys = new Set();
|
|
51
|
-
for (const s of existing) {
|
|
52
|
-
if (newSecrets[s.key] !== undefined) {
|
|
53
|
-
merged.push({ key: s.key, value: newSecrets[s.key] });
|
|
54
|
-
existingKeys.add(s.key);
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
merged.push(s);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
// Add new keys
|
|
61
|
-
for (const [key, value] of Object.entries(newSecrets)) {
|
|
62
|
-
if (!existingKeys.has(key)) {
|
|
63
|
-
merged.push({ key, value });
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
await api.put(`/api/projects/${projectId}/secrets`, merged);
|
|
137
|
+
.option("--global", "Target the whole project")
|
|
138
|
+
.option("-s, --service <name>", "Service to scope to (overrides linked)")
|
|
139
|
+
.option("-p, --project <id>", "Project to scope to")
|
|
140
|
+
.action(async (pairs, opts, sub) => {
|
|
141
|
+
const inherited = sub.parent?.opts() || {};
|
|
142
|
+
const scope = await resolveScope(opts.project ?? inherited.project, opts.service ?? inherited.service, opts.global || inherited.global);
|
|
143
|
+
const newSecrets = parsePairs(pairs);
|
|
144
|
+
await configApplySecrets(scope, newSecrets);
|
|
67
145
|
if (isJSONMode()) {
|
|
68
|
-
printJSON({ updated: Object.keys(newSecrets) });
|
|
146
|
+
printJSON({ updated: Object.keys(newSecrets), scope: scope.label });
|
|
69
147
|
}
|
|
70
148
|
else {
|
|
71
|
-
success(`${Object.keys(newSecrets).length} secret(s) updated`);
|
|
149
|
+
success(`${Object.keys(newSecrets).length} ${scope.label} secret(s) updated`);
|
|
72
150
|
}
|
|
73
151
|
});
|
|
74
|
-
|
|
152
|
+
cmd
|
|
75
153
|
.command("delete")
|
|
154
|
+
.alias("rm")
|
|
76
155
|
.argument("<keys...>", "Secret keys to delete")
|
|
77
156
|
.description("Delete one or more secrets")
|
|
78
|
-
.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
157
|
+
.option("--global", "Target the whole project")
|
|
158
|
+
.option("-y, --yes", "Skip confirmation")
|
|
159
|
+
.option("-s, --service <name>", "Service to scope to (overrides linked)")
|
|
160
|
+
.option("-p, --project <id>", "Project to scope to")
|
|
161
|
+
.action(async (keys, opts, sub) => {
|
|
162
|
+
const inherited = sub.parent?.opts() || {};
|
|
163
|
+
const scope = await resolveScope(opts.project ?? inherited.project, opts.service ?? inherited.service, opts.global || inherited.global);
|
|
164
|
+
const existing = await api.get(scope.path);
|
|
165
|
+
const existingKeys = new Set(existing.map((s) => s.key));
|
|
166
|
+
const notFound = keys.filter((k) => !existingKeys.has(k));
|
|
167
|
+
if (notFound.length > 0) {
|
|
168
|
+
throw new Error(`Secret(s) not found: ${notFound.join(", ")}`);
|
|
169
|
+
}
|
|
170
|
+
if (!opts.yes) {
|
|
171
|
+
if (!isTTY())
|
|
172
|
+
throw new Error("Use -y to confirm in non-interactive mode");
|
|
173
|
+
const summary = keys.length === 1 ? chalk.bold(keys[0]) : `${keys.length} keys`;
|
|
174
|
+
const confirm = await p.confirm({
|
|
175
|
+
message: `Delete ${summary} from ${chalk.bold(scope.label)} scope?`,
|
|
176
|
+
});
|
|
177
|
+
if (p.isCancel(confirm) || !confirm)
|
|
178
|
+
process.exit(5);
|
|
179
|
+
}
|
|
180
|
+
const deletePayload = {};
|
|
181
|
+
keys.forEach((k) => { deletePayload[k] = null; });
|
|
182
|
+
await configApplySecrets(scope, deletePayload);
|
|
87
183
|
if (isJSONMode()) {
|
|
88
|
-
printJSON({ deleted: keys });
|
|
184
|
+
printJSON({ deleted: keys, scope: scope.label });
|
|
89
185
|
}
|
|
90
186
|
else {
|
|
91
|
-
success(`${keys.length} secret(s) deleted`);
|
|
187
|
+
success(`${keys.length} ${scope.label} secret(s) deleted`);
|
|
92
188
|
}
|
|
93
189
|
});
|
|
94
|
-
|
|
190
|
+
cmd
|
|
95
191
|
.command("import")
|
|
96
|
-
.description("Import secrets from stdin (KEY=value
|
|
97
|
-
.option("--
|
|
98
|
-
.
|
|
99
|
-
|
|
100
|
-
|
|
192
|
+
.description("Import secrets from stdin (KEY=value, one per line)")
|
|
193
|
+
.option("--global", "Target the whole project")
|
|
194
|
+
.option("-s, --service <name>", "Service to scope to (overrides linked)")
|
|
195
|
+
.option("-p, --project <id>", "Project to scope to")
|
|
196
|
+
.action(async (opts, sub) => {
|
|
197
|
+
const inherited = sub.parent?.opts() || {};
|
|
198
|
+
const scope = await resolveScope(opts.project ?? inherited.project, opts.service ?? inherited.service, opts.global || inherited.global);
|
|
101
199
|
const chunks = [];
|
|
102
|
-
for await (const chunk of process.stdin)
|
|
200
|
+
for await (const chunk of process.stdin)
|
|
103
201
|
chunks.push(chunk);
|
|
104
|
-
}
|
|
105
202
|
const input = Buffer.concat(chunks).toString("utf-8");
|
|
106
203
|
const newSecrets = {};
|
|
107
204
|
for (const line of input.split("\n")) {
|
|
108
205
|
const trimmed = line.trim();
|
|
109
206
|
if (!trimmed || trimmed.startsWith("#"))
|
|
110
207
|
continue;
|
|
111
|
-
const
|
|
112
|
-
if (
|
|
208
|
+
const eq = trimmed.indexOf("=");
|
|
209
|
+
if (eq < 1)
|
|
113
210
|
continue;
|
|
114
|
-
newSecrets[trimmed.slice(0,
|
|
115
|
-
}
|
|
116
|
-
if (Object.keys(newSecrets).length
|
|
117
|
-
throw new Error("No valid KEY=value pairs
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
const existing = await api.get(`/api/projects/${projectId}/secrets`);
|
|
121
|
-
const existingMap = new Map(existing.map((s) => [s.key, s.value]));
|
|
122
|
-
for (const [k, v] of Object.entries(newSecrets)) {
|
|
123
|
-
existingMap.set(k, v);
|
|
124
|
-
}
|
|
125
|
-
const merged = Array.from(existingMap.entries()).map(([key, value]) => ({
|
|
126
|
-
key,
|
|
127
|
-
value,
|
|
128
|
-
}));
|
|
129
|
-
await api.put(`/api/projects/${projectId}/secrets`, merged);
|
|
211
|
+
newSecrets[trimmed.slice(0, eq)] = trimmed.slice(eq + 1);
|
|
212
|
+
}
|
|
213
|
+
if (!Object.keys(newSecrets).length) {
|
|
214
|
+
throw new Error("No valid KEY=value pairs in input");
|
|
215
|
+
}
|
|
216
|
+
await configApplySecrets(scope, newSecrets);
|
|
130
217
|
if (isJSONMode()) {
|
|
131
|
-
printJSON({ imported: Object.keys(newSecrets) });
|
|
218
|
+
printJSON({ imported: Object.keys(newSecrets), scope: scope.label });
|
|
132
219
|
}
|
|
133
220
|
else {
|
|
134
|
-
success(`${Object.keys(newSecrets).length} secret(s) imported`);
|
|
221
|
+
success(`${Object.keys(newSecrets).length} ${scope.label} secret(s) imported`);
|
|
135
222
|
}
|
|
136
223
|
});
|
|
137
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* Fetch the reference manifest from the backend so users know which
|
|
227
|
+
* `${{...}}` templates are valid (e.g. `${{Postgres.DATABASE_URL}}`,
|
|
228
|
+
* `${{api.LIZARD_PUBLIC_DOMAIN}}`). Backend endpoint:
|
|
229
|
+
* GET /api/projects/<id>/variables:refs
|
|
230
|
+
* GET /api/apps/<id>/variables:refs (for service-scope)
|
|
231
|
+
*
|
|
232
|
+
* Returns a flat list of templates ready to copy-paste into secret values.
|
|
233
|
+
*/
|
|
234
|
+
async function printRefs(scope) {
|
|
235
|
+
const endpoint = scope.label === "service" && scope.serviceId
|
|
236
|
+
? withScope(`/api/apps/${scope.serviceId}/variables:refs`, scope.scope)
|
|
237
|
+
: withScope(`/api/projects/${scope.projectId}/variables:refs`, scope.scope);
|
|
238
|
+
const refs = await api.get(endpoint);
|
|
239
|
+
if (isJSONMode()) {
|
|
240
|
+
printJSON(refs);
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (!refs.length) {
|
|
244
|
+
console.log("No reference variables exposed in this scope.");
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
table(["Template", "Source", "Description"], refs.map((r) => [chalk.cyan(r.template), r.source || "—", r.description || ""]));
|
|
248
|
+
}
|
|
138
249
|
//# sourceMappingURL=secrets.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* `lizard service set` — atomic patch of per-service configuration.
|
|
4
|
+
*
|
|
5
|
+
* Input modes (priority):
|
|
6
|
+
* 1. <service> --set <path>=<value> — positional service + repeatable --set pairs
|
|
7
|
+
* 2. -f <file> — read JSON from file (multi-service)
|
|
8
|
+
* 3. piped stdin JSON — auto-detected when stdin has data
|
|
9
|
+
* 4. interactive — TTY prompts when nothing else is given
|
|
10
|
+
*
|
|
11
|
+
* Field names are flat and match the wire schema of `POST /config:apply`
|
|
12
|
+
* exactly. There is no nested {build,deploy,source} grouping anywhere in the
|
|
13
|
+
* system — DB columns, REST schemas, node-agent payloads, and `service show`
|
|
14
|
+
* output are all flat. See SERVICE_FIELDS below for the full list.
|
|
15
|
+
*
|
|
16
|
+
* Namespaces (variables.*, secrets.*, sharedVariables) are kept because they
|
|
17
|
+
* really are separate stores (per-service / project-wide env), not flat
|
|
18
|
+
* service-config fields.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Canonical service-config fields accepted by `--set` and as keys in a `-f`
|
|
22
|
+
* file's cfg blob. Mirrors `configApplySchema.serviceConfigSchema` in
|
|
23
|
+
* dragonlabs-platform/server/src/routes/projects.ts.
|
|
24
|
+
*/
|
|
25
|
+
export declare const SERVICE_FIELDS: readonly ["name", "sourceType", "repoUrl", "branch", "rootDirectory", "buildCommand", "watchPatterns", "dockerfilePath", "startCommand", "preDeployCommand", "healthcheckPath", "healthcheckTimeoutMs"];
|
|
26
|
+
export declare function validateName(name: string): string | null;
|
|
27
|
+
export declare function registerServiceSet(svc: Command): void;
|
|
28
|
+
/**
|
|
29
|
+
* Convert a normalised patch (services keyed by id, flat cfg blobs) into the
|
|
30
|
+
* wire body for `POST /api/projects/:id/config:apply`:
|
|
31
|
+
*
|
|
32
|
+
* { services: [{ id, name?, buildCommand?, startCommand?, ... }],
|
|
33
|
+
* secrets?: { shared?, services? } }
|
|
34
|
+
*
|
|
35
|
+
* `nameById` provides the current display name for each service id. Rename
|
|
36
|
+
* fires only when cfg.name is set AND differs from current — equal names
|
|
37
|
+
* are silently dropped so non-rename calls don't bloat the audit log.
|
|
38
|
+
*
|
|
39
|
+
* Unknown fields in cfg throw before any network call.
|
|
40
|
+
*/
|
|
41
|
+
export declare function flattenPatch(patch: any, nameById: Map<string, string>): {
|
|
42
|
+
services: any[];
|
|
43
|
+
secrets?: any;
|
|
44
|
+
};
|
|
45
|
+
/** Validate a `--set` dot-path against the canonical (flat) field list and
|
|
46
|
+
* the `variables.*` namespace. Throws on anything else. */
|
|
47
|
+
export declare function validateSetPath(dotPath: string): void;
|
|
48
|
+
export declare function parseValue(dotPath: string, raw: string): unknown;
|
|
49
|
+
export declare function setDeep(obj: Record<string, any>, dotPath: string, value: unknown): void;
|