percher 0.4.0 → 0.4.2
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/bin/percher.js +111678 -18547
- package/dist/package.json +13 -4
- package/dist/src/cli-utils.d.ts +11 -0
- package/dist/src/cli-utils.d.ts.map +1 -1
- package/dist/src/cli-utils.js +34 -0
- package/dist/src/cli-utils.js.map +1 -1
- package/dist/src/commands/account.d.ts.map +1 -1
- package/dist/src/commands/account.js +63 -7
- package/dist/src/commands/account.js.map +1 -1
- package/dist/src/commands/admin.d.ts +17 -0
- package/dist/src/commands/admin.d.ts.map +1 -0
- package/dist/src/commands/admin.js +92 -0
- package/dist/src/commands/admin.js.map +1 -0
- package/dist/src/commands/apps.d.ts.map +1 -1
- package/dist/src/commands/apps.js +66 -8
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/deploys.d.ts.map +1 -1
- package/dist/src/commands/deploys.js +12 -2
- package/dist/src/commands/deploys.js.map +1 -1
- package/dist/src/commands/export.d.ts +4 -0
- package/dist/src/commands/export.d.ts.map +1 -0
- package/dist/src/commands/export.js +18 -0
- package/dist/src/commands/export.js.map +1 -0
- package/dist/src/commands/migrate.d.ts +4 -0
- package/dist/src/commands/migrate.d.ts.map +1 -0
- package/dist/src/commands/migrate.js +142 -0
- package/dist/src/commands/migrate.js.map +1 -0
- package/dist/src/commands/sharing.d.ts +23 -0
- package/dist/src/commands/sharing.d.ts.map +1 -0
- package/dist/src/commands/sharing.js +162 -0
- package/dist/src/commands/sharing.js.map +1 -0
- package/dist/src/commands/transfers.d.ts +20 -0
- package/dist/src/commands/transfers.d.ts.map +1 -0
- package/dist/src/commands/transfers.js +117 -0
- package/dist/src/commands/transfers.js.map +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +44 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/output.d.ts.map +1 -1
- package/dist/src/output.js +18 -1
- package/dist/src/output.js.map +1 -1
- package/dist/templates/astro/Caddyfile +6 -0
- package/dist/templates/astro/Dockerfile +34 -0
- package/dist/templates/astro/astro.config.mjs +3 -0
- package/dist/templates/astro/package.json +14 -0
- package/dist/templates/astro/percher.toml +11 -0
- package/dist/templates/astro/src/pages/index.astro +15 -0
- package/dist/templates/bun/index.ts +23 -0
- package/dist/templates/bun/package.json +8 -0
- package/dist/templates/bun/percher.toml +10 -0
- package/dist/templates/django/Procfile +1 -0
- package/dist/templates/django/app/__init__.py +0 -0
- package/dist/templates/django/app/settings.py +44 -0
- package/dist/templates/django/app/urls.py +21 -0
- package/dist/templates/django/app/wsgi.py +5 -0
- package/dist/templates/django/manage.py +19 -0
- package/dist/templates/django/percher.toml +11 -0
- package/dist/templates/django/requirements.txt +2 -0
- package/dist/templates/dotnet/Dockerfile +18 -0
- package/dist/templates/dotnet/Program.cs +23 -0
- package/dist/templates/dotnet/app.csproj +9 -0
- package/dist/templates/dotnet/percher.toml +11 -0
- package/dist/templates/eleventy/.eleventy.js +12 -0
- package/dist/templates/eleventy/Caddyfile +6 -0
- package/dist/templates/eleventy/Dockerfile +34 -0
- package/dist/templates/eleventy/package.json +12 -0
- package/dist/templates/eleventy/percher.toml +11 -0
- package/dist/templates/eleventy/src/_includes/base.njk +12 -0
- package/dist/templates/eleventy/src/assets/style.css +12 -0
- package/dist/templates/eleventy/src/index.md +10 -0
- package/dist/templates/elysia/index.ts +8 -0
- package/dist/templates/elysia/package.json +12 -0
- package/dist/templates/elysia/percher.toml +11 -0
- package/dist/templates/express/index.ts +16 -0
- package/dist/templates/express/package.json +11 -0
- package/dist/templates/express/percher.toml +11 -0
- package/dist/templates/fastify/index.ts +13 -0
- package/dist/templates/fastify/package.json +11 -0
- package/dist/templates/fastify/percher.toml +11 -0
- package/dist/templates/flask/main.py +23 -0
- package/dist/templates/flask/percher.toml +11 -0
- package/dist/templates/flask/requirements.txt +1 -0
- package/dist/templates/go/Dockerfile +11 -0
- package/dist/templates/go/go.mod +3 -0
- package/dist/templates/go/main.go +53 -0
- package/dist/templates/go/percher.toml +11 -0
- package/dist/templates/hono/index.ts +12 -0
- package/dist/templates/hono/package.json +11 -0
- package/dist/templates/hono/percher.toml +11 -0
- package/dist/templates/htmx/index.ts +32 -0
- package/dist/templates/htmx/package.json +15 -0
- package/dist/templates/htmx/percher.toml +11 -0
- package/dist/templates/hugo/Caddyfile +6 -0
- package/dist/templates/hugo/Dockerfile +32 -0
- package/dist/templates/hugo/content/_index.md +7 -0
- package/dist/templates/hugo/hugo.toml +11 -0
- package/dist/templates/hugo/layouts/index.html +22 -0
- package/dist/templates/hugo/percher.toml +11 -0
- package/dist/templates/java/Dockerfile +15 -0
- package/dist/templates/java/Main.java +77 -0
- package/dist/templates/java/percher.toml +11 -0
- package/dist/templates/laravel/Dockerfile +15 -0
- package/dist/templates/laravel/composer.json +15 -0
- package/dist/templates/laravel/percher.toml +11 -0
- package/dist/templates/laravel/public/index.php +37 -0
- package/dist/templates/nextjs/app/api/health/route.ts +3 -0
- package/dist/templates/nextjs/app/layout.tsx +11 -0
- package/dist/templates/nextjs/app/page.tsx +10 -0
- package/dist/templates/nextjs/next.config.ts +5 -0
- package/dist/templates/nextjs/package.json +15 -0
- package/dist/templates/nextjs/percher.toml +15 -0
- package/dist/templates/node/index.js +26 -0
- package/dist/templates/node/index.ts +12 -0
- package/dist/templates/node/package.json +8 -0
- package/dist/templates/node/percher.toml +10 -0
- package/dist/templates/nuxt/app.vue +6 -0
- package/dist/templates/nuxt/nuxt.config.ts +4 -0
- package/dist/templates/nuxt/package.json +15 -0
- package/dist/templates/nuxt/percher.toml +15 -0
- package/dist/templates/nuxt/server/api/health.ts +1 -0
- package/dist/templates/phoenix/Dockerfile +15 -0
- package/dist/templates/phoenix/lib/application.ex +15 -0
- package/dist/templates/phoenix/lib/router.ex +39 -0
- package/dist/templates/phoenix/mix.exs +30 -0
- package/dist/templates/phoenix/percher.toml +11 -0
- package/dist/templates/preact/Caddyfile +7 -0
- package/dist/templates/preact/Dockerfile +34 -0
- package/dist/templates/preact/index.html +12 -0
- package/dist/templates/preact/package.json +19 -0
- package/dist/templates/preact/percher.toml +11 -0
- package/dist/templates/preact/src/main.tsx +13 -0
- package/dist/templates/preact/vite.config.ts +6 -0
- package/dist/templates/python/main.py +13 -0
- package/dist/templates/python/percher.toml +11 -0
- package/dist/templates/python/requirements.txt +2 -0
- package/dist/templates/rails/Dockerfile +11 -0
- package/dist/templates/rails/Gemfile +12 -0
- package/dist/templates/rails/config.ru +32 -0
- package/dist/templates/rails/percher.toml +11 -0
- package/dist/templates/remix/app/root.tsx +19 -0
- package/dist/templates/remix/app/routes/_index.tsx +10 -0
- package/dist/templates/remix/app/routes/health.tsx +3 -0
- package/dist/templates/remix/package.json +30 -0
- package/dist/templates/remix/percher.toml +15 -0
- package/dist/templates/remix/vite.config.ts +7 -0
- package/dist/templates/rust/Cargo.toml +19 -0
- package/dist/templates/rust/Dockerfile +14 -0
- package/dist/templates/rust/percher.toml +11 -0
- package/dist/templates/rust/src/main.rs +45 -0
- package/dist/templates/solid/Caddyfile +7 -0
- package/dist/templates/solid/Dockerfile +34 -0
- package/dist/templates/solid/index.html +12 -0
- package/dist/templates/solid/package.json +19 -0
- package/dist/templates/solid/percher.toml +11 -0
- package/dist/templates/solid/src/main.tsx +13 -0
- package/dist/templates/solid/vite.config.ts +6 -0
- package/dist/templates/static/index.html +15 -0
- package/dist/templates/static/percher.toml +6 -0
- package/dist/templates/static/style.css +32 -0
- package/dist/templates/sveltekit/package.json +19 -0
- package/dist/templates/sveltekit/percher.toml +15 -0
- package/dist/templates/sveltekit/src/app.html +12 -0
- package/dist/templates/sveltekit/src/routes/+page.svelte +2 -0
- package/dist/templates/sveltekit/src/routes/health/+server.ts +5 -0
- package/dist/templates/sveltekit/svelte.config.js +8 -0
- package/dist/templates/sveltekit/vite.config.js +6 -0
- package/dist/templates/vite-react/Caddyfile +7 -0
- package/dist/templates/vite-react/Dockerfile +34 -0
- package/dist/templates/vite-react/index.html +12 -0
- package/dist/templates/vite-react/package.json +22 -0
- package/dist/templates/vite-react/percher.toml +11 -0
- package/dist/templates/vite-react/src/main.tsx +20 -0
- package/dist/templates/vite-react/vite.config.ts +6 -0
- package/dist/templates/vite-vue/Caddyfile +7 -0
- package/dist/templates/vite-vue/Dockerfile +34 -0
- package/dist/templates/vite-vue/index.html +12 -0
- package/dist/templates/vite-vue/package.json +19 -0
- package/dist/templates/vite-vue/percher.toml +11 -0
- package/dist/templates/vite-vue/src/main.ts +12 -0
- package/dist/templates/vite-vue/vite.config.ts +6 -0
- package/package.json +13 -4
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "percher",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"description": "CLI for the Percher hosting platform — publish apps with one command",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -15,9 +15,11 @@
|
|
|
15
15
|
"default": "./dist/src/index.js"
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
|
-
"files": [
|
|
18
|
+
"files": [
|
|
19
|
+
"dist"
|
|
20
|
+
],
|
|
19
21
|
"scripts": {
|
|
20
|
-
"build": "tsc -p tsconfig.json && bun build bin/percher.ts --outfile dist/bin/percher.js --target node --format esm && node -e \"require('fs').chmodSync('dist/bin/percher.js',0o755)\"",
|
|
22
|
+
"build": "tsc -p tsconfig.json && bun build bin/percher.ts --outfile dist/bin/percher.js --target node --format esm && node scripts/copy-templates.mjs && node -e \"require('fs').chmodSync('dist/bin/percher.js',0o755)\"",
|
|
21
23
|
"test": "bun test",
|
|
22
24
|
"typecheck": "tsc --noEmit"
|
|
23
25
|
},
|
|
@@ -41,5 +43,12 @@
|
|
|
41
43
|
"type": "git",
|
|
42
44
|
"url": "https://github.com/mattiasmalmborg/percher"
|
|
43
45
|
},
|
|
44
|
-
"keywords": [
|
|
46
|
+
"keywords": [
|
|
47
|
+
"hosting",
|
|
48
|
+
"deploy",
|
|
49
|
+
"cli",
|
|
50
|
+
"paas",
|
|
51
|
+
"bun",
|
|
52
|
+
"ai"
|
|
53
|
+
]
|
|
45
54
|
}
|
package/dist/src/cli-utils.d.ts
CHANGED
|
@@ -5,9 +5,20 @@ export declare class SilentExitError {
|
|
|
5
5
|
constructor(exitCode?: number);
|
|
6
6
|
}
|
|
7
7
|
export declare function writeLine(ctx: Context, line: string): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Print an "unknown command" usage hint to stderr. cac never surfaces
|
|
10
|
+
* an unmatched command — its `runMatchedCommand()` just returns when
|
|
11
|
+
* `matchedCommand` is undefined — so the CLI has to detect the no-match
|
|
12
|
+
* case itself and emit this. Pair it with a non-zero exit so scripts
|
|
13
|
+
* and agents see the failure instead of an empty exit 0. (dogfood
|
|
14
|
+
* Fas 2 F2-#1.)
|
|
15
|
+
*/
|
|
16
|
+
export declare function writeUnknownCommand(ctx: Context, name: string): Promise<void>;
|
|
8
17
|
/** ISO timestamp → "YYYY-MM-DD HH:MM:SS" in UTC for stable, sortable output. */
|
|
9
18
|
export declare function formatDeployTimestamp(iso: string): string;
|
|
10
19
|
export declare function formatStatus(status: string): string;
|
|
20
|
+
/** Human-readable byte size (binary units, 1 decimal): 225.4 MB, 1.2 GB. */
|
|
21
|
+
export declare function formatBytes(bytes: number): string;
|
|
11
22
|
/**
|
|
12
23
|
* Pick the first non-flag positional in `argv` after index `from`. Used by
|
|
13
24
|
* the manual subcommand dispatch (cac doesn't natively support multi-token
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-utils.d.ts","sourceRoot":"","sources":["../../src/cli-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-utils.d.ts","sourceRoot":"","sources":["../../src/cli-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,gGAAgG;AAChG,qBAAa,eAAe;IACd,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,GAAE,MAAU;CAC1C;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOzE;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYnF;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKzD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAInD;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUjD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,WAAW,CAAC,MAAM,CAAa,GAC1C,MAAM,GAAG,SAAS,CAsBpB;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3D,OAAO,CAAC,IAAI,CAAC,CAyCf"}
|
package/dist/src/cli-utils.js
CHANGED
|
@@ -16,6 +16,24 @@ export async function writeLine(ctx, line) {
|
|
|
16
16
|
writer.releaseLock();
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Print an "unknown command" usage hint to stderr. cac never surfaces
|
|
21
|
+
* an unmatched command — its `runMatchedCommand()` just returns when
|
|
22
|
+
* `matchedCommand` is undefined — so the CLI has to detect the no-match
|
|
23
|
+
* case itself and emit this. Pair it with a non-zero exit so scripts
|
|
24
|
+
* and agents see the failure instead of an empty exit 0. (dogfood
|
|
25
|
+
* Fas 2 F2-#1.)
|
|
26
|
+
*/
|
|
27
|
+
export async function writeUnknownCommand(ctx, name) {
|
|
28
|
+
const writer = ctx.stderr.getWriter();
|
|
29
|
+
try {
|
|
30
|
+
await writer.write(new TextEncoder().encode(`${pc.red("error:")} unknown command \`${name}\`\n` +
|
|
31
|
+
`Run \`percher --help\` to see available commands.\n`));
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
writer.releaseLock();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
19
37
|
/** ISO timestamp → "YYYY-MM-DD HH:MM:SS" in UTC for stable, sortable output. */
|
|
20
38
|
export function formatDeployTimestamp(iso) {
|
|
21
39
|
const d = new Date(iso);
|
|
@@ -31,6 +49,19 @@ export function formatStatus(status) {
|
|
|
31
49
|
return pc.red(status);
|
|
32
50
|
return pc.yellow(status);
|
|
33
51
|
}
|
|
52
|
+
/** Human-readable byte size (binary units, 1 decimal): 225.4 MB, 1.2 GB. */
|
|
53
|
+
export function formatBytes(bytes) {
|
|
54
|
+
if (!Number.isFinite(bytes) || bytes < 0)
|
|
55
|
+
return "—";
|
|
56
|
+
const units = ["B", "KB", "MB", "GB", "TB"];
|
|
57
|
+
let n = bytes;
|
|
58
|
+
let i = 0;
|
|
59
|
+
while (n >= 1024 && i < units.length - 1) {
|
|
60
|
+
n /= 1024;
|
|
61
|
+
i += 1;
|
|
62
|
+
}
|
|
63
|
+
return `${i === 0 ? n : n.toFixed(1)} ${units[i]}`;
|
|
64
|
+
}
|
|
34
65
|
/**
|
|
35
66
|
* Pick the first non-flag positional in `argv` after index `from`. Used by
|
|
36
67
|
* the manual subcommand dispatch (cac doesn't natively support multi-token
|
|
@@ -96,6 +127,9 @@ export async function runDeploysInspect(ctx, input) {
|
|
|
96
127
|
await writeLine(ctx, `${pc.bold("Type:")} ${deploy.type}`);
|
|
97
128
|
}
|
|
98
129
|
await writeLine(ctx, `${pc.bold("Created:")} ${formatDeployTimestamp(deploy.createdAt)}`);
|
|
130
|
+
if (typeof deploy.imageSizeBytes === "number") {
|
|
131
|
+
await writeLine(ctx, `${pc.bold("Image:")} ${formatBytes(deploy.imageSizeBytes)}`);
|
|
132
|
+
}
|
|
99
133
|
if (deploy.url) {
|
|
100
134
|
await writeLine(ctx, `${pc.bold("URL:")} ${deploy.url}`);
|
|
101
135
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-utils.js","sourceRoot":"","sources":["../../src/cli-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-utils.js","sourceRoot":"","sources":["../../src/cli-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/commands/account.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/commands/account.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AA4B/B,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CA2YpE"}
|
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
import * as core from "@percher/core";
|
|
2
2
|
import pc from "picocolors";
|
|
3
3
|
import { SilentExitError, writeLine } from "../cli-utils";
|
|
4
|
+
/**
|
|
5
|
+
* FUTURE_account-deletion-guards Fas 4 — human-readable next-action
|
|
6
|
+
* per blocker kind. Mirrors the plan's "Recovery (Fas 4 MCP)" table
|
|
7
|
+
* (docs/plans/FUTURE_account-deletion-guards.md §2.2) so the CLI's
|
|
8
|
+
* exit messaging matches what the MCP recovery contract will surface
|
|
9
|
+
* once those tools land.
|
|
10
|
+
*/
|
|
11
|
+
const BLOCKER_ACTIONS = {
|
|
12
|
+
apps_owned: "Delete or transfer each app: `bunx percher delete <name>` or `bunx percher transfer <email> --app <name>`.",
|
|
13
|
+
apps_with_collaborators: "Revoke each collaborator: `bunx percher share revoke <shareId> --app <name>` (list IDs with `bunx percher share list --app <name>`).",
|
|
14
|
+
apps_with_pending_invites: "Revoke the pending invite (`bunx percher share revoke <shareId> --app <name>`) or wait for it to expire.",
|
|
15
|
+
apps_with_active_pr_previews: "Close or merge the open pull requests so the preview webhook tears the apps down, then re-run preview.",
|
|
16
|
+
pending_outgoing_transfers: "Cancel each transfer: `bunx percher transfer --cancel <transferId> --app <name>`, or wait for the recipient to decline/expire.",
|
|
17
|
+
deploys_in_progress: "Wait for the in-flight deploy to finish (usually a few minutes), then retry.",
|
|
18
|
+
active_restore_jobs: "Wait for the active restore job to finish (usually a few minutes), then retry.",
|
|
19
|
+
};
|
|
4
20
|
export function registerAccountCommands(cli, ctx) {
|
|
5
21
|
// cac matches commands by single first-token equality (see comment in
|
|
6
22
|
// github.ts). Multi-word `account export` / `account delete` would
|
|
@@ -8,7 +24,7 @@ export function registerAccountCommands(cli, ctx) {
|
|
|
8
24
|
// [action] ...` and keep the multi-word registrations below for
|
|
9
25
|
// --help discoverability only.
|
|
10
26
|
cli
|
|
11
|
-
.command("account [action] [...rest]", "Account management: export (GDPR data portability) | delete (GDPR erasure)")
|
|
27
|
+
.command("account [action] [...rest]", "Account management: export (GDPR data portability) | preview-delete (inspect deletion blockers) | delete (GDPR erasure)")
|
|
12
28
|
.option("--out <file>", "(export only) Output file path")
|
|
13
29
|
.option("--include-app-data", "(export only) Also download per-app PocketBase tarballs (creates a directory)")
|
|
14
30
|
.option("--confirm <email>", "(delete only) Your email — must match the signed-in account")
|
|
@@ -40,27 +56,59 @@ export function registerAccountCommands(cli, ctx) {
|
|
|
40
56
|
await writeLine(ctx, pc.dim("Note: encrypted env-var values are not included (only the keys + metadata). Build logs are excluded too — request via `percher logs` if needed."));
|
|
41
57
|
return;
|
|
42
58
|
}
|
|
59
|
+
if (action === "preview-delete") {
|
|
60
|
+
if (!ctx.client.token) {
|
|
61
|
+
await writeLine(ctx, `${pc.red("✗")} Not logged in. Run: percher login`);
|
|
62
|
+
throw new SilentExitError();
|
|
63
|
+
}
|
|
64
|
+
const preview = await core.accountDeletionPreview(ctx, {});
|
|
65
|
+
if (preview.canDelete) {
|
|
66
|
+
await writeLine(ctx, `${pc.green("✓")} No blockers — your account is ready to delete. Run: percher account delete --confirm <your-email>`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
await writeLine(ctx, `${pc.yellow("!")} Account deletion is blocked by ${preview.blockers.length} ${preview.blockers.length === 1 ? "category" : "categories"} (${preview.ownedAppCount} owned ${preview.ownedAppCount === 1 ? "app" : "apps"}):`);
|
|
70
|
+
for (const blocker of preview.blockers) {
|
|
71
|
+
const action = BLOCKER_ACTIONS[blocker.kind] ?? "Clear via the dashboard or API.";
|
|
72
|
+
await writeLine(ctx, "");
|
|
73
|
+
await writeLine(ctx, ` ${pc.bold(blocker.kind)} (${blocker.count})`);
|
|
74
|
+
await writeLine(ctx, ` → ${action}`);
|
|
75
|
+
const previewDetails = blocker.details.slice(0, 5);
|
|
76
|
+
for (const detail of previewDetails) {
|
|
77
|
+
const ref = detail.ref ? ` (${detail.ref})` : "";
|
|
78
|
+
const name = detail.appName ?? detail.appId ?? "—";
|
|
79
|
+
await writeLine(ctx, ` · ${name}${ref}`);
|
|
80
|
+
}
|
|
81
|
+
if (blocker.details.length > previewDetails.length) {
|
|
82
|
+
await writeLine(ctx, pc.dim(` … ${blocker.details.length - previewDetails.length} more`));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
await writeLine(ctx, pc.dim("\nResolve each category above, then re-run `percher account preview-delete` to confirm. Once canDelete=true, run `percher account delete --confirm <your-email>`."));
|
|
86
|
+
// Exit-code 2: "not blocked by error, but user action needed"
|
|
87
|
+
// — matches the convention from `bun create` / `git status`
|
|
88
|
+
// where a clean-but-not-done state has its own non-zero code.
|
|
89
|
+
throw new SilentExitError(2);
|
|
90
|
+
}
|
|
43
91
|
if (action === "delete") {
|
|
44
92
|
if (!ctx.client.token) {
|
|
45
93
|
await writeLine(ctx, `${pc.red("✗")} Not logged in. Run: percher login`);
|
|
46
94
|
throw new SilentExitError();
|
|
47
95
|
}
|
|
48
96
|
if (!options.confirm) {
|
|
49
|
-
await writeLine(ctx, `${pc.red("✗")} Pass --confirm <your-email> to proceed.
|
|
97
|
+
await writeLine(ctx, `${pc.red("✗")} Pass --confirm <your-email> to proceed. Account deletion is fail-closed — owned apps, accepted collaborators, pending invites, open PR previews, pending transfers, in-flight deploys, and active restores must all be cleared first.`);
|
|
50
98
|
throw new SilentExitError();
|
|
51
99
|
}
|
|
52
100
|
if (!options.yes) {
|
|
53
|
-
const answer = await ctx.prompt(`${pc.red("!")} This will
|
|
101
|
+
const answer = await ctx.prompt(`${pc.red("!")} This will request deletion of your account. The server will reject the request if any apps, collaborators, pending invites, PR previews, pending transfers, in-flight deploys, or active restores remain — clear those first. On a clean account the request is accepted asynchronously and finalization completes within seconds; your API tokens are revoked immediately. Type "delete my account" to confirm:`);
|
|
54
102
|
if (answer.trim().toLowerCase() !== "delete my account") {
|
|
55
103
|
await writeLine(ctx, "Cancelled.");
|
|
56
104
|
return;
|
|
57
105
|
}
|
|
58
106
|
}
|
|
59
|
-
await core.accountDelete(ctx, { confirm: options.confirm });
|
|
60
|
-
await writeLine(ctx, `${pc.green("✓")} Account
|
|
107
|
+
const accepted = await core.accountDelete(ctx, { confirm: options.confirm });
|
|
108
|
+
await writeLine(ctx, `${pc.green("✓")} Account deletion started. Finalization runs asynchronously (job ${pc.dim(accepted.finalizeJobId)}); usually completes within a few seconds. Your API tokens have already been revoked.`);
|
|
61
109
|
return;
|
|
62
110
|
}
|
|
63
|
-
throw new Error(`Unknown account action "${action ?? ""}". Use: export | delete.`);
|
|
111
|
+
throw new Error(`Unknown account action "${action ?? ""}". Use: export | preview-delete | delete.`);
|
|
64
112
|
});
|
|
65
113
|
// Help-only registrations. Unreachable in practice (cac falls through
|
|
66
114
|
// to the parent `account [action] ...` above), but kept so the help
|
|
@@ -73,7 +121,12 @@ export function registerAccountCommands(cli, ctx) {
|
|
|
73
121
|
// Unreachable — handled by parent `account [action] ...` action.
|
|
74
122
|
});
|
|
75
123
|
cli
|
|
76
|
-
.command("account delete", "
|
|
124
|
+
.command("account preview-delete", "Inspect what would block `account delete` (pure read — no mutation). Lists each blocker category + an action hint per kind. Exit code 0 if the account is clean, 2 if blocked.")
|
|
125
|
+
.action(async () => {
|
|
126
|
+
// Unreachable — handled by parent `account [action] ...` action.
|
|
127
|
+
});
|
|
128
|
+
cli
|
|
129
|
+
.command("account delete", "Request account deletion (GDPR Art. 17). Fail-closed: clear owned apps + collaborators + pending invites + PR previews + pending transfers + in-flight deploys + active restores first.")
|
|
77
130
|
.option("--confirm <email>", "Your email address — must match the signed-in account")
|
|
78
131
|
.option("--yes", "Skip the interactive confirmation prompt (still requires --confirm)")
|
|
79
132
|
.action(async () => {
|
|
@@ -194,6 +247,9 @@ export function registerAccountCommands(cli, ctx) {
|
|
|
194
247
|
if (result.configGenerated) {
|
|
195
248
|
await writeLine(ctx, `${pc.green("✓")} Imported from ${result.provider} — percher.toml generated`);
|
|
196
249
|
}
|
|
250
|
+
for (const file of result.scaffoldedFiles) {
|
|
251
|
+
await writeLine(ctx, `${pc.green("✓")} wrote ${file}`);
|
|
252
|
+
}
|
|
197
253
|
for (const w of result.warnings) {
|
|
198
254
|
await writeLine(ctx, `${pc.yellow("!")} ${w}`);
|
|
199
255
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/commands/account.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/commands/account.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Context } from "@percher/core";
|
|
2
|
+
import type { CAC } from "cac";
|
|
3
|
+
/**
|
|
4
|
+
* FUTURE18 Fas 4 — operator-only `percher admin reconcile-routes`.
|
|
5
|
+
*
|
|
6
|
+
* The endpoint itself is gated by `isAdminEmail()` server-side, so a
|
|
7
|
+
* non-admin who runs this gets a clean 403. The command stays visible
|
|
8
|
+
* in `--help` because there's no client-side admin detection (and
|
|
9
|
+
* adding one would mean shipping the admin allowlist to every CLI).
|
|
10
|
+
* The "(admin only)" label in the description tells non-admins they
|
|
11
|
+
* shouldn't bother.
|
|
12
|
+
*
|
|
13
|
+
* NOT exposed via MCP — agents must not be able to mutate Caddy state
|
|
14
|
+
* on a user request.
|
|
15
|
+
*/
|
|
16
|
+
export declare function registerAdminCommands(cli: CAC, ctx: Context): void;
|
|
17
|
+
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../src/commands/admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAI/B;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAqHlE"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import * as core from "@percher/core";
|
|
2
|
+
import pc from "picocolors";
|
|
3
|
+
import { SilentExitError, writeLine } from "../cli-utils";
|
|
4
|
+
/**
|
|
5
|
+
* FUTURE18 Fas 4 — operator-only `percher admin reconcile-routes`.
|
|
6
|
+
*
|
|
7
|
+
* The endpoint itself is gated by `isAdminEmail()` server-side, so a
|
|
8
|
+
* non-admin who runs this gets a clean 403. The command stays visible
|
|
9
|
+
* in `--help` because there's no client-side admin detection (and
|
|
10
|
+
* adding one would mean shipping the admin allowlist to every CLI).
|
|
11
|
+
* The "(admin only)" label in the description tells non-admins they
|
|
12
|
+
* shouldn't bother.
|
|
13
|
+
*
|
|
14
|
+
* NOT exposed via MCP — agents must not be able to mutate Caddy state
|
|
15
|
+
* on a user request.
|
|
16
|
+
*/
|
|
17
|
+
export function registerAdminCommands(cli, ctx) {
|
|
18
|
+
// cac matches commands by single first-token equality (see comment
|
|
19
|
+
// in github.ts / account.ts), so multi-word `admin reconcile-routes`
|
|
20
|
+
// would never bind to argv[0]="admin". Dispatch through a parent
|
|
21
|
+
// `admin [action]` and add help-only registrations below for
|
|
22
|
+
// discoverability.
|
|
23
|
+
cli
|
|
24
|
+
.command("admin [action] [...rest]", "Operator commands (admin only): reconcile-routes")
|
|
25
|
+
.option("--app <name>", "(reconcile-routes) Limit to a single app by name")
|
|
26
|
+
.option("--app-id <id>", "(reconcile-routes) Limit to a single app by id")
|
|
27
|
+
.option("--dry-run", "(reconcile-routes) Read-only diff — no Caddy mutations, returns missing/extra/host drift")
|
|
28
|
+
.option("--json", "(reconcile-routes) Output JSON instead of formatted text")
|
|
29
|
+
.action(async (action, _rest, options) => {
|
|
30
|
+
if (action === "reconcile-routes") {
|
|
31
|
+
if (!ctx.client.token) {
|
|
32
|
+
await writeLine(ctx, `${pc.red("✗")} Not logged in. Run: percher login`);
|
|
33
|
+
throw new SilentExitError();
|
|
34
|
+
}
|
|
35
|
+
const result = await core.adminReconcileRoutes(ctx, {
|
|
36
|
+
appName: options.app,
|
|
37
|
+
appId: options.appId,
|
|
38
|
+
dryRun: Boolean(options.dryRun),
|
|
39
|
+
});
|
|
40
|
+
if (options.json) {
|
|
41
|
+
await writeLine(ctx, JSON.stringify(result, null, 2));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (options.dryRun) {
|
|
45
|
+
const missing = result.missingRoute ?? 0;
|
|
46
|
+
const hostDrift = result.missingHost ?? 0;
|
|
47
|
+
const extra = result.extraRoute ?? 0;
|
|
48
|
+
const drift = result.dryRunDrift ?? [];
|
|
49
|
+
if (missing === 0 && hostDrift === 0 && extra === 0) {
|
|
50
|
+
await writeLine(ctx, `${pc.green("✓")} No drift — Caddy matches expected routes.`);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
await writeLine(ctx, `${pc.yellow("!")} drift: ${missing} missing route(s), ${hostDrift} missing host(s), ${extra} extra route(s)`);
|
|
54
|
+
for (const d of drift) {
|
|
55
|
+
const label = d.kind === "missing_route"
|
|
56
|
+
? pc.red("MISSING")
|
|
57
|
+
: d.kind === "missing_host"
|
|
58
|
+
? pc.yellow("HOST_DRIFT")
|
|
59
|
+
: pc.dim("EXTRA");
|
|
60
|
+
const target = d.appName ? `[${d.appName}] ` : "";
|
|
61
|
+
await writeLine(ctx, ` ${label} ${target}${d.routeId} (${d.routeType}) — ${d.hosts.join(", ")}`);
|
|
62
|
+
}
|
|
63
|
+
await writeLine(ctx, pc.dim(`Repair: percher admin reconcile-routes${options.app ? ` --app ${options.app}` : ""}`));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// Live reconcile.
|
|
67
|
+
if (result.errors === 0) {
|
|
68
|
+
await writeLine(ctx, `${pc.green("✓")} reconciled ${result.reconciled}, recovered ${result.recovered}, stale ${result.stale}, errors 0`);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
await writeLine(ctx, `${pc.yellow("!")} reconciled ${result.reconciled}, errors ${result.errors} (app=${result.appRouteErrors} pb=${result.pbRouteErrors} sleeping=${result.sleepingRouteErrors})`);
|
|
72
|
+
for (const e of result.perAppErrors) {
|
|
73
|
+
await writeLine(ctx, ` ${pc.red("✗")} [${e.appName}] ${e.routeId} (${e.routeType}) — ${e.errorCode}: ${e.cause}`);
|
|
74
|
+
}
|
|
75
|
+
throw new SilentExitError(1);
|
|
76
|
+
}
|
|
77
|
+
throw new Error(`Unknown admin action "${action ?? ""}". Use: reconcile-routes.`);
|
|
78
|
+
});
|
|
79
|
+
// Help-only registration so `percher --help` advertises the
|
|
80
|
+
// subcommand. cac falls through to the parent `admin [action] ...`
|
|
81
|
+
// above for the actual dispatch.
|
|
82
|
+
cli
|
|
83
|
+
.command("admin reconcile-routes", "(admin only) Reconcile Caddy routes against DB state — fixes silent route loss")
|
|
84
|
+
.option("--app <name>", "Limit to a single app by name")
|
|
85
|
+
.option("--app-id <id>", "Limit to a single app by id")
|
|
86
|
+
.option("--dry-run", "Read-only diff — no Caddy mutations")
|
|
87
|
+
.option("--json", "Output JSON instead of formatted text")
|
|
88
|
+
.action(async () => {
|
|
89
|
+
// Unreachable — handled by parent `admin [action] ...`.
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../src/commands/admin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../../src/commands/apps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AA0B/B;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../../src/commands/apps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AA0B/B;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,IAAI,CAAC,CA0Pf;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAgWjE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as core from "@percher/core";
|
|
2
2
|
import pc from "picocolors";
|
|
3
|
-
import { SilentExitError, writeLine } from "../cli-utils";
|
|
3
|
+
import { formatBytes, SilentExitError, writeLine } from "../cli-utils";
|
|
4
4
|
/**
|
|
5
5
|
* FUTURE12 Phase 8 — exhaustiveness tripwire for the publish-handler
|
|
6
6
|
* switch. Adding a new value to `PublishStatus` without a matching
|
|
@@ -42,6 +42,25 @@ export async function handlePublishResult(ctx, result, options = {}) {
|
|
|
42
42
|
}
|
|
43
43
|
throw new SilentExitError();
|
|
44
44
|
}
|
|
45
|
+
case "auth_pending": {
|
|
46
|
+
// FUTURE16 Fas 3 — only the MCP wrapper emits auth_pending; the
|
|
47
|
+
// CLI's `percher publish` calls core.publish directly and goes
|
|
48
|
+
// through the legacy `needs_login` path with an interactive
|
|
49
|
+
// login flow. This case exists purely to keep the switch
|
|
50
|
+
// exhaustive against the shared PublishStatus enum — if a
|
|
51
|
+
// future refactor reroutes the CLI through the MCP wrapper
|
|
52
|
+
// we'd want to print something reasonable instead of crashing
|
|
53
|
+
// through assertNever. Fall back to the same hint as
|
|
54
|
+
// needs_login plus a pointer at `percher login`.
|
|
55
|
+
if (result.loginUrl) {
|
|
56
|
+
await writeLine(ctx, `${pc.yellow("!")} Not logged in. Authorize here:`);
|
|
57
|
+
await writeLine(ctx, ` ${result.loginUrl}`);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
await writeLine(ctx, `${pc.red("✗")} Not logged in. Run: percher login`);
|
|
61
|
+
}
|
|
62
|
+
throw new SilentExitError();
|
|
63
|
+
}
|
|
45
64
|
case "queued": {
|
|
46
65
|
// FUTURE11 async path — caller passed waitForLive: false (currently
|
|
47
66
|
// only reachable via the MCP/programmatic path, but PublishStatus
|
|
@@ -173,11 +192,24 @@ export async function handlePublishResult(ctx, result, options = {}) {
|
|
|
173
192
|
if (result.cacheReused) {
|
|
174
193
|
await writeLine(ctx, pc.dim(" Build cache: reused — identical bundle, redeployed without re-upload (--no-cache to force a fresh build)"));
|
|
175
194
|
}
|
|
176
|
-
else
|
|
177
|
-
|
|
195
|
+
else {
|
|
196
|
+
// FUTURE11 Fas 4 — three-valued cache status. Falls back to
|
|
197
|
+
// the legacy boolean when cacheStatus is absent (server is
|
|
198
|
+
// pre-Fas-4 or the row was never populated).
|
|
199
|
+
const status = result.cacheStatus ??
|
|
200
|
+
(result.cacheHit === true ? "image_reused" : result.cacheHit === false ? "fresh" : null);
|
|
201
|
+
if (status === "image_reused") {
|
|
202
|
+
await writeLine(ctx, pc.dim(" Build cache: hit (reused image — re-run with --no-cache if your changes aren't reflected)"));
|
|
203
|
+
}
|
|
204
|
+
else if (status === "layer_hit") {
|
|
205
|
+
await writeLine(ctx, pc.dim(" Build cache: layer hit (Docker reused unchanged layers — full nixpacks/build skipped)"));
|
|
206
|
+
}
|
|
207
|
+
else if (status === "fresh") {
|
|
208
|
+
await writeLine(ctx, pc.dim(" Build cache: miss (fresh build)"));
|
|
209
|
+
}
|
|
178
210
|
}
|
|
179
|
-
|
|
180
|
-
await writeLine(ctx, pc.dim(
|
|
211
|
+
if (typeof result.deployment?.imageSizeBytes === "number") {
|
|
212
|
+
await writeLine(ctx, pc.dim(` Image size: ${formatBytes(result.deployment.imageSizeBytes)}`));
|
|
181
213
|
}
|
|
182
214
|
if (result.replacedPreview) {
|
|
183
215
|
await writeLine(ctx, pc.dim(" (replaced previous preview — free plan keeps 1 preview slot per app)"));
|
|
@@ -213,8 +245,20 @@ export function registerAppsCommands(cli, ctx) {
|
|
|
213
245
|
.option("--force", "Overwrite existing percher.toml")
|
|
214
246
|
.option("--name <name>", "Override detected app name")
|
|
215
247
|
.action(async (options) => {
|
|
216
|
-
|
|
248
|
+
// FUTURE11 Fas 5 — CLI is the interactive surface; let init's
|
|
249
|
+
// suspicious-name detector prompt the user instead of silently
|
|
250
|
+
// baking a temp-dir slug into the app URL. MCP and other
|
|
251
|
+
// non-CLI callers omit `interactive` so the detector falls
|
|
252
|
+
// back to `process.stdin.isTTY`.
|
|
253
|
+
const result = await core.init(ctx, {
|
|
254
|
+
force: options.force,
|
|
255
|
+
name: options.name,
|
|
256
|
+
interactive: true,
|
|
257
|
+
});
|
|
217
258
|
await writeLine(ctx, `${pc.green("✓")} wrote ${result.path}`);
|
|
259
|
+
for (const file of result.scaffoldedFiles) {
|
|
260
|
+
await writeLine(ctx, `${pc.green("✓")} wrote ${file}`);
|
|
261
|
+
}
|
|
218
262
|
});
|
|
219
263
|
cli
|
|
220
264
|
.command("publish", "Publish this project to Percher (recommended deploy command)")
|
|
@@ -308,12 +352,26 @@ export function registerAppsCommands(cli, ctx) {
|
|
|
308
352
|
// wording as publish so users learn one signal across both
|
|
309
353
|
// commands. Codex P3 follow-up on 9e5ceee — push was blind to
|
|
310
354
|
// the exact stale-cache scenario --no-cache was added to fix.
|
|
311
|
-
|
|
355
|
+
// FUTURE11 Fas 4 — three-valued cache status with legacy
|
|
356
|
+
// boolean fallback. Mirrored from the publish output above.
|
|
357
|
+
const status = result.deployment?.cacheStatus ??
|
|
358
|
+
(result.deployment?.cacheHit === true
|
|
359
|
+
? "image_reused"
|
|
360
|
+
: result.deployment?.cacheHit === false
|
|
361
|
+
? "fresh"
|
|
362
|
+
: null);
|
|
363
|
+
if (status === "image_reused") {
|
|
312
364
|
await writeLine(ctx, pc.dim(" Build cache: hit (reused image — re-run with --no-cache if your changes aren't reflected)"));
|
|
313
365
|
}
|
|
314
|
-
else if (
|
|
366
|
+
else if (status === "layer_hit") {
|
|
367
|
+
await writeLine(ctx, pc.dim(" Build cache: layer hit (Docker reused unchanged layers — full nixpacks/build skipped)"));
|
|
368
|
+
}
|
|
369
|
+
else if (status === "fresh") {
|
|
315
370
|
await writeLine(ctx, pc.dim(" Build cache: miss (fresh build)"));
|
|
316
371
|
}
|
|
372
|
+
if (typeof result.deployment?.imageSizeBytes === "number") {
|
|
373
|
+
await writeLine(ctx, pc.dim(` Image size: ${formatBytes(result.deployment.imageSizeBytes)}`));
|
|
374
|
+
}
|
|
317
375
|
}
|
|
318
376
|
});
|
|
319
377
|
cli
|