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.
- package/LICENSE +132 -0
- package/THIRD-PARTY-NOTICES.txt +1228 -0
- package/dist/bin/percher.js +64487 -72732
- package/dist/package.json +10 -8
- package/dist/src/commands/account.js +5 -5
- package/dist/src/commands/account.js.map +1 -1
- package/dist/src/commands/admin.d.ts.map +1 -1
- package/dist/src/commands/admin.js +180 -15
- package/dist/src/commands/admin.js.map +1 -1
- package/dist/src/commands/analytics.js +1 -1
- package/dist/src/commands/apps.d.ts.map +1 -1
- package/dist/src/commands/apps.js +5 -5
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth.js +1 -1
- package/dist/src/commands/data.js +1 -1
- package/dist/src/commands/deploys.d.ts.map +1 -1
- package/dist/src/commands/deploys.js +24 -2
- package/dist/src/commands/deploys.js.map +1 -1
- package/dist/src/commands/env.js +3 -3
- package/dist/src/commands/export.js +1 -1
- package/dist/src/commands/github.js +1 -1
- package/dist/src/commands/hooks.js +1 -1
- package/dist/src/commands/migrate.js +1 -1
- package/dist/src/commands/sharing.js +1 -1
- package/dist/src/commands/status.js +1 -1
- package/dist/src/commands/token.js +1 -1
- package/dist/src/commands/transfers.js +1 -1
- package/dist/src/context.js +3 -3
- package/dist/src/index.js +21 -21
- package/dist/src/version-check.d.ts +2 -0
- package/dist/src/version-check.d.ts.map +1 -1
- package/dist/src/version-check.js +23 -2
- package/dist/src/version-check.js.map +1 -1
- package/dist/templates/LICENSE +14 -0
- package/dist/templates/astro/Dockerfile +51 -35
- package/dist/templates/astro/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/bun/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/capsule/Dockerfile +30 -12
- package/dist/templates/capsule/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/django/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/django/percher.toml +1 -0
- package/dist/templates/dotnet/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/eleventy/Dockerfile +51 -35
- package/dist/templates/eleventy/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/elysia/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/express/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/express/package.json +2 -1
- package/dist/templates/fastify/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/fastify/package.json +2 -1
- package/dist/templates/flask/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/flask/percher.toml +1 -0
- package/dist/templates/flask/requirements.txt +1 -0
- package/dist/templates/go/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/hono/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/hono/index.ts +4 -2
- package/dist/templates/hono/package.json +3 -1
- package/dist/templates/htmx/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/htmx/package.json +1 -1
- package/dist/templates/hugo/Dockerfile +49 -33
- package/dist/templates/hugo/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/java/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/laravel/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/nextjs/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/node/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/nuxt/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/phoenix/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/preact/Dockerfile +51 -35
- package/dist/templates/preact/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/python/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/rails/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/remix/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/remix/app/routes/health.tsx +3 -1
- package/dist/templates/rust/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/solid/Dockerfile +51 -35
- package/dist/templates/solid/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/static/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/sveltekit/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/sveltekit/package.json +1 -1
- package/dist/templates/vite-react/Dockerfile +51 -35
- package/dist/templates/vite-react/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/dist/templates/vite-vue/Dockerfile +51 -35
- package/dist/templates/vite-vue/PERCHER-TEMPLATE-LICENSE.txt +14 -0
- package/package.json +10 -8
- package/dist/context.d.ts +0 -3
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js +0 -31
- package/dist/context.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -385
- package/dist/index.js.map +0 -1
- package/dist/open.d.ts +0 -2
- package/dist/open.d.ts.map +0 -1
- package/dist/open.js +0 -16
- package/dist/open.js.map +0 -1
- package/dist/output.d.ts +0 -2
- package/dist/output.d.ts.map +0 -1
- package/dist/output.js +0 -44
- package/dist/output.js.map +0 -1
- package/dist/prompt.d.ts +0 -4
- package/dist/prompt.d.ts.map +0 -1
- package/dist/prompt.js +0 -14
- 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
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
&&
|
|
26
|
-
&&
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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.
|
|
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.
|
|
31
|
-
"@percher/core": "^0.
|
|
32
|
-
"@percher/toml": "^0.
|
|
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
package/dist/context.d.ts.map
DELETED
|
@@ -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
|
package/dist/context.js.map
DELETED
|
@@ -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
package/dist/index.d.ts.map
DELETED
|
@@ -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
package/dist/open.d.ts.map
DELETED
|
@@ -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"}
|