@layr-labs/ecloud-cli 0.2.0-dev → 0.2.0-dev.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/VERSION +2 -2
- package/dist/commands/auth/generate.js +4 -4
- package/dist/commands/auth/generate.js.map +1 -1
- package/dist/commands/auth/login.js +2 -2
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/auth/logout.js +2 -2
- package/dist/commands/auth/logout.js.map +1 -1
- package/dist/commands/auth/migrate.js +2 -2
- package/dist/commands/auth/migrate.js.map +1 -1
- package/dist/commands/auth/whoami.js +7 -5
- package/dist/commands/auth/whoami.js.map +1 -1
- package/dist/commands/billing/cancel.js +9 -7
- package/dist/commands/billing/cancel.js.map +1 -1
- package/dist/commands/billing/status.js +8 -5
- package/dist/commands/billing/status.js.map +1 -1
- package/dist/commands/billing/subscribe.js +14 -10
- package/dist/commands/billing/subscribe.js.map +1 -1
- package/dist/commands/compute/app/create.js +2 -2
- package/dist/commands/compute/app/create.js.map +1 -1
- package/dist/commands/compute/app/deploy.js +105 -105
- package/dist/commands/compute/app/deploy.js.map +1 -1
- package/dist/commands/compute/app/info.js +55 -8
- package/dist/commands/compute/app/info.js.map +1 -1
- package/dist/commands/compute/app/list.js +8 -9
- package/dist/commands/compute/app/list.js.map +1 -1
- package/dist/commands/compute/app/logs.js +58 -11
- package/dist/commands/compute/app/logs.js.map +1 -1
- package/dist/commands/compute/app/profile/set.js +147 -22
- package/dist/commands/compute/app/profile/set.js.map +1 -1
- package/dist/commands/compute/app/releases.js +110 -143
- package/dist/commands/compute/app/releases.js.map +1 -1
- package/dist/commands/compute/app/start.js +58 -11
- package/dist/commands/compute/app/start.js.map +1 -1
- package/dist/commands/compute/app/stop.js +58 -11
- package/dist/commands/compute/app/stop.js.map +1 -1
- package/dist/commands/compute/app/terminate.js +58 -11
- package/dist/commands/compute/app/terminate.js.map +1 -1
- package/dist/commands/compute/app/upgrade.js +121 -67
- package/dist/commands/compute/app/upgrade.js.map +1 -1
- package/dist/commands/compute/build/info.js +8 -9
- package/dist/commands/compute/build/info.js.map +1 -1
- package/dist/commands/compute/build/list.js +50 -131
- package/dist/commands/compute/build/list.js.map +1 -1
- package/dist/commands/compute/build/logs.js +9 -10
- package/dist/commands/compute/build/logs.js.map +1 -1
- package/dist/commands/compute/build/status.js +9 -10
- package/dist/commands/compute/build/status.js.map +1 -1
- package/dist/commands/compute/build/submit.js +8 -9
- package/dist/commands/compute/build/submit.js.map +1 -1
- package/dist/commands/compute/build/verify.js +59 -12
- package/dist/commands/compute/build/verify.js.map +1 -1
- package/dist/commands/compute/environment/list.js +2 -2
- package/dist/commands/compute/environment/list.js.map +1 -1
- package/dist/commands/compute/environment/set.js +2 -2
- package/dist/commands/compute/environment/set.js.map +1 -1
- package/dist/commands/compute/environment/show.js +2 -2
- package/dist/commands/compute/environment/show.js.map +1 -1
- package/dist/commands/compute/undelegate.js +8 -9
- package/dist/commands/compute/undelegate.js.map +1 -1
- package/dist/commands/{telemetry.js → telemetry/disable.js} +15 -64
- package/dist/commands/telemetry/disable.js.map +1 -0
- package/dist/commands/telemetry/enable.js +164 -0
- package/dist/commands/telemetry/enable.js.map +1 -0
- package/dist/commands/telemetry/status.js +159 -0
- package/dist/commands/telemetry/status.js.map +1 -0
- package/dist/commands/upgrade.js +2 -2
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/commands/version.js +2 -2
- package/dist/commands/version.js.map +1 -1
- package/package.json +4 -2
- package/dist/commands/telemetry.js.map +0 -1
|
@@ -6,6 +6,7 @@ import chalk from "chalk";
|
|
|
6
6
|
|
|
7
7
|
// src/flags.ts
|
|
8
8
|
import { Flags } from "@oclif/core";
|
|
9
|
+
import { getBuildType as getBuildType2 } from "@layr-labs/ecloud-sdk";
|
|
9
10
|
|
|
10
11
|
// src/utils/prompts.ts
|
|
11
12
|
import { input, select, password, confirm as inquirerConfirm } from "@inquirer/prompts";
|
|
@@ -124,13 +125,50 @@ var APPS_DIR = path2.join(CONFIG_DIR, "apps");
|
|
|
124
125
|
|
|
125
126
|
// src/utils/version.ts
|
|
126
127
|
function getCliVersion() {
|
|
127
|
-
return true ? "0.2.0-dev" : "0.0.0";
|
|
128
|
+
return true ? "0.2.0-dev.1" : "0.0.0";
|
|
128
129
|
}
|
|
129
130
|
function getClientId() {
|
|
130
131
|
return `ecloud-cli/v${getCliVersion()}`;
|
|
131
132
|
}
|
|
132
133
|
|
|
133
134
|
// src/utils/prompts.ts
|
|
135
|
+
function formatBuildChoice(build) {
|
|
136
|
+
const repoUrl = String(build.repoUrl || "").replace(/\.git$/i, "").replace(/\/+$/, "");
|
|
137
|
+
const repoName = (() => {
|
|
138
|
+
try {
|
|
139
|
+
const url = new URL(repoUrl);
|
|
140
|
+
const parts = url.pathname.split("/").filter(Boolean);
|
|
141
|
+
return parts.length ? parts[parts.length - 1] : repoUrl;
|
|
142
|
+
} catch {
|
|
143
|
+
const m = repoUrl.match(/[:/]+([^/:]+)$/);
|
|
144
|
+
return m?.[1] || repoUrl || "unknown";
|
|
145
|
+
}
|
|
146
|
+
})();
|
|
147
|
+
const shortSha = build.gitRef ? String(build.gitRef).slice(0, 10) : "unknown";
|
|
148
|
+
const shortId = build.buildId ? String(build.buildId).slice(0, 8) : "unknown";
|
|
149
|
+
const created = build.createdAt ? new Date(build.createdAt).toLocaleString() : "";
|
|
150
|
+
const status = String(build.status || "unknown");
|
|
151
|
+
return `${status} ${repoName}@${shortSha} ${shortId} ${created}`;
|
|
152
|
+
}
|
|
153
|
+
async function promptBuildIdFromRecentBuilds(options) {
|
|
154
|
+
const limit = Math.max(1, Math.min(100, options.limit ?? 20));
|
|
155
|
+
const builds = await options.client.list({
|
|
156
|
+
billingAddress: options.billingAddress,
|
|
157
|
+
limit,
|
|
158
|
+
offset: 0
|
|
159
|
+
});
|
|
160
|
+
if (!builds || builds.length === 0) {
|
|
161
|
+
throw new Error(`No builds found for billing address ${options.billingAddress}`);
|
|
162
|
+
}
|
|
163
|
+
const choice = await select({
|
|
164
|
+
message: "Select a build:",
|
|
165
|
+
choices: builds.map((b) => ({
|
|
166
|
+
name: formatBuildChoice(b),
|
|
167
|
+
value: b.buildId
|
|
168
|
+
}))
|
|
169
|
+
});
|
|
170
|
+
return choice;
|
|
171
|
+
}
|
|
134
172
|
async function getPrivateKeyInteractive(privateKey) {
|
|
135
173
|
if (privateKey) {
|
|
136
174
|
if (!validatePrivateKeyFormat(privateKey)) {
|
|
@@ -209,7 +247,8 @@ var commonFlags = {
|
|
|
209
247
|
environment: Flags.string({
|
|
210
248
|
required: false,
|
|
211
249
|
description: "Deployment environment to use",
|
|
212
|
-
env: "ECLOUD_ENV"
|
|
250
|
+
env: "ECLOUD_ENV",
|
|
251
|
+
default: async () => getDefaultEnvironment() || (getBuildType2() === "dev" ? "sepolia-dev" : "sepolia")
|
|
213
252
|
}),
|
|
214
253
|
"private-key": Flags.string({
|
|
215
254
|
required: false,
|
|
@@ -228,9 +267,6 @@ var commonFlags = {
|
|
|
228
267
|
})
|
|
229
268
|
};
|
|
230
269
|
async function validateCommonFlags(flags, options) {
|
|
231
|
-
if (!flags["environment"]) {
|
|
232
|
-
flags["environment"] = getDefaultEnvironment();
|
|
233
|
-
}
|
|
234
270
|
flags["environment"] = await getEnvironmentInteractive(flags["environment"]);
|
|
235
271
|
if (options?.requirePrivateKey !== false) {
|
|
236
272
|
flags["private-key"] = await getPrivateKeyInteractive(flags["private-key"]);
|
|
@@ -267,15 +303,15 @@ import {
|
|
|
267
303
|
addMetric,
|
|
268
304
|
addMetricWithDimensions,
|
|
269
305
|
emitMetrics,
|
|
270
|
-
getBuildType as
|
|
306
|
+
getBuildType as getBuildType3
|
|
271
307
|
} from "@layr-labs/ecloud-sdk";
|
|
272
308
|
function createCLITelemetryClient() {
|
|
273
309
|
const userUUID = getOrCreateUserUUID();
|
|
274
310
|
const environment = createAppEnvironment(userUUID);
|
|
275
311
|
const telemetryEnabled = getGlobalTelemetryPreference();
|
|
276
312
|
return createTelemetryClient(environment, "ecloud-cli", {
|
|
277
|
-
telemetryEnabled: telemetryEnabled
|
|
278
|
-
//
|
|
313
|
+
telemetryEnabled: telemetryEnabled !== false
|
|
314
|
+
// Enabled by default, disabled only if explicitly set to false
|
|
279
315
|
});
|
|
280
316
|
}
|
|
281
317
|
async function withTelemetry(command, action) {
|
|
@@ -285,7 +321,7 @@ async function withTelemetry(command, action) {
|
|
|
285
321
|
metrics.properties["command"] = command.id || command.constructor.name;
|
|
286
322
|
const environment = getDefaultEnvironment() || "sepolia";
|
|
287
323
|
metrics.properties["environment"] = environment;
|
|
288
|
-
const buildType =
|
|
324
|
+
const buildType = getBuildType3() || "prod";
|
|
289
325
|
metrics.properties["build_type"] = buildType;
|
|
290
326
|
const cliVersion = command.config.version;
|
|
291
327
|
if (cliVersion) {
|
|
@@ -335,6 +371,8 @@ function formatSourceLink(repoUrl, gitRef) {
|
|
|
335
371
|
}
|
|
336
372
|
|
|
337
373
|
// src/commands/compute/build/verify.ts
|
|
374
|
+
import { privateKeyToAccount as privateKeyToAccount3 } from "viem/accounts";
|
|
375
|
+
import { addHexPrefix } from "@layr-labs/ecloud-sdk";
|
|
338
376
|
var BuildVerify = class _BuildVerify extends Command {
|
|
339
377
|
static description = "Verify provenance for a build or image";
|
|
340
378
|
static examples = [
|
|
@@ -344,7 +382,7 @@ var BuildVerify = class _BuildVerify extends Command {
|
|
|
344
382
|
static args = {
|
|
345
383
|
identifier: Args.string({
|
|
346
384
|
description: "Build ID, image digest (sha256:...), or git commit SHA",
|
|
347
|
-
required:
|
|
385
|
+
required: false
|
|
348
386
|
})
|
|
349
387
|
};
|
|
350
388
|
static flags = {
|
|
@@ -357,11 +395,20 @@ var BuildVerify = class _BuildVerify extends Command {
|
|
|
357
395
|
async run() {
|
|
358
396
|
return withTelemetry(this, async () => {
|
|
359
397
|
const { args, flags } = await this.parse(_BuildVerify);
|
|
360
|
-
const validatedFlags = await validateCommonFlags(flags, {
|
|
398
|
+
const validatedFlags = await validateCommonFlags(flags, {
|
|
399
|
+
requirePrivateKey: !args.identifier
|
|
400
|
+
});
|
|
361
401
|
const client = await createBuildClient(validatedFlags);
|
|
362
402
|
this.log(chalk.gray("Fetching provenance..."));
|
|
363
403
|
try {
|
|
364
|
-
|
|
404
|
+
let identifier = args.identifier;
|
|
405
|
+
if (!identifier) {
|
|
406
|
+
const billingAddress = privateKeyToAccount3(
|
|
407
|
+
addHexPrefix(validatedFlags["private-key"])
|
|
408
|
+
).address;
|
|
409
|
+
identifier = await promptBuildIdFromRecentBuilds({ client, billingAddress, limit: 20 });
|
|
410
|
+
}
|
|
411
|
+
const result = await client.verify(identifier);
|
|
365
412
|
if (flags.json) {
|
|
366
413
|
this.log(JSON.stringify(result, null, 2));
|
|
367
414
|
return;
|