ninedeploy 0.2.1
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/LICENSE +21 -0
- package/dist/client.d.ts +5 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +11 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/configCenter.d.ts +14 -0
- package/dist/commands/configCenter.d.ts.map +1 -0
- package/dist/commands/configCenter.js +56 -0
- package/dist/commands/configCenter.js.map +1 -0
- package/dist/commands/demo.d.ts +3 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +18 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/housekeeping.d.ts +3 -0
- package/dist/commands/housekeeping.d.ts.map +1 -0
- package/dist/commands/housekeeping.js +11 -0
- package/dist/commands/housekeeping.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +36 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/manage.d.ts +60 -0
- package/dist/commands/manage.d.ts.map +1 -0
- package/dist/commands/manage.js +440 -0
- package/dist/commands/manage.js.map +1 -0
- package/dist/commands/misc.d.ts +24 -0
- package/dist/commands/misc.d.ts.map +1 -0
- package/dist/commands/misc.js +183 -0
- package/dist/commands/misc.js.map +1 -0
- package/dist/commands/plugins.d.ts +15 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +77 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/services.d.ts +22 -0
- package/dist/commands/services.d.ts.map +1 -0
- package/dist/commands/services.js +236 -0
- package/dist/commands/services.js.map +1 -0
- package/dist/commands/setup.d.ts +3 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +40 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/token.d.ts +5 -0
- package/dist/commands/token.d.ts.map +1 -0
- package/dist/commands/token.js +33 -0
- package/dist/commands/token.js.map +1 -0
- package/dist/commands/workspaces.d.ts +8 -0
- package/dist/commands/workspaces.d.ts.map +1 -0
- package/dist/commands/workspaces.js +52 -0
- package/dist/commands/workspaces.js.map +1 -0
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +31 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +225 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/format.d.ts +34 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +145 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/prompts.d.ts +5 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +59 -0
- package/dist/prompts.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAErD,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACpC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC,IAAI,SAAS,CAAC;IACpE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,wBAAwB,CAAC,CAAC;IAC9D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACzD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,4BAA4B,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,mBAAmB,GAAG,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;gBAAE,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACrF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** `ninedeploy token create` — mint an API token (shown once). */
|
|
2
|
+
export declare function tokenCreateAction(): Promise<void>;
|
|
3
|
+
/** `ninedeploy token list` — list API tokens (without secrets). */
|
|
4
|
+
export declare function tokenListAction(): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/commands/token.ts"],"names":[],"mappings":"AAIA,kEAAkE;AAClE,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAevD;AAED,mEAAmE;AACnE,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAcrD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { NineDeployError } from '@ninedeploy/sdk';
|
|
2
|
+
import { getClient } from '../client.js';
|
|
3
|
+
import { prompt } from '../prompts.js';
|
|
4
|
+
/** `ninedeploy token create` — mint an API token (shown once). */
|
|
5
|
+
export async function tokenCreateAction() {
|
|
6
|
+
const name = (await prompt('Token name', 'ci')) || 'ci';
|
|
7
|
+
try {
|
|
8
|
+
const created = await getClient().auth.tokens.create({ name });
|
|
9
|
+
console.log(`✓ Token "${created.name}" created (id: ${created.id}).`);
|
|
10
|
+
console.log(' This token is shown ONCE — store it securely:');
|
|
11
|
+
console.log(` ${created.token}`);
|
|
12
|
+
console.log(' Use it as: Authorization: Bearer <token>');
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
console.error('✗ Could not create token:', err instanceof NineDeployError ? err.message : err instanceof Error ? err.message : err);
|
|
16
|
+
process.exitCode = 1;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** `ninedeploy token list` — list API tokens (without secrets). */
|
|
20
|
+
export async function tokenListAction() {
|
|
21
|
+
const tokens = await getClient().auth.tokens.list();
|
|
22
|
+
if (tokens.length === 0) {
|
|
23
|
+
console.log('No API tokens.');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
console.table(tokens.map((t) => ({
|
|
27
|
+
id: t.id,
|
|
28
|
+
name: t.name,
|
|
29
|
+
lastUsed: t.lastUsedAt ?? 'never',
|
|
30
|
+
created: t.createdAt,
|
|
31
|
+
})));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/commands/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,IAAI,kBAAkB,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,2BAA2B,EAC3B,GAAG,YAAY,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACxF,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,OAAO,CAAC,KAAK,CACX,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjB,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,QAAQ,EAAE,CAAC,CAAC,UAAU,IAAI,OAAO;QACjC,OAAO,EAAE,CAAC,CAAC,SAAS;KACrB,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NineDeployClient } from '@ninedeploy/sdk';
|
|
2
|
+
export declare function workspacesList(client: NineDeployClient): Promise<void>;
|
|
3
|
+
export declare function workspacesGet(client: NineDeployClient, id: string): Promise<void>;
|
|
4
|
+
export declare function workspacesCreate(client: NineDeployClient, name: string, opts: {
|
|
5
|
+
description?: string;
|
|
6
|
+
}): Promise<void>;
|
|
7
|
+
export declare function workspacesDelete(client: NineDeployClient, id: string): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=workspaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../src/commands/workspaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,wBAAsB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB5E;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBvF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5H;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1F"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { spinner, table } from '../lib/format.js';
|
|
2
|
+
export async function workspacesList(client) {
|
|
3
|
+
const list = await spinner('Fetching workspaces', () => client.workspaces.list());
|
|
4
|
+
if (list.length === 0) {
|
|
5
|
+
console.log(' No workspaces found.');
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
table(list.map((w) => ({
|
|
9
|
+
id: w.id,
|
|
10
|
+
name: w.name,
|
|
11
|
+
slug: w.slug,
|
|
12
|
+
role: w.myRole,
|
|
13
|
+
members: w.memberCount,
|
|
14
|
+
projects: w.projectCount,
|
|
15
|
+
created: new Date(w.createdAt).toLocaleDateString(),
|
|
16
|
+
})), ['id', 'name', 'slug', 'role', 'members', 'projects', 'created']);
|
|
17
|
+
}
|
|
18
|
+
export async function workspacesGet(client, id) {
|
|
19
|
+
const wsId = Number.parseInt(id, 10);
|
|
20
|
+
if (Number.isNaN(wsId)) {
|
|
21
|
+
throw new Error('Workspace ID must be an integer');
|
|
22
|
+
}
|
|
23
|
+
const ws = await spinner('Fetching workspace', () => client.workspaces.get(wsId));
|
|
24
|
+
console.log(`\n Workspace #${ws.id}: ${ws.name} (${ws.slug})`);
|
|
25
|
+
console.log(` Role: ${ws.myRole}`);
|
|
26
|
+
if (ws.description)
|
|
27
|
+
console.log(` Description: ${ws.description}`);
|
|
28
|
+
console.log(` Created: ${new Date(ws.createdAt).toLocaleString()}`);
|
|
29
|
+
console.log('\n Members:');
|
|
30
|
+
table(ws.members.map((m) => ({
|
|
31
|
+
userId: m.userId,
|
|
32
|
+
nameEmail: m.name ? `${m.name} <${m.email}>` : m.email,
|
|
33
|
+
role: m.role,
|
|
34
|
+
joined: new Date(m.createdAt).toLocaleDateString(),
|
|
35
|
+
})), ['userId', 'nameEmail', 'role', 'joined']);
|
|
36
|
+
}
|
|
37
|
+
export async function workspacesCreate(client, name, opts) {
|
|
38
|
+
const ws = await spinner('Creating workspace', () => client.workspaces.create({
|
|
39
|
+
name,
|
|
40
|
+
description: opts.description,
|
|
41
|
+
}));
|
|
42
|
+
console.log(` ✓ Workspace #${ws.id} created: ${ws.name} (${ws.slug})`);
|
|
43
|
+
}
|
|
44
|
+
export async function workspacesDelete(client, id) {
|
|
45
|
+
const wsId = Number.parseInt(id, 10);
|
|
46
|
+
if (Number.isNaN(wsId)) {
|
|
47
|
+
throw new Error('Workspace ID must be an integer');
|
|
48
|
+
}
|
|
49
|
+
await spinner('Deleting workspace', () => client.workspaces.delete(wsId));
|
|
50
|
+
console.log(` ✓ Workspace #${wsId} deleted.`);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=workspaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/commands/workspaces.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAwB;IAC3D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAClF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IACD,KAAK,CACH,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,CAAC,CAAC,MAAM;QACd,OAAO,EAAE,CAAC,CAAC,WAAW;QACtB,QAAQ,EAAE,CAAC,CAAC,YAAY;QACxB,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE;KACpD,CAAC,CAAC,EACH,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CACjE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAwB,EAAE,EAAU;IACtE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,IAAI,EAAE,CAAC,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,KAAK,CACH,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;QACtD,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE;KACnD,CAAC,CAAC,EACH,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAC1C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAwB,EAAE,IAAY,EAAE,IAA8B;IAC3G,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAClD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QACvB,IAAI;QACJ,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CACH,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAwB,EAAE,EAAU;IACzE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,OAAO,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,WAAW,CAAC,CAAC;AACjD,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,wBAAgB,UAAU,IAAI,SAAS,CAStC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAWlD"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
const CONFIG_DIR = path.join(homedir(), '.ninedeploy');
|
|
5
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
6
|
+
const DEFAULTS = { baseUrl: 'http://localhost:3000' };
|
|
7
|
+
export function loadConfig() {
|
|
8
|
+
try {
|
|
9
|
+
if (existsSync(CONFIG_FILE)) {
|
|
10
|
+
return { ...DEFAULTS, ...JSON.parse(readFileSync(CONFIG_FILE, 'utf8')) };
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
/* fall through to defaults */
|
|
15
|
+
}
|
|
16
|
+
return { ...DEFAULTS };
|
|
17
|
+
}
|
|
18
|
+
export function saveConfig(config) {
|
|
19
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
20
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
21
|
+
// writeFileSync's mode only applies at CREATION — re-assert 0600 so a file
|
|
22
|
+
// that ever ended up group/world-readable (restore, copy, old version)
|
|
23
|
+
// holding the bearer token is tightened on every save.
|
|
24
|
+
try {
|
|
25
|
+
chmodSync(CONFIG_FILE, 0o600);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
/* best-effort on exotic filesystems */
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AACvD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAOzD,MAAM,QAAQ,GAAc,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEjE,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAwB,EAAE,CAAC;QACnG,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IACD,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAiB;IAC1C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,2EAA2E;IAC3E,uEAAuE;IACvE,uDAAuD;IACvD,IAAI,CAAC;QACH,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { getClient } from './client.js';
|
|
4
|
+
import { loadConfig, saveConfig } from './config.js';
|
|
5
|
+
import { banner } from './lib/format.js';
|
|
6
|
+
import { loginAction } from './commands/login.js';
|
|
7
|
+
import { setupAction } from './commands/setup.js';
|
|
8
|
+
import { servicesCompose, servicesCreate, servicesDelete, servicesDeploy, servicesExport, servicesGet, servicesInspect, servicesLifecycle, servicesList, servicesLogs, } from './commands/services.js';
|
|
9
|
+
import { dbCreate, dbList, deploysList, deploysRollback, systemDashboard, systemInfo, systemUpdateCheck, tplDeploy, tplList, tokenCreate, tokenList, } from './commands/misc.js';
|
|
10
|
+
import { activityList, alertsCreate, alertsList, alertsRemove, backupsCreate, backupsList, backupsRestore, deploysWatch, domainsAdd, domainsList, domainsRemove, envList, envRemove, envSet, networksCreate, networksList, networksRemove, sessionsList, sessionsRevoke, systemExport, systemImport, usersList, usersResetLink, volumesList, volumesRemove, } from './commands/manage.js';
|
|
11
|
+
import { pluginsList, pluginsMarketplace, pluginsInstall, pluginsEnable, pluginsDisable, pluginsUninstall, pluginsInspect, pluginsReload, } from './commands/plugins.js';
|
|
12
|
+
import { configCenterList, configCenterGet, configCenterSet, configCenterDelete, } from './commands/configCenter.js';
|
|
13
|
+
import { demoSeed } from './commands/demo.js';
|
|
14
|
+
import { workspacesList, workspacesGet, workspacesCreate, workspacesDelete, } from './commands/workspaces.js';
|
|
15
|
+
import { housekeepingPrune } from './commands/housekeeping.js';
|
|
16
|
+
const program = new Command();
|
|
17
|
+
program
|
|
18
|
+
.name('ninedeploy')
|
|
19
|
+
.description('NineDeploy — self-hosted deployment platform CLI\n\n Deploy apps from Git or Docker Hub in one click.')
|
|
20
|
+
.version('0.2.1')
|
|
21
|
+
.helpOption('-h, --help', 'Display this help');
|
|
22
|
+
// ── Auth ──────────────────────────────────────────────────────────────────
|
|
23
|
+
program
|
|
24
|
+
.command('setup')
|
|
25
|
+
.description('Create the first admin user on a fresh instance')
|
|
26
|
+
.action(() => setupAction());
|
|
27
|
+
program
|
|
28
|
+
.command('login')
|
|
29
|
+
.description('Authenticate against a NineDeploy server')
|
|
30
|
+
.action(() => loginAction());
|
|
31
|
+
program
|
|
32
|
+
.command('logout')
|
|
33
|
+
.description('Clear stored credentials')
|
|
34
|
+
.action(async () => {
|
|
35
|
+
const cfg = loadConfig();
|
|
36
|
+
// Best-effort server-side revoke of the token before dropping it — a
|
|
37
|
+
// network failure must not block the local sign-out.
|
|
38
|
+
if (cfg.token) {
|
|
39
|
+
await getClient().auth.logout().catch(() => undefined);
|
|
40
|
+
}
|
|
41
|
+
saveConfig({ baseUrl: cfg.baseUrl });
|
|
42
|
+
console.log(' ✓ Signed out.');
|
|
43
|
+
});
|
|
44
|
+
program
|
|
45
|
+
.command('whoami')
|
|
46
|
+
.description('Show the currently authenticated user and server')
|
|
47
|
+
.action(async () => {
|
|
48
|
+
const cfg = loadConfig();
|
|
49
|
+
if (!cfg.token) {
|
|
50
|
+
console.log(' Not logged in. Run `ninedeploy login`.');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const user = await getClient().auth.me();
|
|
55
|
+
console.log(` ${user.email} (${user.role}) @ ${cfg.baseUrl}`);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
59
|
+
console.log(` Could not reach the server (${msg}). Check the URL/network, or run \`ninedeploy login\` if the token expired.`);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
program
|
|
64
|
+
.command('config')
|
|
65
|
+
.description('Show or change the server URL')
|
|
66
|
+
.option('-s, --server <url>', 'Set server URL')
|
|
67
|
+
.action((opts) => {
|
|
68
|
+
if (opts.server) {
|
|
69
|
+
saveConfig({ baseUrl: opts.server, token: loadConfig().token });
|
|
70
|
+
console.log(` ✓ Server set to ${opts.server}`);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const cfg = loadConfig();
|
|
74
|
+
console.log(` Server: ${cfg.baseUrl}`);
|
|
75
|
+
console.log(` Token: ${cfg.token ? '✓ configured' : '✗ not set'}`);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
// ── Services ──────────────────────────────────────────────────────────────
|
|
79
|
+
const services = program.command('services').description('Manage services');
|
|
80
|
+
services.command('list').description('List all services').action(() => servicesList(getClient()));
|
|
81
|
+
services.command('create').description('Create a service (interactive wizard)').action(() => servicesCreate(getClient()));
|
|
82
|
+
services.command('get <id>').description('Show service details').action((id) => servicesGet(getClient(), id));
|
|
83
|
+
services.command('deploy <id>').description('Trigger a new deployment').action((id) => servicesDeploy(getClient(), id));
|
|
84
|
+
services.command('logs <id>').description('View runtime container logs').action((id) => servicesLogs(getClient(), id));
|
|
85
|
+
services.command('stop <id>').description('Stop a running service').action((id) => servicesLifecycle(getClient(), 'stop', id));
|
|
86
|
+
services.command('start <id>').description('Start a stopped service').action((id) => servicesLifecycle(getClient(), 'start', id));
|
|
87
|
+
services.command('restart <id>').description('Restart a service').action((id) => servicesLifecycle(getClient(), 'restart', id));
|
|
88
|
+
services.command('delete <id>').description('Delete a service (with confirmation)').action((id) => servicesDelete(getClient(), id));
|
|
89
|
+
services.command('export <id>').description('Export a service as a JSON bundle').action((id) => servicesExport(getClient(), id));
|
|
90
|
+
services.command('compose <id>').description('Show generated runtime Docker Compose YAML').action((id) => servicesCompose(getClient(), id));
|
|
91
|
+
services.command('inspect <id>').description('Inspect runtime container and Traefik tags').action((id) => servicesInspect(getClient(), id));
|
|
92
|
+
// ── Databases ────────────────────────────────────────────────────────────
|
|
93
|
+
const databases = program.command('databases').description('Manage databases');
|
|
94
|
+
databases.command('list').description('List all databases').action(() => dbList(getClient()));
|
|
95
|
+
databases.command('create').description('Create a database (interactive)').action(() => dbCreate(getClient()));
|
|
96
|
+
// ── Templates ─────────────────────────────────────────────────────────────
|
|
97
|
+
const templates = program.command('templates').description('Browse the template hub');
|
|
98
|
+
templates.command('list').description('List all templates').action(() => tplList(getClient()));
|
|
99
|
+
templates.command('deploy <id>').description('Deploy a template by ID').action((id) => tplDeploy(getClient(), id));
|
|
100
|
+
// ── Deploys ───────────────────────────────────────────────────────────────
|
|
101
|
+
const deploys = program.command('deploys').description('Manage deployments');
|
|
102
|
+
deploys.command('list <serviceId>').description('List deployments for a service').action((id) => deploysList(getClient(), id));
|
|
103
|
+
deploys.command('rollback <serviceId> <deployId>').description('Rollback to a previous deployment').action((svcId, depId) => deploysRollback(getClient(), svcId, depId));
|
|
104
|
+
// ── Token ─────────────────────────────────────────────────────────────────
|
|
105
|
+
const token = program.command('token').description('Manage API tokens');
|
|
106
|
+
token.command('create').description('Create a new API token').action(() => tokenCreate(getClient()));
|
|
107
|
+
token.command('list').description('List API tokens').action(() => tokenList(getClient()));
|
|
108
|
+
// ── System ────────────────────────────────────────────────────────────────
|
|
109
|
+
const system = program.command('system').description('System information & tools');
|
|
110
|
+
system.command('info').description('Show version, stats, and tech stack').action(() => systemInfo(getClient()));
|
|
111
|
+
system.command('dashboard').description('Live dashboard with service health').action(() => systemDashboard(getClient()));
|
|
112
|
+
system.command('update-check').description('Compare the running version with the latest release')
|
|
113
|
+
.option('-f, --force', 'Bypass the 6h cache')
|
|
114
|
+
.action((opts) => systemUpdateCheck(getClient(), opts.force === true));
|
|
115
|
+
// ── Env vars ──────────────────────────────────────────────────────────────
|
|
116
|
+
const envCmd = program.command('env').description('Manage service environment variables');
|
|
117
|
+
envCmd.command('list <serviceId>').description('List a service\'s env vars').action((id) => envList(getClient(), id));
|
|
118
|
+
envCmd.command('set <serviceId> <key> <value>')
|
|
119
|
+
.description('Create or update an env var (secret by default)')
|
|
120
|
+
.option('--public', 'Store as a plain (non-secret) value')
|
|
121
|
+
.action((id, key, value, opts) => envSet(getClient(), id, key, value, opts));
|
|
122
|
+
envCmd.command('rm <serviceId> <key>').description('Remove an env var by key').action((id, key) => envRemove(getClient(), id, key));
|
|
123
|
+
// ── Domains ────────────────────────────────────────────────────────────────
|
|
124
|
+
const domainsCmd = program.command('domains').description('Manage domains & routing');
|
|
125
|
+
domainsCmd.command('list').description('List all domains').action(() => domainsList(getClient()));
|
|
126
|
+
domainsCmd.command('add <serviceId> <host>')
|
|
127
|
+
.description('Route a hostname to a service')
|
|
128
|
+
.option('-p, --path <path>', 'Path prefix', '/')
|
|
129
|
+
.option('--no-ssl', 'Serve over plain HTTP (no TLS)')
|
|
130
|
+
.action((id, host, opts) => domainsAdd(getClient(), id, host, opts));
|
|
131
|
+
domainsCmd.command('rm <serviceId> <domainId>').description('Remove a domain').action((svcId, domId) => domainsRemove(getClient(), svcId, domId));
|
|
132
|
+
// ── Volumes ────────────────────────────────────────────────────────────────
|
|
133
|
+
const volumesCmd = program.command('volumes').description('Manage Docker volumes');
|
|
134
|
+
volumesCmd.command('list').description('List all volumes').action(() => volumesList(getClient()));
|
|
135
|
+
volumesCmd.command('rm <name>').description('Delete a volume (with confirmation)').action((name) => volumesRemove(getClient(), name));
|
|
136
|
+
// ── Networks ───────────────────────────────────────────────────────────────
|
|
137
|
+
const networksCmd = program.command('networks').description('Manage Docker networks');
|
|
138
|
+
networksCmd.command('list').description('List user-defined networks').action(() => networksList(getClient()));
|
|
139
|
+
networksCmd.command('create <name> [driver]').description('Create a network (bridge|overlay)').action((name, driver) => networksCreate(getClient(), name, driver === 'overlay' ? 'overlay' : 'bridge'));
|
|
140
|
+
networksCmd.command('rm <name>').description('Delete a network (with confirmation)').action((name) => networksRemove(getClient(), name));
|
|
141
|
+
// ── Sessions ───────────────────────────────────────────────────────────────
|
|
142
|
+
const sessionsCmd = program.command('sessions').description('Manage your active sessions');
|
|
143
|
+
sessionsCmd.command('list').description('List active sessions').action(() => sessionsList(getClient()));
|
|
144
|
+
sessionsCmd.command('revoke <id>').description('Revoke a session').action((id) => sessionsRevoke(getClient(), id));
|
|
145
|
+
// ── Backups ────────────────────────────────────────────────────────────────
|
|
146
|
+
const backupsCmd = program.command('backups').description('Manage database backups');
|
|
147
|
+
backupsCmd.command('list [databaseId]').description('List backups (all, or one database\'s)').action((id) => backupsList(getClient(), id));
|
|
148
|
+
backupsCmd.command('create <databaseId>').description('Back a database up now').action((id) => backupsCreate(getClient(), id));
|
|
149
|
+
backupsCmd.command('restore <databaseId> <backupId>').description('Restore a backup (destructive)').action((id, bId) => backupsRestore(getClient(), id, bId));
|
|
150
|
+
// ── Alerts ─────────────────────────────────────────────────────────────────
|
|
151
|
+
const alertsCmd = program.command('alerts').description('Manage alert rules');
|
|
152
|
+
alertsCmd.command('list').description('List alert rules').action(() => alertsList(getClient()));
|
|
153
|
+
alertsCmd.command('create <name> <metric> <operator> <threshold>')
|
|
154
|
+
.description('Create an alert rule (metric: cpu|memory|cert-expiry, operator: > or <)')
|
|
155
|
+
.option('-w, --windows <n>', 'Consecutive 30s samples before firing', '1')
|
|
156
|
+
.option('-s, --service <id>', 'Scope to a service (default: host-wide)')
|
|
157
|
+
.action((name, metric, op, threshold, opts) => alertsCreate(getClient(), name, metric, op, threshold, opts));
|
|
158
|
+
alertsCmd.command('rm <id>').description('Delete an alert rule').action((id) => alertsRemove(getClient(), id));
|
|
159
|
+
// ── Users & activity ───────────────────────────────────────────────────────
|
|
160
|
+
program.command('users').description('List users (admin)').action(() => usersList(getClient()));
|
|
161
|
+
program.command('reset-link <idOrEmail>').description('Generate a one-time password reset link (admin)')
|
|
162
|
+
.action((who) => usersResetLink(getClient(), who));
|
|
163
|
+
program.command('activity').description('Show recent activity').action(() => activityList(getClient()));
|
|
164
|
+
// ── Plugins & Microkernel ───────────────────────────────────────────────────
|
|
165
|
+
const plugins = program.command('plugins').description('Manage plugins and marketplace extensions');
|
|
166
|
+
plugins.command('list').description('List all installed plugins').action(() => pluginsList(getClient()));
|
|
167
|
+
plugins.command('marketplace').description('Browse verified marketplace extensions').action(() => pluginsMarketplace(getClient()));
|
|
168
|
+
plugins.command('inspect <id>').description('Inspect plugin manifest and runtime telemetry').action((id) => pluginsInspect(getClient(), id));
|
|
169
|
+
plugins.command('install <target>').description('Install a plugin (marketplace, npm, git, local)')
|
|
170
|
+
.option('-s, --source <source>', 'Source type (marketplace, npm, git, local)', 'marketplace')
|
|
171
|
+
.option('-n, --name <name>', 'Custom display name')
|
|
172
|
+
.option('-v, --version <version>', 'Custom version')
|
|
173
|
+
.option('-d, --desc <description>', 'Description')
|
|
174
|
+
.action((target, opts) => pluginsInstall(getClient(), target, opts));
|
|
175
|
+
plugins.command('enable <id>').description('Enable an installed plugin').action((id) => pluginsEnable(getClient(), id));
|
|
176
|
+
plugins.command('disable <id>').description('Disable a plugin').action((id) => pluginsDisable(getClient(), id));
|
|
177
|
+
plugins.command('reload <id>').description('Hot-reload a plugin').action((id) => pluginsReload(getClient(), id));
|
|
178
|
+
plugins.command('uninstall <id>').description('Uninstall a plugin').action((id) => pluginsUninstall(getClient(), id));
|
|
179
|
+
// ── Configuration Center ────────────────────────────────────────────────────
|
|
180
|
+
const configCenter = program.command('config-center').description('Manage central configuration entries and secrets');
|
|
181
|
+
configCenter.command('list').description('List configuration entries')
|
|
182
|
+
.option('-c, --category <category>', 'Filter by category')
|
|
183
|
+
.option('-p, --plugin <pluginId>', 'Filter by plugin id')
|
|
184
|
+
.option('-r, --reveal', 'Reveal decrypted secrets (admin only)')
|
|
185
|
+
.action((opts) => configCenterList(getClient(), opts));
|
|
186
|
+
configCenter.command('get <key>').description('Get a configuration key in detail').action((key) => configCenterGet(getClient(), key));
|
|
187
|
+
configCenter.command('set <key> <value>').description('Set or update a configuration key')
|
|
188
|
+
.option('-s, --secret', 'Mark as encrypted secret')
|
|
189
|
+
.option('-d, --desc <description>', 'Description')
|
|
190
|
+
.option('-t, --tags <tags>', 'Comma-separated tags')
|
|
191
|
+
.action((key, value, opts) => configCenterSet(getClient(), key, value, opts));
|
|
192
|
+
configCenter.command('delete <key>').description('Delete a custom configuration key').action((key) => configCenterDelete(getClient(), key));
|
|
193
|
+
// ── Workspaces & Teams ──────────────────────────────────────────────────────
|
|
194
|
+
const workspaces = program.command('workspaces').description('Manage workspaces and team organizations');
|
|
195
|
+
workspaces.command('list').description('List accessible workspaces').action(() => workspacesList(getClient()));
|
|
196
|
+
workspaces.command('get <id>').description('Get workspace details and team members').action((id) => workspacesGet(getClient(), id));
|
|
197
|
+
workspaces.command('create <name>').description('Create a new workspace')
|
|
198
|
+
.option('-d, --desc <description>', 'Workspace description')
|
|
199
|
+
.action((name, opts) => workspacesCreate(getClient(), name, { description: opts.desc }));
|
|
200
|
+
workspaces.command('delete <id>').description('Delete a workspace').action((id) => workspacesDelete(getClient(), id));
|
|
201
|
+
// ── Housekeeping ────────────────────────────────────────────────────────────
|
|
202
|
+
system.command('prune').description('Run system housekeeping prune (images, containers, build artifacts)').action(() => housekeepingPrune(getClient()));
|
|
203
|
+
// ── Demo Mode ──────────────────────────────────────────────────────────────
|
|
204
|
+
const demo = program.command('demo').description('Demo mode operations');
|
|
205
|
+
demo.command('seed').description('Seed Next.js Docker + PM2 demo environment with PostgreSQL database').action(() => demoSeed(getClient()));
|
|
206
|
+
// ── System export/import + deploy log streaming ────────────────────────────
|
|
207
|
+
system.command('export [file]').description('Export the full system state as JSON').action((file) => systemExport(file));
|
|
208
|
+
system.command('import <file>').description('Import a system bundle (destructive)').action((file) => systemImport(file));
|
|
209
|
+
deploys.command('watch <serviceId> <deployId>').description('Stream a deployment\'s build logs live').action((svcId, depId) => deploysWatch(svcId, depId));
|
|
210
|
+
// ── Banner on bare `ninedeploy` ───────────────────────────────────────────
|
|
211
|
+
if (process.argv.length <= 2) {
|
|
212
|
+
banner();
|
|
213
|
+
console.log(` ${'Quick start:'.padEnd(20)} ninedeploy setup`);
|
|
214
|
+
console.log(` ${'Browse templates:'.padEnd(20)} ninedeploy templates list`);
|
|
215
|
+
console.log(` ${'Deploy a service:'.padEnd(20)} ninedeploy services create`);
|
|
216
|
+
console.log(` ${'View dashboard:'.padEnd(20)} ninedeploy system dashboard`);
|
|
217
|
+
console.log(` ${'Full help:'.padEnd(20)} ninedeploy --help`);
|
|
218
|
+
console.log();
|
|
219
|
+
process.exit(0);
|
|
220
|
+
}
|
|
221
|
+
program.parseAsync().catch((err) => {
|
|
222
|
+
console.error(err instanceof Error ? `\n ✗ ${err.message}\n` : String(err));
|
|
223
|
+
process.exit(1);
|
|
224
|
+
});
|
|
225
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** CLI formatting utilities — colors, spinners, tables, banners. */
|
|
2
|
+
export declare const c: {
|
|
3
|
+
reset: (s: string) => string;
|
|
4
|
+
bold: (s: string) => string;
|
|
5
|
+
dim: (s: string) => string;
|
|
6
|
+
red: (s: string) => string;
|
|
7
|
+
green: (s: string) => string;
|
|
8
|
+
yellow: (s: string) => string;
|
|
9
|
+
blue: (s: string) => string;
|
|
10
|
+
magenta: (s: string) => string;
|
|
11
|
+
cyan: (s: string) => string;
|
|
12
|
+
gray: (s: string) => string;
|
|
13
|
+
};
|
|
14
|
+
export declare function statusColor(status: string): string;
|
|
15
|
+
export declare function banner(): void;
|
|
16
|
+
/** Simple spinner that shows a message while a promise resolves. */
|
|
17
|
+
export declare function spinner<T>(msg: string, fn: () => Promise<T>): Promise<T>;
|
|
18
|
+
/** Print a formatted table from an array of objects. */
|
|
19
|
+
export declare function table(rows: Record<string, unknown>[], columns?: string[]): void;
|
|
20
|
+
/** Print a key-value pair with alignment. */
|
|
21
|
+
export declare function kv(key: string, value: unknown, indent?: number): void;
|
|
22
|
+
/** Print a section header. */
|
|
23
|
+
export declare function header(title: string): void;
|
|
24
|
+
/** Print an error and exit. */
|
|
25
|
+
export declare function error(msg: string, code?: number): void;
|
|
26
|
+
/** Print a success message. */
|
|
27
|
+
export declare function success(msg: string): void;
|
|
28
|
+
/** Print an info message. */
|
|
29
|
+
export declare function info(msg: string): void;
|
|
30
|
+
/** Format bytes to human readable. */
|
|
31
|
+
export declare function fmtBytes(b: number): string;
|
|
32
|
+
/** Format relative time. */
|
|
33
|
+
export declare function fmtTime(ts: string | null | undefined): string;
|
|
34
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAapE,eAAO,MAAM,CAAC;IACZ,KAAK,MAAM,MAAM;IACjB,IAAI,MAAM,MAAM;IAChB,GAAG,MAAM,MAAM;IACf,GAAG,MAAM,MAAM;IACf,KAAK,MAAM,MAAM;IACjB,MAAM,MAAM,MAAM;IAClB,IAAI,MAAM,MAAM;IAChB,OAAO,MAAM,MAAM;IACnB,IAAI,MAAM,MAAM;IAChB,IAAI,MAAM,MAAM;CACjB,CAAC;AAoBF,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,MAAM,IAAI,IAAI,CAO7B;AAED,oEAAoE;AACpE,wBAAsB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAiB9E;AAED,wDAAwD;AACxD,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAoB/E;AAED,6CAA6C;AAC7C,wBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,SAAI,GAAG,IAAI,CAIhE;AAED,8BAA8B;AAC9B,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI1C;AAED,+BAA+B;AAC/B,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,IAAI,CAGjD;AAED,+BAA+B;AAC/B,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,6BAA6B;AAC7B,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,sCAAsC;AACtC,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM1C;AAED,4BAA4B;AAC5B,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAO7D"}
|