@lizard-build/cli 0.3.80 → 0.3.81
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/commands/projects.js +30 -1
- package/dist/commands/projects.js.map +1 -1
- package/dist/commands/redeploy.js +6 -3
- package/dist/commands/redeploy.js.map +1 -1
- package/dist/commands/restart.js +6 -3
- package/dist/commands/restart.js.map +1 -1
- package/dist/lib/updater.d.ts +1 -1
- package/dist/lib/updater.js +1 -1
- package/package.json +1 -1
- package/src/commands/projects.ts +31 -1
- package/src/commands/redeploy.ts +5 -3
- package/src/commands/restart.ts +5 -3
- package/src/lib/updater.ts +1 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
+
import * as p from "@clack/prompts";
|
|
2
3
|
import { api, withQuery } from "../lib/api.js";
|
|
3
|
-
import { success, isJSONMode, printJSON, table } from "../lib/format.js";
|
|
4
|
+
import { success, isJSONMode, printJSON, table, isTTY } from "../lib/format.js";
|
|
4
5
|
import { pickWorkspace, resolveWorkspace } from "../lib/picker.js";
|
|
6
|
+
import { resolveProjectId } from "../lib/config.js";
|
|
5
7
|
export function registerProjects(program) {
|
|
6
8
|
const proj = program
|
|
7
9
|
.command("project")
|
|
@@ -54,5 +56,32 @@ export function registerProjects(program) {
|
|
|
54
56
|
success(`Project ${chalk.bold(project.name)} created in ${chalk.bold(workspace.name)}`);
|
|
55
57
|
}
|
|
56
58
|
});
|
|
59
|
+
proj
|
|
60
|
+
.command("delete")
|
|
61
|
+
.alias("rm")
|
|
62
|
+
.description("Delete a project — moves it to trash, permanently purged after 3 days")
|
|
63
|
+
.argument("[project]", "Project name, slug, or ID (defaults to the project linked in this directory)")
|
|
64
|
+
.option("-y, --yes", "Skip confirmation")
|
|
65
|
+
.action(async (projectArg, opts) => {
|
|
66
|
+
const projectId = await resolveProjectId(projectArg);
|
|
67
|
+
const projects = await api.get("/api/projects");
|
|
68
|
+
const name = projects.find((proj) => proj.id === projectId)?.name ?? projectId;
|
|
69
|
+
if (!opts.yes) {
|
|
70
|
+
if (!isTTY())
|
|
71
|
+
throw new Error("Use -y to confirm in non-interactive mode");
|
|
72
|
+
const confirm = await p.confirm({
|
|
73
|
+
message: `Delete project ${chalk.bold(name)}? All its services will stop; the project is recoverable for 3 days, then permanently removed.`,
|
|
74
|
+
});
|
|
75
|
+
if (p.isCancel(confirm) || !confirm)
|
|
76
|
+
process.exit(5);
|
|
77
|
+
}
|
|
78
|
+
await api.delete(`/api/projects/${projectId}`);
|
|
79
|
+
if (isJSONMode()) {
|
|
80
|
+
printJSON({ id: projectId, name, status: "deleted" });
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
success(`Project ${chalk.bold(name)} deleted (recoverable for 3 days)`);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
57
86
|
}
|
|
58
87
|
//# sourceMappingURL=projects.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,8 +24,6 @@ export function registerRedeploy(program) {
|
|
|
24
24
|
id = resolved.id;
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
|
-
if (!isTTY())
|
|
28
|
-
throw new Error("Provide an app name or ID, or run interactively");
|
|
29
27
|
const { projectId, scope } = await resolveProjectScope(opts.project);
|
|
30
28
|
const data = await api.get(withScope(`/api/projects/${projectId}/services`, scope));
|
|
31
29
|
const apps = data.apps || [];
|
|
@@ -33,9 +31,11 @@ export function registerRedeploy(program) {
|
|
|
33
31
|
throw new Error("No apps in project. Create one with `lizard up` or `lizard add`.");
|
|
34
32
|
}
|
|
35
33
|
if (apps.length === 1) {
|
|
34
|
+
// Only one app — no ambiguity, resolve it regardless of TTY so
|
|
35
|
+
// scripted/non-interactive callers don't need to pass a redundant name.
|
|
36
36
|
id = apps[0].id;
|
|
37
37
|
}
|
|
38
|
-
else {
|
|
38
|
+
else if (isTTY()) {
|
|
39
39
|
const selected = await p.select({
|
|
40
40
|
message: "Select app to redeploy",
|
|
41
41
|
options: apps.map((a) => ({
|
|
@@ -48,6 +48,9 @@ export function registerRedeploy(program) {
|
|
|
48
48
|
process.exit(5);
|
|
49
49
|
id = selected;
|
|
50
50
|
}
|
|
51
|
+
else {
|
|
52
|
+
throw new Error("Multiple apps — provide an app name or ID, or run interactively");
|
|
53
|
+
}
|
|
51
54
|
}
|
|
52
55
|
const spinner = ora("Starting redeploy...").start();
|
|
53
56
|
// The endpoint pre-creates and returns the Build record — use its id
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redeploy.js","sourceRoot":"","sources":["../../src/commands/redeploy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEtF,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,QAAQ,CAAC,YAAY,EAAE,4BAA4B,CAAC;SACpD,WAAW,CAAC,uEAAuE,CAAC;SACpF,MAAM,CAAC,UAAU,EAAE,mBAAmB,CAAC;SACvC,MAAM,CAAC,sBAAsB,EAAE,uCAAuC,CAAC;SACvE,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,QAA4B,EAAE,IAAI,EAAE,EAAE;QACnD,MAAM,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC;QACrC,IAAI,EAAsB,CAAC;QAC3B,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACtD,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAAC,CAAC;YAC5C,CAAC;YACD,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,
|
|
1
|
+
{"version":3,"file":"redeploy.js","sourceRoot":"","sources":["../../src/commands/redeploy.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/restart.js
CHANGED
|
@@ -24,17 +24,17 @@ export function registerRestart(program) {
|
|
|
24
24
|
id = resolved.id;
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
|
-
if (!isTTY())
|
|
28
|
-
throw new Error("Provide an app name or ID, or run interactively");
|
|
29
27
|
const { projectId, scope } = await resolveProjectScope(opts.project);
|
|
30
28
|
const data = await api.get(withScope(`/api/projects/${projectId}/services`, scope));
|
|
31
29
|
const apps = data.apps || [];
|
|
32
30
|
if (apps.length === 0)
|
|
33
31
|
throw new Error("No apps in project");
|
|
34
32
|
if (apps.length === 1) {
|
|
33
|
+
// Only one app — no ambiguity, resolve it regardless of TTY so
|
|
34
|
+
// scripted/non-interactive callers don't need to pass a redundant name.
|
|
35
35
|
id = apps[0].id;
|
|
36
36
|
}
|
|
37
|
-
else {
|
|
37
|
+
else if (isTTY()) {
|
|
38
38
|
const selected = await p.select({
|
|
39
39
|
message: "Select app to restart",
|
|
40
40
|
options: apps.map((a) => ({
|
|
@@ -47,6 +47,9 @@ export function registerRestart(program) {
|
|
|
47
47
|
process.exit(5);
|
|
48
48
|
id = selected;
|
|
49
49
|
}
|
|
50
|
+
else {
|
|
51
|
+
throw new Error("Multiple apps — provide an app name or ID, or run interactively");
|
|
52
|
+
}
|
|
50
53
|
}
|
|
51
54
|
const spinner = ora("Starting restart...").start();
|
|
52
55
|
await api.post(`/api/apps/${id}/restart`, undefined, { "X-Deploy-Source": "cli" });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEtF,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CAAC,YAAY,EAAE,2BAA2B,CAAC;SACnD,WAAW,CAAC,gBAAgB,CAAC;SAC7B,MAAM,CAAC,UAAU,EAAE,mBAAmB,CAAC;SACvC,MAAM,CAAC,sBAAsB,EAAE,uCAAuC,CAAC;SACvE,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,QAA4B,EAAE,IAAI,EAAE,EAAE;QACnD,MAAM,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC;QACrC,IAAI,EAAsB,CAAC;QAC3B,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACtD,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAAC,CAAC;YAC5C,CAAC;YACD,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,
|
|
1
|
+
{"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/updater.d.ts
CHANGED
package/dist/lib/updater.js
CHANGED
|
@@ -4,7 +4,7 @@ import { Readable } from "node:stream";
|
|
|
4
4
|
import { join, dirname } from "node:path";
|
|
5
5
|
import os from "node:os";
|
|
6
6
|
import { spawn } from "node:child_process";
|
|
7
|
-
export const CURRENT_VERSION = "0.3.
|
|
7
|
+
export const CURRENT_VERSION = "0.3.81";
|
|
8
8
|
const RELEASES_API = "https://api.github.com/repos/lizard-build/lizard-cli/releases/latest";
|
|
9
9
|
const RELEASE_BASE = "https://github.com/lizard-build/lizard-cli/releases/latest/download";
|
|
10
10
|
/** Minimum gap between background update checks. */
|
package/package.json
CHANGED
package/src/commands/projects.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
+
import * as p from "@clack/prompts";
|
|
2
3
|
import { Command } from "commander";
|
|
3
4
|
import { api, withQuery } from "../lib/api.js";
|
|
4
|
-
import { success, isJSONMode, printJSON, table } from "../lib/format.js";
|
|
5
|
+
import { success, isJSONMode, printJSON, table, isTTY } from "../lib/format.js";
|
|
5
6
|
import { pickWorkspace, resolveWorkspace } from "../lib/picker.js";
|
|
7
|
+
import { resolveProjectId } from "../lib/config.js";
|
|
6
8
|
|
|
7
9
|
interface Project {
|
|
8
10
|
id: string;
|
|
@@ -79,4 +81,32 @@ export function registerProjects(program: Command) {
|
|
|
79
81
|
);
|
|
80
82
|
}
|
|
81
83
|
});
|
|
84
|
+
|
|
85
|
+
proj
|
|
86
|
+
.command("delete")
|
|
87
|
+
.alias("rm")
|
|
88
|
+
.description("Delete a project — moves it to trash, permanently purged after 3 days")
|
|
89
|
+
.argument("[project]", "Project name, slug, or ID (defaults to the project linked in this directory)")
|
|
90
|
+
.option("-y, --yes", "Skip confirmation")
|
|
91
|
+
.action(async (projectArg: string | undefined, opts) => {
|
|
92
|
+
const projectId = await resolveProjectId(projectArg);
|
|
93
|
+
const projects = await api.get<Project[]>("/api/projects");
|
|
94
|
+
const name = projects.find((proj) => proj.id === projectId)?.name ?? projectId;
|
|
95
|
+
|
|
96
|
+
if (!opts.yes) {
|
|
97
|
+
if (!isTTY()) throw new Error("Use -y to confirm in non-interactive mode");
|
|
98
|
+
const confirm = await p.confirm({
|
|
99
|
+
message: `Delete project ${chalk.bold(name)}? All its services will stop; the project is recoverable for 3 days, then permanently removed.`,
|
|
100
|
+
});
|
|
101
|
+
if (p.isCancel(confirm) || !confirm) process.exit(5);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
await api.delete(`/api/projects/${projectId}`);
|
|
105
|
+
|
|
106
|
+
if (isJSONMode()) {
|
|
107
|
+
printJSON({ id: projectId, name, status: "deleted" });
|
|
108
|
+
} else {
|
|
109
|
+
success(`Project ${chalk.bold(name)} deleted (recoverable for 3 days)`);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
82
112
|
}
|
package/src/commands/redeploy.ts
CHANGED
|
@@ -25,8 +25,6 @@ export function registerRedeploy(program: Command) {
|
|
|
25
25
|
}
|
|
26
26
|
id = resolved.id;
|
|
27
27
|
} else {
|
|
28
|
-
if (!isTTY()) throw new Error("Provide an app name or ID, or run interactively");
|
|
29
|
-
|
|
30
28
|
const { projectId, scope } = await resolveProjectScope(opts.project);
|
|
31
29
|
const data = await api.get<{ apps: any[] }>(withScope(`/api/projects/${projectId}/services`, scope));
|
|
32
30
|
const apps = data.apps || [];
|
|
@@ -38,8 +36,10 @@ export function registerRedeploy(program: Command) {
|
|
|
38
36
|
}
|
|
39
37
|
|
|
40
38
|
if (apps.length === 1) {
|
|
39
|
+
// Only one app — no ambiguity, resolve it regardless of TTY so
|
|
40
|
+
// scripted/non-interactive callers don't need to pass a redundant name.
|
|
41
41
|
id = apps[0].id;
|
|
42
|
-
} else {
|
|
42
|
+
} else if (isTTY()) {
|
|
43
43
|
const selected = await p.select({
|
|
44
44
|
message: "Select app to redeploy",
|
|
45
45
|
options: apps.map((a: any) => ({
|
|
@@ -50,6 +50,8 @@ export function registerRedeploy(program: Command) {
|
|
|
50
50
|
});
|
|
51
51
|
if (p.isCancel(selected)) process.exit(5);
|
|
52
52
|
id = selected as string;
|
|
53
|
+
} else {
|
|
54
|
+
throw new Error("Multiple apps — provide an app name or ID, or run interactively");
|
|
53
55
|
}
|
|
54
56
|
}
|
|
55
57
|
|
package/src/commands/restart.ts
CHANGED
|
@@ -25,8 +25,6 @@ export function registerRestart(program: Command) {
|
|
|
25
25
|
}
|
|
26
26
|
id = resolved.id;
|
|
27
27
|
} else {
|
|
28
|
-
if (!isTTY()) throw new Error("Provide an app name or ID, or run interactively");
|
|
29
|
-
|
|
30
28
|
const { projectId, scope } = await resolveProjectScope(opts.project);
|
|
31
29
|
const data = await api.get<{ apps: any[] }>(withScope(`/api/projects/${projectId}/services`, scope));
|
|
32
30
|
const apps = data.apps || [];
|
|
@@ -34,8 +32,10 @@ export function registerRestart(program: Command) {
|
|
|
34
32
|
if (apps.length === 0) throw new Error("No apps in project");
|
|
35
33
|
|
|
36
34
|
if (apps.length === 1) {
|
|
35
|
+
// Only one app — no ambiguity, resolve it regardless of TTY so
|
|
36
|
+
// scripted/non-interactive callers don't need to pass a redundant name.
|
|
37
37
|
id = apps[0].id;
|
|
38
|
-
} else {
|
|
38
|
+
} else if (isTTY()) {
|
|
39
39
|
const selected = await p.select({
|
|
40
40
|
message: "Select app to restart",
|
|
41
41
|
options: apps.map((a: any) => ({
|
|
@@ -46,6 +46,8 @@ export function registerRestart(program: Command) {
|
|
|
46
46
|
});
|
|
47
47
|
if (p.isCancel(selected)) process.exit(5);
|
|
48
48
|
id = selected as string;
|
|
49
|
+
} else {
|
|
50
|
+
throw new Error("Multiple apps — provide an app name or ID, or run interactively");
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
53
|
|
package/src/lib/updater.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { join, dirname } from "node:path";
|
|
|
5
5
|
import os from "node:os";
|
|
6
6
|
import { spawn } from "node:child_process";
|
|
7
7
|
|
|
8
|
-
export const CURRENT_VERSION = "0.3.
|
|
8
|
+
export const CURRENT_VERSION = "0.3.81";
|
|
9
9
|
const RELEASES_API = "https://api.github.com/repos/lizard-build/lizard-cli/releases/latest";
|
|
10
10
|
const RELEASE_BASE = "https://github.com/lizard-build/lizard-cli/releases/latest/download";
|
|
11
11
|
|