percher 0.5.24 → 1.0.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.
Files changed (103) hide show
  1. package/LICENSE +132 -0
  2. package/THIRD-PARTY-NOTICES.txt +1228 -0
  3. package/dist/bin/percher.js +64487 -72732
  4. package/dist/package.json +10 -8
  5. package/dist/src/commands/account.js +5 -5
  6. package/dist/src/commands/account.js.map +1 -1
  7. package/dist/src/commands/admin.d.ts.map +1 -1
  8. package/dist/src/commands/admin.js +180 -15
  9. package/dist/src/commands/admin.js.map +1 -1
  10. package/dist/src/commands/analytics.js +1 -1
  11. package/dist/src/commands/apps.d.ts.map +1 -1
  12. package/dist/src/commands/apps.js +5 -5
  13. package/dist/src/commands/apps.js.map +1 -1
  14. package/dist/src/commands/auth.js +1 -1
  15. package/dist/src/commands/data.js +1 -1
  16. package/dist/src/commands/deploys.d.ts.map +1 -1
  17. package/dist/src/commands/deploys.js +24 -2
  18. package/dist/src/commands/deploys.js.map +1 -1
  19. package/dist/src/commands/env.js +3 -3
  20. package/dist/src/commands/export.js +1 -1
  21. package/dist/src/commands/github.js +1 -1
  22. package/dist/src/commands/hooks.js +1 -1
  23. package/dist/src/commands/migrate.js +1 -1
  24. package/dist/src/commands/sharing.js +1 -1
  25. package/dist/src/commands/status.js +1 -1
  26. package/dist/src/commands/token.js +1 -1
  27. package/dist/src/commands/transfers.js +1 -1
  28. package/dist/src/context.js +3 -3
  29. package/dist/src/index.js +21 -21
  30. package/dist/src/version-check.d.ts +2 -0
  31. package/dist/src/version-check.d.ts.map +1 -1
  32. package/dist/src/version-check.js +23 -2
  33. package/dist/src/version-check.js.map +1 -1
  34. package/dist/templates/LICENSE +14 -0
  35. package/dist/templates/astro/Dockerfile +51 -35
  36. package/dist/templates/astro/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  37. package/dist/templates/bun/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  38. package/dist/templates/capsule/Dockerfile +30 -12
  39. package/dist/templates/capsule/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  40. package/dist/templates/django/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  41. package/dist/templates/django/percher.toml +1 -0
  42. package/dist/templates/dotnet/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  43. package/dist/templates/eleventy/Dockerfile +51 -35
  44. package/dist/templates/eleventy/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  45. package/dist/templates/elysia/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  46. package/dist/templates/express/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  47. package/dist/templates/express/package.json +2 -1
  48. package/dist/templates/fastify/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  49. package/dist/templates/fastify/package.json +2 -1
  50. package/dist/templates/flask/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  51. package/dist/templates/flask/percher.toml +1 -0
  52. package/dist/templates/flask/requirements.txt +1 -0
  53. package/dist/templates/go/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  54. package/dist/templates/hono/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  55. package/dist/templates/hono/index.ts +4 -2
  56. package/dist/templates/hono/package.json +3 -1
  57. package/dist/templates/htmx/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  58. package/dist/templates/htmx/package.json +1 -1
  59. package/dist/templates/hugo/Dockerfile +49 -33
  60. package/dist/templates/hugo/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  61. package/dist/templates/java/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  62. package/dist/templates/laravel/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  63. package/dist/templates/nextjs/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  64. package/dist/templates/node/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  65. package/dist/templates/nuxt/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  66. package/dist/templates/phoenix/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  67. package/dist/templates/preact/Dockerfile +51 -35
  68. package/dist/templates/preact/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  69. package/dist/templates/python/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  70. package/dist/templates/rails/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  71. package/dist/templates/remix/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  72. package/dist/templates/remix/app/routes/health.tsx +3 -1
  73. package/dist/templates/rust/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  74. package/dist/templates/solid/Dockerfile +51 -35
  75. package/dist/templates/solid/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  76. package/dist/templates/static/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  77. package/dist/templates/sveltekit/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  78. package/dist/templates/sveltekit/package.json +1 -1
  79. package/dist/templates/vite-react/Dockerfile +51 -35
  80. package/dist/templates/vite-react/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  81. package/dist/templates/vite-vue/Dockerfile +51 -35
  82. package/dist/templates/vite-vue/PERCHER-TEMPLATE-LICENSE.txt +14 -0
  83. package/package.json +10 -8
  84. package/dist/context.d.ts +0 -3
  85. package/dist/context.d.ts.map +0 -1
  86. package/dist/context.js +0 -31
  87. package/dist/context.js.map +0 -1
  88. package/dist/index.d.ts +0 -3
  89. package/dist/index.d.ts.map +0 -1
  90. package/dist/index.js +0 -385
  91. package/dist/index.js.map +0 -1
  92. package/dist/open.d.ts +0 -2
  93. package/dist/open.d.ts.map +0 -1
  94. package/dist/open.js +0 -16
  95. package/dist/open.js.map +0 -1
  96. package/dist/output.d.ts +0 -2
  97. package/dist/output.d.ts.map +0 -1
  98. package/dist/output.js +0 -44
  99. package/dist/output.js.map +0 -1
  100. package/dist/prompt.d.ts +0 -4
  101. package/dist/prompt.d.ts.map +0 -1
  102. package/dist/prompt.js +0 -14
  103. package/dist/prompt.js.map +0 -1
@@ -1,35 +1,51 @@
1
- # Multi-stage build: a Bun stage compiles the static bundle, then a
2
- # minimal Caddy image serves it. This project uses runtime = "docker"
3
- # (not "static") because Percher's static runtime serves pre-built
4
- # files only — it does not run a build command. Generated by Percher;
5
- # safe to edit and own.
6
-
7
- # --- Build stage: install deps and build the static bundle -----------
8
- FROM oven/bun:1-alpine AS build
9
- WORKDIR /app
10
- COPY . .
11
- RUN bun install && bun run build
12
-
13
- # --- Serve stage: minimal Caddy image --------------------------------
14
- # caddy:2-alpine ships /usr/bin/caddy with cap_net_bind_service file
15
- # caps. Percher runs every container with --security-opt
16
- # no-new-privileges, which makes execve refuse a cap-bearing binary
17
- # (an "operation not permitted" crash-loop). Copy Caddy onto a plain
18
- # alpine base and strip the caps with setcap -r — Caddy never needs
19
- # the cap here, it listens on :8080 (>= 1024).
20
- FROM caddy:2-alpine AS caddy-source
21
- FROM alpine:3.21
22
- COPY --from=caddy-source /usr/bin/caddy /usr/bin/caddy
23
- RUN apk add --no-cache libcap \
24
- && (setcap -r /usr/bin/caddy 2>/dev/null || true) \
25
- && test -z "$(getcap /usr/bin/caddy)" \
26
- && apk del libcap \
27
- && rm -rf /var/cache/apk/*
28
- COPY Caddyfile /etc/caddy/Caddyfile
29
- COPY --from=build /app/dist /srv
30
- # HOME points at the writable tmpfs so non-root Caddy can persist its
31
- # XDG state (storage-clean lock, config autosave) under Percher's
32
- # read-only root filesystem.
33
- ENV HOME=/tmp
34
- EXPOSE 8080
35
- CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]
1
+ # Multi-stage build: a Bun stage compiles the static bundle, then a
2
+ # minimal Caddy image serves it. This project uses runtime = "docker"
3
+ # (not "static") because Percher's static runtime serves pre-built
4
+ # files only — it does not run a build command. Generated by Percher;
5
+ # safe to edit and own.
6
+
7
+ # --- Build stage: install deps and build the static bundle -----------
8
+ FROM oven/bun:1-alpine AS build
9
+ WORKDIR /app
10
+ COPY . .
11
+ RUN bun install && bun run build
12
+
13
+ # --- Serve stage: minimal Caddy image --------------------------------
14
+ # Build pinned Caddy source with refreshed security modules. The scratch
15
+ # runtime carries no shell, package manager, or file capabilities and listens
16
+ # on the unprivileged port :8080.
17
+ FROM golang:1.26.7-alpine3.23@sha256:b17af760035fc2f338eed92d448a6c67f2d45438844fc6c60678fa5f99e44b57 AS caddy-source
18
+ ADD --checksum=sha256:78e660d838e45c0b8c89338b325946238f153641aa9925df9ef2ad5e8eced31b \
19
+ https://github.com/caddyserver/caddy/commit/b2693fb63a30e6d7be0972c3645e9a2c0a500e93.patch /tmp/caddy-cel-go.patch
20
+ RUN go mod download github.com/caddyserver/caddy/v2@v2.11.4 \
21
+ && cp -R /go/pkg/mod/github.com/caddyserver/caddy/v2@v2.11.4 /src \
22
+ && chmod -R u+w /src
23
+ WORKDIR /src
24
+ RUN apk add --no-cache patch \
25
+ && patch -p1 < /tmp/caddy-cel-go.patch \
26
+ && go get github.com/go-chi/chi/v5@v5.3.0 github.com/google/cel-go@v0.29.2 \
27
+ github.com/klauspost/compress@v1.18.7 go.opentelemetry.io/otel@v1.44.0 \
28
+ golang.org/x/crypto@v0.55.0 golang.org/x/net@v0.58.0 \
29
+ golang.org/x/text@v0.41.0 google.golang.org/grpc@v1.83.2 \
30
+ && go mod tidy \
31
+ && CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o /out/caddy ./cmd/caddy \
32
+ && printf '%s\n' \
33
+ 'package main' \
34
+ 'import ("net/http"; "os"; "time")' \
35
+ 'func main(){ if len(os.Args)!=2 { os.Exit(2) }; c:=http.Client{Timeout:2500*time.Millisecond,Transport:&http.Transport{Proxy:nil},CheckRedirect:func(_ *http.Request,_ []*http.Request) error{return http.ErrUseLastResponse}}; r,e:=c.Get(os.Args[1]); if e!=nil { os.Exit(1) }; defer r.Body.Close(); if r.StatusCode!=http.StatusOK { os.Exit(1) } }' \
36
+ > /tmp/percher-healthcheck.go \
37
+ && CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o /out/percher-healthcheck /tmp/percher-healthcheck.go
38
+ FROM scratch
39
+ COPY --from=caddy-source /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
40
+ COPY --from=caddy-source /out/caddy /usr/bin/caddy
41
+ COPY --from=caddy-source /out/percher-healthcheck /usr/bin/percher-healthcheck
42
+ COPY Caddyfile /etc/caddy/Caddyfile
43
+ COPY --from=build /app/dist /srv
44
+ LABEL dev.percher.health-client="static-http-v1"
45
+ # HOME points at the writable tmpfs so non-root Caddy can persist its
46
+ # XDG state (storage-clean lock, config autosave) under Percher's
47
+ # read-only root filesystem.
48
+ ENV HOME=/tmp
49
+ USER 10001:10001
50
+ EXPOSE 8080
51
+ CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]
@@ -0,0 +1,14 @@
1
+ BSD Zero Clause License (0BSD)
2
+
3
+ Copyright (c) 2026 Mattias Malmborg
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted.
7
+
8
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
9
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
10
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
11
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
+ PERFORMANCE OF THIS SOFTWARE.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "percher",
3
- "version": "0.5.24",
3
+ "version": "1.0.1",
4
4
  "description": "CLI for the Percher hosting platform — publish apps with one command",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,31 +16,33 @@
16
16
  }
17
17
  },
18
18
  "files": [
19
- "dist"
19
+ "dist",
20
+ "THIRD-PARTY-NOTICES.txt"
20
21
  ],
21
22
  "publishConfig": {
22
23
  "access": "public"
23
24
  },
24
25
  "scripts": {
25
- "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)\"",
26
+ "build": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json && bun build bin/percher.ts --outfile dist/bin/percher.js --target node --format esm --metafile=bundle-meta.json && node ../../scripts/bundle-notices.mjs . bundle-meta.json && node scripts/copy-templates.mjs && node -e \"require('fs').chmodSync('dist/bin/percher.js',0o755)\"",
26
27
  "test": "bun test",
27
28
  "typecheck": "tsc --noEmit"
28
29
  },
29
30
  "dependencies": {
30
- "@percher/client": "^0.3.1",
31
- "@percher/core": "^0.4.29",
32
- "@percher/toml": "^0.1.11",
31
+ "@percher/client": "^1.0.1",
32
+ "@percher/core": "^1.0.1",
33
+ "@percher/toml": "^1.0.0",
33
34
  "cac": "^7.0.0",
34
35
  "picocolors": "^1.1.1"
35
36
  },
36
37
  "devDependencies": {
37
- "bun-types": "^1.1.0"
38
+ "bun-types": "^1.1.0",
39
+ "tsc-alias": "^1.8.17"
38
40
  },
39
41
  "engines": {
40
42
  "bun": ">=1.0.0",
41
43
  "node": ">=22.0.0"
42
44
  },
43
- "license": "MIT",
45
+ "license": "FSL-1.1-MIT",
44
46
  "author": "Mattias Malmborg",
45
47
  "repository": {
46
48
  "type": "git",
package/dist/context.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import type { Context } from "@percher/core";
2
- export declare function createCliContext(): Promise<Context>;
3
- //# sourceMappingURL=context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CA4BzD"}
package/dist/context.js DELETED
@@ -1,31 +0,0 @@
1
- import { PercherClient } from "@percher/client";
2
- import { openUrl } from "./open";
3
- import { prompt } from "./prompt";
4
- export async function createCliContext() {
5
- const client = new PercherClient();
6
- const encoder = new TextEncoder();
7
- const stdout = new WritableStream({
8
- write(chunk) {
9
- process.stdout.write(chunk);
10
- },
11
- });
12
- const stderr = new WritableStream({
13
- write(chunk) {
14
- process.stderr.write(chunk);
15
- },
16
- });
17
- return {
18
- client,
19
- cwd: process.cwd(),
20
- stdout,
21
- stderr,
22
- env: process.env,
23
- prompt,
24
- openUrl,
25
- interactiveLogin: true,
26
- status(message) {
27
- process.stderr.write(encoder.encode(`${message}\n`));
28
- },
29
- };
30
- }
31
- //# sourceMappingURL=context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAElC,MAAM,MAAM,GAAG,IAAI,cAAc,CAAa;QAC5C,KAAK,CAAC,KAAK;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,cAAc,CAAa;QAC5C,KAAK,CAAC,KAAK;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;QACN,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM;QACN,MAAM;QACN,GAAG,EAAE,OAAO,CAAC,GAAyC;QACtD,MAAM;QACN,OAAO;QACP,gBAAgB,EAAE,IAAI;QACtB,MAAM,CAAC,OAAe;YACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import type { Context } from "@percher/core";
2
- export declare function run(argv: string[], ctxOverride?: Context): Promise<number>;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAgC7C,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAmYhF"}
package/dist/index.js DELETED
@@ -1,385 +0,0 @@
1
- import * as core from "@percher/core";
2
- import cac from "cac";
3
- import pc from "picocolors";
4
- import { createCliContext } from "./context";
5
- import { renderError } from "./output";
6
- const VERSION = "0.0.1";
7
- /** Thrown after doctor output is printed, to signal non-zero exit without an error message. */
8
- class DoctorFailedError {
9
- failCount;
10
- constructor(failCount) {
11
- this.failCount = failCount;
12
- }
13
- }
14
- function parseKeyValue(pairs) {
15
- const out = {};
16
- for (const p of pairs) {
17
- const idx = p.indexOf("=");
18
- if (idx === -1)
19
- throw new Error(`Expected KEY=VALUE, got "${p}"`);
20
- out[p.slice(0, idx)] = p.slice(idx + 1);
21
- }
22
- return out;
23
- }
24
- async function writeLine(ctx, line) {
25
- const writer = ctx.stdout.getWriter();
26
- try {
27
- await writer.write(new TextEncoder().encode(`${line}\n`));
28
- }
29
- finally {
30
- writer.releaseLock();
31
- }
32
- }
33
- export async function run(argv, ctxOverride) {
34
- const cli = cac("percher");
35
- cli
36
- .command("init", "Generate percher.toml for this project")
37
- .option("--force", "Overwrite existing percher.toml")
38
- .option("--name <name>", "Override detected app name")
39
- .action(async (options) => {
40
- const ctx = ctxOverride ?? (await createCliContext());
41
- const result = await core.init(ctx, { force: options.force, name: options.name });
42
- await writeLine(ctx, `${pc.green("✓")} wrote ${result.path}`);
43
- });
44
- cli
45
- .command("push", "Package and deploy this project")
46
- .option("--dry-run", "Show what would be deployed, don't upload")
47
- .option("--force", "Skip size warnings")
48
- .option("--preview", "Deploy as preview (does not replace the live version)")
49
- .action(async (options) => {
50
- const ctx = ctxOverride ?? (await createCliContext());
51
- const result = await core.push(ctx, {
52
- dryRun: options.dryRun,
53
- force: options.force,
54
- preview: options.preview,
55
- });
56
- if (result.dryRun) {
57
- await writeLine(ctx, `Dry run: ${result.fileCount} files, ${(result.bytes / 1024).toFixed(1)} KB`);
58
- }
59
- else {
60
- await writeLine(ctx, `${pc.green("✓")} deployed to ${result.deployment?.url ?? result.app.url}`);
61
- }
62
- });
63
- cli
64
- .command("logs [app]", "Stream application logs")
65
- .option("--tail <n>", "Return the last N lines and exit", { type: [Number] })
66
- .option("--no-follow", "Don't stream new lines")
67
- .action(async (app, options) => {
68
- const ctx = ctxOverride ?? (await createCliContext());
69
- await core.logs(ctx, {
70
- app,
71
- tail: options.tail ? Number(options.tail) : undefined,
72
- follow: options.follow !== false,
73
- });
74
- });
75
- cli
76
- .command("env <action> [...args]", "Manage env vars (set KEY=VALUE | unset KEY | list)")
77
- .option("--app <name>", "App name (overrides percher.toml)")
78
- .action(async (action, args, options) => {
79
- const ctx = ctxOverride ?? (await createCliContext());
80
- if (action === "set") {
81
- await core.envSet(ctx, { app: options.app, values: parseKeyValue(args) });
82
- await writeLine(ctx, `${pc.green("✓")} env vars updated`);
83
- }
84
- else if (action === "unset") {
85
- const key = args[0];
86
- if (!key)
87
- throw new Error("Expected key to unset");
88
- await core.envUnset(ctx, { app: options.app, key });
89
- await writeLine(ctx, `${pc.green("✓")} unset ${key}`);
90
- }
91
- else if (action === "list") {
92
- const env = await core.envList(ctx, { app: options.app });
93
- for (const [k, v] of Object.entries(env)) {
94
- await writeLine(ctx, `${k}=${v}`);
95
- }
96
- }
97
- else {
98
- throw new Error(`Unknown env action "${action}". Use set | unset | list.`);
99
- }
100
- });
101
- cli
102
- .command("open [app]", "Open the app URL in your browser")
103
- .action(async (app) => {
104
- const ctx = ctxOverride ?? (await createCliContext());
105
- const url = await core.open(ctx, { app });
106
- await writeLine(ctx, url);
107
- });
108
- cli
109
- .command("login", "Authenticate with Percher")
110
- .option("--token <token>", "Dev: skip browser, use a token")
111
- .option("--api-url <url>", "Override API URL")
112
- .action(async (options) => {
113
- const ctx = ctxOverride ?? (await createCliContext());
114
- await core.login(ctx, { token: options.token, apiUrl: options.apiUrl });
115
- });
116
- cli
117
- .command("versions [app]", "List deployed versions for an app")
118
- .action(async (app) => {
119
- const ctx = ctxOverride ?? (await createCliContext());
120
- const list = await core.versions(ctx, { app });
121
- for (const v of list) {
122
- await writeLine(ctx, `${v.sha.slice(0, 10)} ${v.timestamp} ${v.message}`);
123
- }
124
- });
125
- cli
126
- .command("rollback <sha> [app]", "Roll back to a previous version")
127
- .action(async (sha, app) => {
128
- const ctx = ctxOverride ?? (await createCliContext());
129
- const result = await core.rollback(ctx, { app, commitSha: sha });
130
- await writeLine(ctx, `${pc.green("✓")} rolled back to ${sha.slice(0, 10)} (status: ${result.status})`);
131
- });
132
- cli
133
- .command("generate", "Generate .env.example and TypeScript types from percher.toml")
134
- .action(async () => {
135
- const ctx = ctxOverride ?? (await createCliContext());
136
- const result = await core.generate(ctx);
137
- for (const f of result.files) {
138
- await writeLine(ctx, `${pc.green("✓")} ${f}`);
139
- }
140
- });
141
- cli
142
- .command("data [app]", "Show app data status and collections")
143
- .option("--json", "Output as JSON")
144
- .action(async (app, options) => {
145
- const ctx = ctxOverride ?? (await createCliContext());
146
- const result = await core.data(ctx, { app, json: options.json });
147
- if (options.json) {
148
- await writeLine(ctx, JSON.stringify(result, null, 2));
149
- }
150
- else {
151
- await writeLine(ctx, `${pc.bold("Data")} Mode: ${result.mode} Status: ${result.status}`);
152
- await writeLine(ctx, "");
153
- if (result.collections.length > 0) {
154
- await writeLine(ctx, pc.bold("Collections"));
155
- for (const col of result.collections) {
156
- await writeLine(ctx, ` ${col.name.padEnd(20)} ${pc.dim(col.type)}`);
157
- }
158
- await writeLine(ctx, "");
159
- }
160
- await writeLine(ctx, `Collections: ${result.stats.collections} Records: ${result.stats.totalRecords}`);
161
- if (result.adminUrl) {
162
- await writeLine(ctx, "");
163
- await writeLine(ctx, `Admin: ${result.adminUrl}`);
164
- }
165
- }
166
- });
167
- cli
168
- .command("dev [app]", "Watch files and deploy on changes")
169
- .option("--confirm", "Prompt before each push (default: auto-push)")
170
- .action(async (app, options) => {
171
- const ctx = ctxOverride ?? (await createCliContext());
172
- const controller = new AbortController();
173
- // Handle Ctrl+C gracefully
174
- const onSignal = () => controller.abort();
175
- process.on("SIGINT", onSignal);
176
- process.on("SIGTERM", onSignal);
177
- await writeLine(ctx, pc.bold("Percher Dev"));
178
- await writeLine(ctx, "───────────");
179
- await writeLine(ctx, "");
180
- try {
181
- await core.dev(ctx, { app }, {
182
- signal: controller.signal,
183
- async writeLine(line) {
184
- const timestamp = new Date().toLocaleTimeString("sv-SE", { hour12: false });
185
- await writeLine(ctx, `${pc.dim(`[${timestamp}]`)} ${line}`);
186
- },
187
- async onFilesChanged(_files) {
188
- if (options.confirm) {
189
- const answer = await ctx.prompt("Push changes? [Y/n]", { default: "y" });
190
- return /^y(es)?$|^$/i.test(answer.trim());
191
- }
192
- return true; // auto-push by default
193
- },
194
- });
195
- }
196
- finally {
197
- process.removeListener("SIGINT", onSignal);
198
- process.removeListener("SIGTERM", onSignal);
199
- }
200
- await writeLine(ctx, "");
201
- await writeLine(ctx, pc.dim("Dev session ended."));
202
- });
203
- cli
204
- .command("doctor [app]", "Check app health and connectivity")
205
- .option("--json", "Output as JSON")
206
- .action(async (app, options) => {
207
- const ctx = ctxOverride ?? (await createCliContext());
208
- const result = await core.doctor(ctx, { app, json: options.json });
209
- if (options.json) {
210
- await writeLine(ctx, JSON.stringify(result, null, 2));
211
- }
212
- else {
213
- await writeLine(ctx, `${pc.bold("Percher Doctor")}`);
214
- await writeLine(ctx, "──────────────");
215
- await writeLine(ctx, "");
216
- for (const check of result.checks) {
217
- const icon = check.status === "pass"
218
- ? pc.green("✓")
219
- : check.status === "fail"
220
- ? pc.red("✗")
221
- : check.status === "warn"
222
- ? pc.yellow("!")
223
- : pc.dim("—");
224
- await writeLine(ctx, `${icon} ${pc.bold(check.name.padEnd(20))} ${check.message}`);
225
- }
226
- await writeLine(ctx, "");
227
- const summary = `${result.passed}/${result.total} checks passed`;
228
- if (result.failed > 0) {
229
- await writeLine(ctx, pc.red(summary));
230
- }
231
- else if (result.warned > 0) {
232
- await writeLine(ctx, pc.yellow(summary));
233
- }
234
- else {
235
- await writeLine(ctx, pc.green(summary));
236
- }
237
- }
238
- // Signal non-zero exit for CI/agent use
239
- if (result.failed > 0) {
240
- throw new DoctorFailedError(result.failed);
241
- }
242
- });
243
- cli
244
- .command("create [name]", "Create a new app from a template")
245
- .option("--template <template>", "Template to use (node, python, static, nextjs, hono, express)")
246
- .option("--force", "Overwrite existing files in target directory")
247
- .option("--list-templates", "List available templates")
248
- .action(async (name, options) => {
249
- const ctx = ctxOverride ?? (await createCliContext());
250
- if (options.listTemplates) {
251
- const templates = core.listTemplates();
252
- await writeLine(ctx, pc.bold("Available templates:"));
253
- for (const t of templates) {
254
- await writeLine(ctx, ` ${t}`);
255
- }
256
- return;
257
- }
258
- if (!name) {
259
- throw new Error("App name is required. Usage: percher create <name> --template <template>");
260
- }
261
- if (!options.template) {
262
- const templates = core.listTemplates();
263
- await writeLine(ctx, `${pc.red("✗")} --template is required. Available: ${templates.join(", ")}`);
264
- return;
265
- }
266
- const result = await core.create(ctx, {
267
- name,
268
- template: options.template,
269
- force: options.force,
270
- });
271
- await writeLine(ctx, `${pc.green("✓")} created ${result.name} from ${result.template}`);
272
- for (const f of result.files) {
273
- await writeLine(ctx, ` ${pc.dim(f)}`);
274
- }
275
- await writeLine(ctx, "");
276
- await writeLine(ctx, "Next steps:");
277
- await writeLine(ctx, ` cd ${result.name}`);
278
- await writeLine(ctx, " bunx percher push");
279
- });
280
- cli
281
- .command("preview <action> [deployId]", "Manage preview deploys (promote | discard)")
282
- .option("--app <name>", "App name (overrides percher.toml)")
283
- .action(async (action, deployId, options) => {
284
- const ctx = ctxOverride ?? (await createCliContext());
285
- const appRef = options.app ?? core.readPercherTomlAppName(ctx.cwd);
286
- if (!appRef)
287
- throw new Error("App name required. Use --app or run from a project directory.");
288
- if (action === "promote") {
289
- if (!deployId)
290
- throw new Error("Deploy ID required. Usage: percher preview promote <id>");
291
- const result = await ctx.client.apps.promotePreview(appRef, deployId);
292
- await writeLine(ctx, `${pc.green("✓")} Preview promoted to live. Status: ${result.status}`);
293
- }
294
- else if (action === "discard") {
295
- if (!deployId)
296
- throw new Error("Deploy ID required. Usage: percher preview discard <id>");
297
- await ctx.client.apps.discardPreview(appRef, deployId);
298
- await writeLine(ctx, `${pc.green("✓")} Preview discarded.`);
299
- }
300
- else {
301
- throw new Error(`Unknown preview action "${action}". Use promote | discard.`);
302
- }
303
- });
304
- cli
305
- .command("domains <action> [domain]", "Manage custom domains (add | verify | list | remove)")
306
- .option("--app <name>", "App name (overrides percher.toml)")
307
- .action(async (action, domain, options) => {
308
- const ctx = ctxOverride ?? (await createCliContext());
309
- if (action === "add") {
310
- if (!domain)
311
- throw new Error("Domain is required. Usage: percher domains add <domain>");
312
- const result = await core.domainAdd(ctx, { app: options.app, domain });
313
- await writeLine(ctx, `${pc.green("✓")} Domain ${result.domain} added.`);
314
- await writeLine(ctx, "");
315
- await writeLine(ctx, "Add these DNS records:");
316
- await writeLine(ctx, ` TXT ${result.dnsInstructions.txt.name} ${result.dnsInstructions.txt.value}`);
317
- await writeLine(ctx, ` CNAME ${result.domain} ${result.dnsInstructions.cname.value}`);
318
- if (result.dnsInstructions.a) {
319
- await writeLine(ctx, ` A ${result.domain} ${result.dnsInstructions.a.values.join(", ")}`);
320
- }
321
- await writeLine(ctx, "");
322
- await writeLine(ctx, "Then run:");
323
- await writeLine(ctx, ` percher domains verify ${result.domain}${options.app ? ` --app ${options.app}` : ""}`);
324
- }
325
- else if (action === "verify") {
326
- if (!domain)
327
- throw new Error("Domain is required. Usage: percher domains verify <domain>");
328
- const result = await core.domainVerify(ctx, { app: options.app, domain });
329
- if (result.status === "verified") {
330
- await writeLine(ctx, `${pc.green("✓")} Domain verified. ${result.domain} is now live.`);
331
- }
332
- else {
333
- await writeLine(ctx, `${pc.yellow("!")} ${result.domain}: ${result.failureReason}`);
334
- }
335
- }
336
- else if (action === "list") {
337
- const list = await core.domainList(ctx, { app: options.app });
338
- if (list.length === 0) {
339
- await writeLine(ctx, "No custom domains.");
340
- }
341
- else {
342
- for (const d of list) {
343
- await writeLine(ctx, `${d.domain.padEnd(40)} ${d.status}`);
344
- }
345
- }
346
- }
347
- else if (action === "remove") {
348
- if (!domain)
349
- throw new Error("Domain is required. Usage: percher domains remove <domain>");
350
- await core.domainRemove(ctx, { app: options.app, domain });
351
- await writeLine(ctx, `${pc.green("✓")} Domain removed.`);
352
- }
353
- else {
354
- throw new Error(`Unknown domains action "${action}". Use add | verify | list | remove.`);
355
- }
356
- });
357
- cli
358
- .command("resume [app]", "Resume an app suspended for inactivity")
359
- .action(async (app) => {
360
- const ctx = ctxOverride ?? (await createCliContext());
361
- const result = await core.resume(ctx, { app });
362
- await writeLine(ctx, `${pc.green("✓")} ${result.message}`);
363
- });
364
- cli.command("whoami", "Show the signed-in user").action(async () => {
365
- const ctx = ctxOverride ?? (await createCliContext());
366
- const me = await core.whoami(ctx);
367
- await writeLine(ctx, `Signed in as ${me.email} (${me.userId})`);
368
- });
369
- cli.help();
370
- cli.version(VERSION);
371
- try {
372
- cli.parse(["percher", "percher", ...argv], { run: false });
373
- await cli.runMatchedCommand();
374
- return 0;
375
- }
376
- catch (err) {
377
- // Doctor prints its own output — just exit 1 without extra error message
378
- if (err instanceof DoctorFailedError)
379
- return 1;
380
- const ctx = ctxOverride ?? (await createCliContext());
381
- await renderError(ctx.stderr, err);
382
- return 1;
383
- }
384
- }
385
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/open.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare function openUrl(url: string): Promise<void>;
2
- //# sourceMappingURL=open.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../src/open.ts"],"names":[],"mappings":"AAEA,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUxD"}