percher 0.5.24 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +132 -0
- package/THIRD-PARTY-NOTICES.txt +1228 -0
- package/dist/bin/percher.js +64485 -72730
- 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.js +2 -2
- 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/_site /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.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { serve } from "@hono/node-server";
|
|
1
2
|
import { Hono } from "hono";
|
|
2
3
|
|
|
3
4
|
const app = new Hono();
|
|
@@ -6,7 +7,8 @@ app.get("/health", (c) => c.json({ status: "ok" }));
|
|
|
6
7
|
|
|
7
8
|
app.get("/", (c) => c.text("Hello from __APP_NAME__!"));
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
serve({
|
|
11
|
+
hostname: "0.0.0.0",
|
|
10
12
|
port: Number(process.env.PORT ?? 3000),
|
|
11
13
|
fetch: app.fetch,
|
|
12
|
-
};
|
|
14
|
+
});
|
|
@@ -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.
|
|
@@ -1,33 +1,49 @@
|
|
|
1
|
-
# Multi-stage build: Hugo compiles the site, then a minimal Caddy
|
|
2
|
-
# image serves it. runtime = "docker" because Percher's static runtime
|
|
3
|
-
# serves pre-built files only — it does not run Hugo. Edit and own freely.
|
|
4
|
-
|
|
5
|
-
# --- Build stage: compile the Hugo site ------------------------------
|
|
6
|
-
FROM hugomods/hugo:exts-0.139.4 AS build
|
|
7
|
-
WORKDIR /site
|
|
8
|
-
COPY . .
|
|
9
|
-
RUN hugo --minify
|
|
10
|
-
|
|
11
|
-
# --- Serve stage: minimal Caddy image --------------------------------
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
&&
|
|
24
|
-
&&
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
1
|
+
# Multi-stage build: Hugo compiles the site, then a minimal Caddy
|
|
2
|
+
# image serves it. runtime = "docker" because Percher's static runtime
|
|
3
|
+
# serves pre-built files only — it does not run Hugo. Edit and own freely.
|
|
4
|
+
|
|
5
|
+
# --- Build stage: compile the Hugo site ------------------------------
|
|
6
|
+
FROM hugomods/hugo:exts-0.139.4 AS build
|
|
7
|
+
WORKDIR /site
|
|
8
|
+
COPY . .
|
|
9
|
+
RUN hugo --minify
|
|
10
|
+
|
|
11
|
+
# --- Serve stage: minimal Caddy image --------------------------------
|
|
12
|
+
# Build pinned Caddy source with refreshed security modules. The scratch
|
|
13
|
+
# runtime carries no shell, package manager, or file capabilities and listens
|
|
14
|
+
# on the unprivileged port :8080.
|
|
15
|
+
FROM golang:1.26.7-alpine3.23@sha256:b17af760035fc2f338eed92d448a6c67f2d45438844fc6c60678fa5f99e44b57 AS caddy-source
|
|
16
|
+
ADD --checksum=sha256:78e660d838e45c0b8c89338b325946238f153641aa9925df9ef2ad5e8eced31b \
|
|
17
|
+
https://github.com/caddyserver/caddy/commit/b2693fb63a30e6d7be0972c3645e9a2c0a500e93.patch /tmp/caddy-cel-go.patch
|
|
18
|
+
RUN go mod download github.com/caddyserver/caddy/v2@v2.11.4 \
|
|
19
|
+
&& cp -R /go/pkg/mod/github.com/caddyserver/caddy/v2@v2.11.4 /src \
|
|
20
|
+
&& chmod -R u+w /src
|
|
21
|
+
WORKDIR /src
|
|
22
|
+
RUN apk add --no-cache patch \
|
|
23
|
+
&& patch -p1 < /tmp/caddy-cel-go.patch \
|
|
24
|
+
&& go get github.com/go-chi/chi/v5@v5.3.0 github.com/google/cel-go@v0.29.2 \
|
|
25
|
+
github.com/klauspost/compress@v1.18.7 go.opentelemetry.io/otel@v1.44.0 \
|
|
26
|
+
golang.org/x/crypto@v0.55.0 golang.org/x/net@v0.58.0 \
|
|
27
|
+
golang.org/x/text@v0.41.0 google.golang.org/grpc@v1.83.2 \
|
|
28
|
+
&& go mod tidy \
|
|
29
|
+
&& CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o /out/caddy ./cmd/caddy \
|
|
30
|
+
&& printf '%s\n' \
|
|
31
|
+
'package main' \
|
|
32
|
+
'import ("net/http"; "os"; "time")' \
|
|
33
|
+
'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) } }' \
|
|
34
|
+
> /tmp/percher-healthcheck.go \
|
|
35
|
+
&& CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o /out/percher-healthcheck /tmp/percher-healthcheck.go
|
|
36
|
+
FROM scratch
|
|
37
|
+
COPY --from=caddy-source /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
|
|
38
|
+
COPY --from=caddy-source /out/caddy /usr/bin/caddy
|
|
39
|
+
COPY --from=caddy-source /out/percher-healthcheck /usr/bin/percher-healthcheck
|
|
40
|
+
COPY Caddyfile /etc/caddy/Caddyfile
|
|
41
|
+
COPY --from=build /site/public /srv
|
|
42
|
+
LABEL dev.percher.health-client="static-http-v1"
|
|
43
|
+
# HOME points at the writable tmpfs so non-root Caddy can persist its
|
|
44
|
+
# XDG state (storage-clean lock, config autosave) under Percher's
|
|
45
|
+
# read-only root filesystem.
|
|
46
|
+
ENV HOME=/tmp
|
|
47
|
+
USER 10001:10001
|
|
48
|
+
EXPOSE 8080
|
|
49
|
+
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.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -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.
|