@elaraai/e3-cloud-cli 0.0.0-stage → 1.0.89-alpha.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/LICENSE.md +54 -0
- package/README.md +433 -2
- package/dist/src/app-source.d.ts +16 -0
- package/dist/src/app-source.d.ts.map +1 -0
- package/dist/src/app-source.js +112 -0
- package/dist/src/app-source.js.map +1 -0
- package/dist/src/cli.d.ts +7 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +472 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/app.d.ts +28 -0
- package/dist/src/commands/app.d.ts.map +1 -0
- package/dist/src/commands/app.js +286 -0
- package/dist/src/commands/app.js.map +1 -0
- package/dist/src/commands/compute.d.ts +16 -0
- package/dist/src/commands/compute.d.ts.map +1 -0
- package/dist/src/commands/compute.js +110 -0
- package/dist/src/commands/compute.js.map +1 -0
- package/dist/src/commands/feedback.d.ts +27 -0
- package/dist/src/commands/feedback.d.ts.map +1 -0
- package/dist/src/commands/feedback.js +197 -0
- package/dist/src/commands/feedback.js.map +1 -0
- package/dist/src/commands/records.d.ts +42 -0
- package/dist/src/commands/records.d.ts.map +1 -0
- package/dist/src/commands/records.js +301 -0
- package/dist/src/commands/records.js.map +1 -0
- package/dist/src/commands/release.d.ts +39 -0
- package/dist/src/commands/release.d.ts.map +1 -0
- package/dist/src/commands/release.js +219 -0
- package/dist/src/commands/release.js.map +1 -0
- package/dist/src/commands/role.d.ts +24 -0
- package/dist/src/commands/role.d.ts.map +1 -0
- package/dist/src/commands/role.js +94 -0
- package/dist/src/commands/role.js.map +1 -0
- package/dist/src/commands/schedule.d.ts +18 -0
- package/dist/src/commands/schedule.d.ts.map +1 -0
- package/dist/src/commands/schedule.js +128 -0
- package/dist/src/commands/schedule.js.map +1 -0
- package/dist/src/commands/secrets.d.ts +15 -0
- package/dist/src/commands/secrets.d.ts.map +1 -0
- package/dist/src/commands/secrets.js +82 -0
- package/dist/src/commands/secrets.js.map +1 -0
- package/dist/src/commands/staging.d.ts +36 -0
- package/dist/src/commands/staging.d.ts.map +1 -0
- package/dist/src/commands/staging.js +98 -0
- package/dist/src/commands/staging.js.map +1 -0
- package/dist/src/commands/timeout.d.ts +16 -0
- package/dist/src/commands/timeout.d.ts.map +1 -0
- package/dist/src/commands/timeout.js +124 -0
- package/dist/src/commands/timeout.js.map +1 -0
- package/dist/src/commands/user-settings.d.ts +15 -0
- package/dist/src/commands/user-settings.d.ts.map +1 -0
- package/dist/src/commands/user-settings.js +74 -0
- package/dist/src/commands/user-settings.js.map +1 -0
- package/dist/src/commands/user.d.ts +26 -0
- package/dist/src/commands/user.d.ts.map +1 -0
- package/dist/src/commands/user.js +206 -0
- package/dist/src/commands/user.js.map +1 -0
- package/dist/src/commands/whoami.d.ts +6 -0
- package/dist/src/commands/whoami.d.ts.map +1 -0
- package/dist/src/commands/whoami.js +38 -0
- package/dist/src/commands/whoami.js.map +1 -0
- package/dist/src/credentials.d.ts +100 -0
- package/dist/src/credentials.d.ts.map +1 -0
- package/dist/src/credentials.js +164 -0
- package/dist/src/credentials.js.map +1 -0
- package/dist/src/utils.d.ts +38 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +73 -0
- package/dist/src/utils.js.map +1 -0
- package/package.json +32 -3
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* App commands — build, deploy, list, versions, remove.
|
|
7
|
+
*
|
|
8
|
+
* An app is pages and a menu built with `@elaraai/e3-cloud-ui`, deployed to
|
|
9
|
+
* a workspace as its own deployable. `build` makes a bundle of an app's
|
|
10
|
+
* source (the app, and the package it was built against); `deploy` takes
|
|
11
|
+
* bundles, or sources, imports their package into the repository when it is
|
|
12
|
+
* not there, uploads each app object and deploys them together, printing
|
|
13
|
+
* every problem when the deploy is refused; `list`, `versions` and `remove`
|
|
14
|
+
* read and remove what is deployed (a protected workspace, one with a
|
|
15
|
+
* staging, refuses a deploy and a removal unless an admin forces it with
|
|
16
|
+
* `--force`); `list-all` lists every app of the deployment, and which needs
|
|
17
|
+
* a bundle built with the platform's e3 (admin). An app is developed in the
|
|
18
|
+
* cloud: deployed to a workspace of one's own and opened there.
|
|
19
|
+
*/
|
|
20
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
21
|
+
import { dirname, resolve } from 'node:path';
|
|
22
|
+
import { decodeBeast2For, encodeBeast2For, none, some } from '@elaraai/east';
|
|
23
|
+
import { packageImport, packageList, workspaceList } from '@elaraai/e3-api-client';
|
|
24
|
+
import { ApiError, adminAppList, appDeploy, appDeployWait, appGet, appList, repositoryAppList, appDeployRefusedText, appRemove, appsDeploy, appUpload, appVersions, } from '@elaraai/e3-cloud-client';
|
|
25
|
+
import { AppBundleType, AppType } from '@elaraai/e3-cloud-ui/types';
|
|
26
|
+
import { getValidToken } from '../credentials.js';
|
|
27
|
+
import { buildAppFromSource } from '../app-source.js';
|
|
28
|
+
import { exitError, formatError, parseRepoUrl } from '../utils.js';
|
|
29
|
+
const decodeBundle = decodeBeast2For(AppBundleType);
|
|
30
|
+
const encodeBundle = encodeBeast2For(AppBundleType);
|
|
31
|
+
const encodeApp = encodeBeast2For(AppType);
|
|
32
|
+
/** An error, in words: an API error's code and the server's message. */
|
|
33
|
+
function describe(err) {
|
|
34
|
+
if (err instanceof ApiError)
|
|
35
|
+
return typeof err.details === 'string' ? `${err.code}: ${err.details}` : err.code;
|
|
36
|
+
return formatError(err);
|
|
37
|
+
}
|
|
38
|
+
/** A moment, as a terminal shows it. */
|
|
39
|
+
function when(at) {
|
|
40
|
+
return at.toISOString().replace('T', ' ').slice(0, 16);
|
|
41
|
+
}
|
|
42
|
+
/** A package, as people name it: `acme@1.5.0`. */
|
|
43
|
+
function packageWords(pkg) {
|
|
44
|
+
return `${pkg.name}@${pkg.version}`;
|
|
45
|
+
}
|
|
46
|
+
/** A bundle read from a file. */
|
|
47
|
+
function readBundle(file) {
|
|
48
|
+
let bytes;
|
|
49
|
+
try {
|
|
50
|
+
bytes = readFileSync(file);
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
exitError(`${file} cannot be read: ${formatError(err)}`);
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
return decodeBundle(bytes);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
exitError(`${file} is no app bundle (build one with e3-cloud app build): ${formatError(err)}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** What a deploy did, in words. */
|
|
63
|
+
function deployedWords(response, workspace, pkg) {
|
|
64
|
+
switch (response.type) {
|
|
65
|
+
case 'refused':
|
|
66
|
+
return '';
|
|
67
|
+
case 'checked': {
|
|
68
|
+
const apps = response.value.apps.join(', ');
|
|
69
|
+
const what = response.value.deploy.type === 'ui_only' ? `a deploy would change only ${response.value.apps.length === 1 ? 'the app' : 'the apps'}: ${workspace} runs ${pkg}`
|
|
70
|
+
: response.value.deploy.type === 'for_platform' ? `a deploy would stage ${response.value.apps.length === 1 ? 'it' : 'them'} for e3 ${response.value.deploy.value}`
|
|
71
|
+
: `a deploy would deploy ${pkg} first`;
|
|
72
|
+
return `${apps} ${response.value.apps.length === 1 ? 'fits' : 'fit'} ${workspace}: ${what}`;
|
|
73
|
+
}
|
|
74
|
+
case 'live':
|
|
75
|
+
return response.value.map((app) => `${app.name} v${app.current.number} is live on ${workspace} (UI only: ${workspace} runs ${pkg})`).join('\n');
|
|
76
|
+
case 'deploying':
|
|
77
|
+
return `Deploying ${pkg} to ${workspace}, keeping the inputs people set · ${response.value.apps.join(', ')} ${response.value.apps.length === 1 ? 'goes' : 'go'} live as the deploy completes (job ${response.value.job})`;
|
|
78
|
+
case 'staged':
|
|
79
|
+
return response.value.map((app) => `${app.name} is staged for e3 ${app.staged.type === 'some' ? app.staged.value.forPlatform : '?'} on ${workspace}: it goes live with the platform; v${app.current.number} stays live until then`).join('\n');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** An app's row in a listing. */
|
|
83
|
+
function appRow(app) {
|
|
84
|
+
const staged = app.staged.type === 'some' ? ` · staged for ${app.staged.value.forPlatform}` : '';
|
|
85
|
+
return [
|
|
86
|
+
app.workspace.padEnd(16),
|
|
87
|
+
app.name.padEnd(16),
|
|
88
|
+
`v${app.current.number}`.padEnd(6),
|
|
89
|
+
packageWords(app.current.package).padEnd(20),
|
|
90
|
+
`${app.current.builtWith}${staged}`.padEnd(28),
|
|
91
|
+
`${when(app.current.deployedAt)} by ${app.current.deployedBy}`,
|
|
92
|
+
].join(' ');
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* What `--force` warns before it goes past a workspace's protection: an
|
|
96
|
+
* admin's override, which the workspace's history records.
|
|
97
|
+
*/
|
|
98
|
+
const FORCE_WARNING = (workspace, what) => `Warning: --force sends this ${what} past ${workspace}'s protection, if it has a staging: it changes ${workspace} without a release, only an admin may, and its history records it as forced. Its next release from its staging undoes it.`;
|
|
99
|
+
export const appCommand = {
|
|
100
|
+
/** e3-cloud app build <source> [-o <file>] */
|
|
101
|
+
async build(source, options) {
|
|
102
|
+
try {
|
|
103
|
+
const bundle = await buildAppFromSource(source);
|
|
104
|
+
const output = resolve(options.output ?? `dist/${bundle.app.name}.app`);
|
|
105
|
+
mkdirSync(dirname(output), { recursive: true });
|
|
106
|
+
writeFileSync(output, encodeBundle(bundle));
|
|
107
|
+
console.log(`${bundle.app.name}: ${bundle.app.pages.length} pages, built against ${packageWords(bundle.app.package)} with e3 ${bundle.app.builtWith} → ${output}`);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
exitError(describe(err));
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
/** e3-cloud app deploy <repoUrl> <workspace> [bundles...] [--from-source <source...>] [--dry-run] [--for-platform <version>] [--force] */
|
|
114
|
+
async deploy(url, workspace, bundles, options) {
|
|
115
|
+
try {
|
|
116
|
+
const force = options.force === true;
|
|
117
|
+
if (force)
|
|
118
|
+
console.warn(FORCE_WARNING(workspace, 'deploy'));
|
|
119
|
+
const sources = options.fromSource ?? [];
|
|
120
|
+
if (bundles.length === 0 && sources.length === 0)
|
|
121
|
+
exitError('Give the bundles to deploy, or their sources with --from-source');
|
|
122
|
+
const { baseUrl, repo } = parseRepoUrl(url);
|
|
123
|
+
const token = await getValidToken(baseUrl);
|
|
124
|
+
const built = [...bundles.map(readBundle)];
|
|
125
|
+
for (const source of sources)
|
|
126
|
+
built.push(await buildAppFromSource(source));
|
|
127
|
+
const pkg = built[0].app.package;
|
|
128
|
+
const other = built.find((b) => b.app.package.hash !== pkg.hash);
|
|
129
|
+
if (other !== undefined) {
|
|
130
|
+
exitError(`Apps deployed together are built against one package: ${built[0].app.name} against ${packageWords(pkg)}, ${other.app.name} against ${packageWords(other.app.package)}`);
|
|
131
|
+
}
|
|
132
|
+
// The package, imported when the repository does not hold its version
|
|
133
|
+
const held = await packageList(baseUrl, repo, { token });
|
|
134
|
+
if (!held.some((p) => p.name === pkg.name && p.version === pkg.version)) {
|
|
135
|
+
console.log(`Importing ${packageWords(pkg)} into ${repo}…`);
|
|
136
|
+
await packageImport(baseUrl, repo, built[0].package, { token });
|
|
137
|
+
}
|
|
138
|
+
// Each app object, uploaded; then one deploy of them all
|
|
139
|
+
const items = [];
|
|
140
|
+
for (const bundle of built)
|
|
141
|
+
items.push({ name: bundle.app.name, source: await appUpload(baseUrl, repo, workspace, bundle.app.name, encodeApp(bundle.app), { token }) });
|
|
142
|
+
const forPlatform = options.forPlatform === undefined ? none : some(options.forPlatform);
|
|
143
|
+
const dryRun = options.dryRun === true;
|
|
144
|
+
const response = items.length === 1
|
|
145
|
+
? await appDeploy(baseUrl, repo, workspace, items[0].name, { source: items[0].source, forPlatform, dryRun, force }, { token })
|
|
146
|
+
: await appsDeploy(baseUrl, repo, workspace, { apps: items, forPlatform, dryRun, force }, { token });
|
|
147
|
+
// The apps refused: those deployed, and any other of the workspace the package would break
|
|
148
|
+
if (response.type === 'refused') {
|
|
149
|
+
console.error(appDeployRefusedText(response.value, packageWords(pkg)));
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
console.log(deployedWords(response, workspace, packageWords(pkg)));
|
|
153
|
+
// With its package: the deploy job, waited for, then the apps as it left them
|
|
154
|
+
if (response.type === 'deploying') {
|
|
155
|
+
let said = '';
|
|
156
|
+
const result = await appDeployWait(baseUrl, repo, workspace, response.value.job, { token }, {
|
|
157
|
+
// The token read afresh for each poll: a long deploy outlives it
|
|
158
|
+
refresh: async () => ({ token: await getValidToken(baseUrl) }),
|
|
159
|
+
onProgress: (progress) => {
|
|
160
|
+
const now = progress.type === 'pending' ? 'waiting for the workspace' : 'deploying';
|
|
161
|
+
if (now !== said)
|
|
162
|
+
console.log(` ${now}…`);
|
|
163
|
+
said = now;
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
const kept = result.inputs.filter((input) => input.action.type === 'keep').map((input) => input.input);
|
|
167
|
+
if (kept.length > 0)
|
|
168
|
+
console.log(` ${workspace} kept the ${kept.length === 1 ? 'input' : 'inputs'} people set: ${kept.join(', ')}`);
|
|
169
|
+
for (const name of response.value.apps) {
|
|
170
|
+
const app = await appGet(baseUrl, repo, workspace, name, { token });
|
|
171
|
+
console.log(`${name} v${app.current.number} is live on ${workspace}, which runs ${packageWords(app.current.package)}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
exitError(describe(err));
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
/** e3-cloud app list <repoUrl> [workspace] */
|
|
180
|
+
async list(url, workspace) {
|
|
181
|
+
try {
|
|
182
|
+
const { baseUrl, repo } = parseRepoUrl(url);
|
|
183
|
+
const token = await getValidToken(baseUrl);
|
|
184
|
+
// One request for every workspace's apps (an owner's or an admin's); a user
|
|
185
|
+
// granted apps lists each workspace's, which it may read
|
|
186
|
+
let apps;
|
|
187
|
+
if (workspace !== undefined)
|
|
188
|
+
apps = await appList(baseUrl, repo, workspace, { token });
|
|
189
|
+
else {
|
|
190
|
+
try {
|
|
191
|
+
apps = (await repositoryAppList(baseUrl, repo, { token })).apps;
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
if (!(err instanceof ApiError && err.code === 'forbidden'))
|
|
195
|
+
throw err;
|
|
196
|
+
apps = [];
|
|
197
|
+
for (const ws of (await workspaceList(baseUrl, repo, { token })).map((w) => w.name))
|
|
198
|
+
apps.push(...await appList(baseUrl, repo, ws, { token }));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (apps.length === 0) {
|
|
202
|
+
console.log(workspace === undefined ? `No apps in ${repo}.` : `No apps in ${workspace}.`);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
console.log(['WORKSPACE'.padEnd(16), 'APP'.padEnd(16), 'VER'.padEnd(6), 'PACKAGE'.padEnd(20), 'BUILT WITH'.padEnd(28), 'DEPLOYED'].join(' '));
|
|
206
|
+
for (const app of apps)
|
|
207
|
+
console.log(appRow(app));
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
exitError(describe(err));
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
/** e3-cloud app list-all <serverUrl> (admin) */
|
|
214
|
+
async listAll(serverUrl) {
|
|
215
|
+
try {
|
|
216
|
+
const token = await getValidToken(serverUrl);
|
|
217
|
+
const apps = [];
|
|
218
|
+
let platform = '';
|
|
219
|
+
let cursor;
|
|
220
|
+
do {
|
|
221
|
+
const page = await adminAppList(serverUrl, { token }, cursor === undefined ? {} : { cursor });
|
|
222
|
+
apps.push(...page.apps);
|
|
223
|
+
platform = page.platform;
|
|
224
|
+
cursor = page.next.type === 'some' ? page.next.value : undefined;
|
|
225
|
+
} while (cursor !== undefined);
|
|
226
|
+
if (apps.length === 0) {
|
|
227
|
+
console.log('No apps are deployed.');
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
console.log(['REPOSITORY'.padEnd(16), 'WORKSPACE'.padEnd(16), 'APP'.padEnd(16), 'VER'.padEnd(6), 'PACKAGE'.padEnd(20), 'BUILT WITH'.padEnd(28), 'DEPLOYED'].join(' '));
|
|
231
|
+
for (const app of apps)
|
|
232
|
+
console.log(`${app.repo.padEnd(16)} ${appRow(app)}`);
|
|
233
|
+
// Those a platform deploy to another e3 needs a bundle for, and those it has
|
|
234
|
+
const rebuild = apps.filter((app) => app.current.builtWith !== platform
|
|
235
|
+
&& !(app.staged.type === 'some' && app.staged.value.forPlatform === platform));
|
|
236
|
+
console.log(`\nThe platform runs e3 ${platform}: ${rebuild.length === 0 ? 'every app is built with it, or has a bundle staged for it' : `${rebuild.length} ${rebuild.length === 1 ? 'app needs' : 'apps need'} a bundle built with it`}.`);
|
|
237
|
+
}
|
|
238
|
+
catch (err) {
|
|
239
|
+
exitError(describe(err));
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
/** e3-cloud app versions <repoUrl> <workspace> <app> */
|
|
243
|
+
async versions(url, workspace, name) {
|
|
244
|
+
try {
|
|
245
|
+
const { baseUrl, repo } = parseRepoUrl(url);
|
|
246
|
+
const token = await getValidToken(baseUrl);
|
|
247
|
+
console.log(['VER'.padEnd(6), 'OBJECT'.padEnd(14), 'PACKAGE'.padEnd(20), 'BUILT WITH'.padEnd(12), 'DEPLOYED'].join(' '));
|
|
248
|
+
let cursor;
|
|
249
|
+
do {
|
|
250
|
+
const page = await appVersions(baseUrl, repo, workspace, name, { token }, cursor === undefined ? {} : { cursor });
|
|
251
|
+
for (const version of page.versions) {
|
|
252
|
+
console.log([
|
|
253
|
+
`v${version.number}`.padEnd(6),
|
|
254
|
+
version.version.slice(0, 12).padEnd(14),
|
|
255
|
+
packageWords(version.package).padEnd(20),
|
|
256
|
+
version.builtWith.padEnd(12),
|
|
257
|
+
`${when(version.deployedAt)} by ${version.deployedBy}`,
|
|
258
|
+
].join(' '));
|
|
259
|
+
}
|
|
260
|
+
cursor = page.next.type === 'some' ? page.next.value : undefined;
|
|
261
|
+
} while (cursor !== undefined);
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
exitError(describe(err));
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
/** e3-cloud app remove <repoUrl> <workspace> <app> */
|
|
268
|
+
async remove(url, workspace, name, options = {}) {
|
|
269
|
+
try {
|
|
270
|
+
const force = options.force === true;
|
|
271
|
+
if (force)
|
|
272
|
+
console.warn(FORCE_WARNING(workspace, 'removal'));
|
|
273
|
+
const { baseUrl, repo } = parseRepoUrl(url);
|
|
274
|
+
const token = await getValidToken(baseUrl);
|
|
275
|
+
const removed = await appRemove(baseUrl, repo, workspace, name, { token }, { force });
|
|
276
|
+
console.log(`${removed.name} removed from ${workspace}.`);
|
|
277
|
+
if (removed.users.length > 0) {
|
|
278
|
+
console.log(`${removed.users.length} ${removed.users.length === 1 ? 'user\'s role names' : 'users\' roles name'} it, left for an admin to change: ${removed.users.join(', ')}`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
catch (err) {
|
|
282
|
+
exitError(describe(err));
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
};
|
|
286
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/commands/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
export declare const computeCommand: {
|
|
6
|
+
set(url: string, taskNameOrPattern: string, options: {
|
|
7
|
+
size: string;
|
|
8
|
+
regex?: boolean;
|
|
9
|
+
}): Promise<void>;
|
|
10
|
+
get(url: string, taskName: string): Promise<void>;
|
|
11
|
+
list(url: string): Promise<void>;
|
|
12
|
+
remove(url: string, taskNameOrPattern: string, options: {
|
|
13
|
+
regex?: boolean;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=compute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../../../src/commands/compute.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA4BH,eAAO,MAAM,cAAc;aAElB,MAAM,qBACQ,MAAM,WAChB;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GACzC,OAAO,CAAC,IAAI,CAAC;aA4BD,MAAM,YAAY,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAYvC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;gBAuB/B,MAAM,qBACQ,MAAM,WAChB;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3B,OAAO,CAAC,IAAI,CAAC;CA0BjB,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Compute size management commands — set, get, list, remove.
|
|
7
|
+
*/
|
|
8
|
+
import { variant } from '@elaraai/east';
|
|
9
|
+
import { listCompute, getCompute, setCompute, setComputeBatch, removeCompute, } from '@elaraai/e3-cloud-client';
|
|
10
|
+
import { taskList } from '@elaraai/e3-api-client';
|
|
11
|
+
import { getValidToken } from '../credentials.js';
|
|
12
|
+
import { parseWorkspaceUrl, formatError, exitError, confirm } from '../utils.js';
|
|
13
|
+
const VALID_SIZES = ['serverless', 'small', 'medium', 'large', 'xlarge'];
|
|
14
|
+
function parseComputeSize(s) {
|
|
15
|
+
if (!VALID_SIZES.includes(s)) {
|
|
16
|
+
exitError(`Invalid compute size: ${s}. Must be one of: ${VALID_SIZES.join(', ')}`);
|
|
17
|
+
}
|
|
18
|
+
return variant(s, null);
|
|
19
|
+
}
|
|
20
|
+
export const computeCommand = {
|
|
21
|
+
async set(url, taskNameOrPattern, options) {
|
|
22
|
+
try {
|
|
23
|
+
const { baseUrl, repo, workspace } = parseWorkspaceUrl(url);
|
|
24
|
+
const token = await getValidToken(baseUrl);
|
|
25
|
+
const size = parseComputeSize(options.size);
|
|
26
|
+
if (options.regex) {
|
|
27
|
+
const tasks = await taskList(baseUrl, repo, workspace, { token });
|
|
28
|
+
const regex = new RegExp(taskNameOrPattern);
|
|
29
|
+
const matched = tasks.filter(t => regex.test(t.name)).map(t => t.name);
|
|
30
|
+
if (matched.length === 0) {
|
|
31
|
+
exitError(`No tasks matched pattern: ${taskNameOrPattern}`);
|
|
32
|
+
}
|
|
33
|
+
console.log(`Matched ${matched.length} tasks: ${matched.join(', ')}`);
|
|
34
|
+
if (!await confirm(`Set compute size '${options.size}' for ${matched.length} tasks?`))
|
|
35
|
+
return;
|
|
36
|
+
const configs = new Map();
|
|
37
|
+
for (const name of matched)
|
|
38
|
+
configs.set(name, size);
|
|
39
|
+
await setComputeBatch(baseUrl, repo, workspace, configs, { token });
|
|
40
|
+
console.log(`Compute size '${options.size}' set for ${matched.length} tasks`);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
await setCompute(baseUrl, repo, workspace, taskNameOrPattern, size, { token });
|
|
44
|
+
console.log(`Compute size '${options.size}' set for task '${taskNameOrPattern}'`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
exitError(formatError(err));
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
async get(url, taskName) {
|
|
52
|
+
try {
|
|
53
|
+
const { baseUrl, repo, workspace } = parseWorkspaceUrl(url);
|
|
54
|
+
const token = await getValidToken(baseUrl);
|
|
55
|
+
const size = await getCompute(baseUrl, repo, workspace, taskName, { token });
|
|
56
|
+
console.log(`Compute size for '${taskName}': ${size.type}`);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
exitError(formatError(err));
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
async list(url) {
|
|
63
|
+
try {
|
|
64
|
+
const { baseUrl, repo, workspace } = parseWorkspaceUrl(url);
|
|
65
|
+
const token = await getValidToken(baseUrl);
|
|
66
|
+
const configs = await listCompute(baseUrl, repo, workspace, { token });
|
|
67
|
+
const entries = [...configs.entries()];
|
|
68
|
+
if (entries.length === 0) {
|
|
69
|
+
console.log(`No compute configs for ${repo}/${workspace} (all tasks use serverless)`);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
console.log(`Compute configs for ${repo}/${workspace}:`);
|
|
73
|
+
for (const [taskName, size] of entries) {
|
|
74
|
+
console.log(` ${taskName.padEnd(32)} ${size.type}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
exitError(formatError(err));
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
async remove(url, taskNameOrPattern, options) {
|
|
82
|
+
try {
|
|
83
|
+
const { baseUrl, repo, workspace } = parseWorkspaceUrl(url);
|
|
84
|
+
const token = await getValidToken(baseUrl);
|
|
85
|
+
if (options.regex) {
|
|
86
|
+
const tasks = await taskList(baseUrl, repo, workspace, { token });
|
|
87
|
+
const regex = new RegExp(taskNameOrPattern);
|
|
88
|
+
const matched = tasks.filter(t => regex.test(t.name)).map(t => t.name);
|
|
89
|
+
if (matched.length === 0) {
|
|
90
|
+
exitError(`No tasks matched pattern: ${taskNameOrPattern}`);
|
|
91
|
+
}
|
|
92
|
+
console.log(`Matched ${matched.length} tasks: ${matched.join(', ')}`);
|
|
93
|
+
if (!await confirm(`Remove compute config for ${matched.length} tasks?`))
|
|
94
|
+
return;
|
|
95
|
+
// One request for them all: a batch setting a task serverless removes
|
|
96
|
+
// its config
|
|
97
|
+
await setComputeBatch(baseUrl, repo, workspace, new Map(matched.map((name) => [name, variant('serverless', null)])), { token });
|
|
98
|
+
console.log(`Compute config removed for ${matched.length} tasks`);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
await removeCompute(baseUrl, repo, workspace, taskNameOrPattern, { token });
|
|
102
|
+
console.log(`Compute config removed for task '${taskNameOrPattern}'`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
exitError(formatError(err));
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=compute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute.js","sourceRoot":"","sources":["../../../src/commands/compute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
export declare const feedbackCommand: {
|
|
6
|
+
/** e3-cloud feedback list <workspaceUrl> [--status] [--limit] [--cursor] [--mine] */
|
|
7
|
+
list(url: string, options: {
|
|
8
|
+
status?: string;
|
|
9
|
+
limit?: string;
|
|
10
|
+
cursor?: string;
|
|
11
|
+
mine?: boolean;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
/** e3-cloud feedback show <workspaceUrl> <number> [--status] [--screenshot <file>] */
|
|
14
|
+
show(url: string, number: string, options: {
|
|
15
|
+
status?: string;
|
|
16
|
+
screenshot?: string;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
/** e3-cloud feedback close <workspaceUrl> <number> */
|
|
19
|
+
close(url: string, number: string): Promise<void>;
|
|
20
|
+
/** e3-cloud feedback reopen <workspaceUrl> <number> */
|
|
21
|
+
reopen(url: string, number: string): Promise<void>;
|
|
22
|
+
/** e3-cloud feedback enable <workspaceUrl> */
|
|
23
|
+
enable(url: string): Promise<void>;
|
|
24
|
+
/** e3-cloud feedback disable <workspaceUrl> */
|
|
25
|
+
disable(url: string): Promise<void>;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=feedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../../src/commands/feedback.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0EH,eAAO,MAAM,eAAe;IAC1B,qFAAqF;cACrE,MAAM,WAAW;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCrH,sFAAsF;cACtE,MAAM,UAAU,MAAM,WAAW;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCzG,sDAAsD;eACrC,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvD,uDAAuD;gBACrC,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxD,8CAA8C;gBAC5B,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxC,+CAA+C;iBAC5B,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAU1C,CAAC"}
|