From e79ff3028051a58ae813ddcc930bad089d36236d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Wed, 5 Mar 2025 08:43:31 +0100 Subject: [PATCH 01/15] ci: include version in BuildInfo and Prometheus metrics --- .dockerignore | 23 +++++++++-------------- .gitignore | 1 + Dockerfile | 30 ++++++++++++++---------------- alpine.Dockerfile | 29 +++++++++++++---------------- static-builder.Dockerfile | 6 ++---- 5 files changed, 39 insertions(+), 50 deletions(-) diff --git a/.dockerignore b/.dockerignore index 39f5c2235..8a1f3ecc1 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,14 +1,9 @@ -# ignored -**/* - -# authorized -!**/Caddyfile -!**/*.go -!**/go.* -!**/*.c -!**/*.h -!testdata/*.php -!testdata/*.txt -!build-static.sh -!app.tar -!app_checksum.txt +/caddy/frankenphp/frankenphp +/internal/testserver/testserver +/internal/testcli/testcli +/dist +.idea/ +.vscode/ +__debug_bin +frankenphp.test +caddy/frankenphp/Build diff --git a/.gitignore b/.gitignore index e61ecb619..8a1f3ecc1 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ .vscode/ __debug_bin frankenphp.test +caddy/frankenphp/Build diff --git a/Dockerfile b/Dockerfile index 24312888d..b79737c8f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -62,6 +62,7 @@ ENV PATH=/usr/local/go/bin:$PATH RUN apt-get update && \ apt-get -y --no-install-recommends install \ cmake \ + git \ libargon2-dev \ libbrotli-dev \ libcurl4-openssl-dev \ @@ -75,21 +76,6 @@ RUN apt-get update && \ && \ apt-get clean -WORKDIR /go/src/app - -COPY --link go.mod go.sum ./ -RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get - -WORKDIR /go/src/app/caddy -COPY --link caddy/go.mod caddy/go.sum ./ -RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get - -WORKDIR /go/src/app -COPY --link *.* ./ -COPY --link caddy caddy -COPY --link internal internal -COPY --link testdata testdata - # Install e-dant/watcher (necessary for file watching) WORKDIR /usr/local/src/watcher RUN curl -s https://api.github.com/repos/e-dant/watcher/releases/latest | \ @@ -104,6 +90,18 @@ RUN curl -s https://api.github.com/repos/e-dant/watcher/releases/latest | \ cmake --install build && \ ldconfig +WORKDIR /go/src/app + +COPY --link go.mod go.sum ./ +RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get + +WORKDIR /go/src/app/caddy +COPY --link caddy/go.mod caddy/go.sum ./ +RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get + +WORKDIR /go/src/app +ADD --link . ./ + # See https://github.com/docker-library/php/blob/master/8.3/bookworm/zts/Dockerfile#L57-L59 for PHP values ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" ENV CGO_CPPFLAGS=$PHP_CPPFLAGS @@ -112,7 +110,7 @@ ENV CGO_LDFLAGS="-L/usr/local/lib -lssl -lcrypto -lreadline -largon2 -lcurl -lon RUN echo $CGO_LDFLAGS WORKDIR /go/src/app/caddy/frankenphp -RUN GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" && \ +RUN git status && GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" -buildvcs=true && \ setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp && \ cp Caddyfile /etc/caddy/Caddyfile && \ frankenphp version diff --git a/alpine.Dockerfile b/alpine.Dockerfile index ff981a57b..c20c23cce 100644 --- a/alpine.Dockerfile +++ b/alpine.Dockerfile @@ -82,21 +82,6 @@ RUN apk add --no-cache --virtual .build-deps \ sqlite-dev \ upx -WORKDIR /go/src/app - -COPY --link go.mod go.sum ./ -RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get - -WORKDIR /go/src/app/caddy -COPY caddy/go.mod caddy/go.sum ./ -RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get - -WORKDIR /go/src/app -COPY --link *.* ./ -COPY --link caddy caddy -COPY --link internal internal -COPY --link testdata testdata - # Install e-dant/watcher (necessary for file watching) WORKDIR /usr/local/src/watcher RUN curl -s https://api.github.com/repos/e-dant/watcher/releases/latest | \ @@ -110,13 +95,25 @@ RUN curl -s https://api.github.com/repos/e-dant/watcher/releases/latest | \ cmake --build build && \ cmake --install build +WORKDIR /go/src/app + +COPY --link go.mod go.sum ./ +RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get + +WORKDIR /go/src/app/caddy +COPY caddy/go.mod caddy/go.sum ./ +RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get + +WORKDIR /go/src/app +ADD --link . ./ + # See https://github.com/docker-library/php/blob/master/8.3/alpine3.20/zts/Dockerfile#L53-L55 ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" ENV CGO_CPPFLAGS=$PHP_CPPFLAGS ENV CGO_LDFLAGS="-lssl -lcrypto -lreadline -largon2 -lcurl -lonig -lz $PHP_LDFLAGS" WORKDIR /go/src/app/caddy/frankenphp -RUN GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -extldflags '-Wl,-z,stack-size=0x80000' -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" && \ +RUN GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -extldflags '-Wl,-z,stack-size=0x80000' -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" -buildvcs=true && \ setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp && \ ([ -z "${NO_COMPRESS}" ] && upx --best /usr/local/bin/frankenphp || true) && \ frankenphp version diff --git a/static-builder.Dockerfile b/static-builder.Dockerfile index cc5971e09..2f76f8f98 100644 --- a/static-builder.Dockerfile +++ b/static-builder.Dockerfile @@ -88,9 +88,7 @@ COPY caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -COPY --link *.* ./ -COPY --link caddy caddy -COPY --link internal internal +ADD --link . ./ -RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./build-static.sh && \ +RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./build-static.sh && git status \ rm -Rf dist/static-php-cli/source/* From 991042c1f32785ac4994cd6c79d0aa23e3810354 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Wed, 5 Mar 2025 09:10:26 +0100 Subject: [PATCH 02/15] remove ADD --- Dockerfile | 2 +- alpine.Dockerfile | 2 +- static-builder.Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index b79737c8f..3612e08e7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -100,7 +100,7 @@ COPY --link caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -ADD --link . ./ +COPY --link . . # See https://github.com/docker-library/php/blob/master/8.3/bookworm/zts/Dockerfile#L57-L59 for PHP values ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" diff --git a/alpine.Dockerfile b/alpine.Dockerfile index c20c23cce..fb87b8015 100644 --- a/alpine.Dockerfile +++ b/alpine.Dockerfile @@ -105,7 +105,7 @@ COPY caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -ADD --link . ./ +COPY --link . . # See https://github.com/docker-library/php/blob/master/8.3/alpine3.20/zts/Dockerfile#L53-L55 ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" diff --git a/static-builder.Dockerfile b/static-builder.Dockerfile index 2f76f8f98..e82e8c202 100644 --- a/static-builder.Dockerfile +++ b/static-builder.Dockerfile @@ -88,7 +88,7 @@ COPY caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -ADD --link . ./ +COPY --link . . RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./build-static.sh && git status \ rm -Rf dist/static-php-cli/source/* From 48ba89f0bba8cd8f21da5fef0446a74d8e7caffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Wed, 5 Mar 2025 13:47:06 +0100 Subject: [PATCH 03/15] fix --- Dockerfile | 4 ++-- alpine.Dockerfile | 2 +- static-builder.Dockerfile | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3612e08e7..ea76bb7f0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -100,7 +100,7 @@ COPY --link caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -COPY --link . . +ADD --link . ./ # See https://github.com/docker-library/php/blob/master/8.3/bookworm/zts/Dockerfile#L57-L59 for PHP values ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" @@ -110,7 +110,7 @@ ENV CGO_LDFLAGS="-L/usr/local/lib -lssl -lcrypto -lreadline -largon2 -lcurl -lon RUN echo $CGO_LDFLAGS WORKDIR /go/src/app/caddy/frankenphp -RUN git status && GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" -buildvcs=true && \ +RUN GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" -buildvcs=true && \ setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp && \ cp Caddyfile /etc/caddy/Caddyfile && \ frankenphp version diff --git a/alpine.Dockerfile b/alpine.Dockerfile index fb87b8015..c20c23cce 100644 --- a/alpine.Dockerfile +++ b/alpine.Dockerfile @@ -105,7 +105,7 @@ COPY caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -COPY --link . . +ADD --link . ./ # See https://github.com/docker-library/php/blob/master/8.3/alpine3.20/zts/Dockerfile#L53-L55 ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" diff --git a/static-builder.Dockerfile b/static-builder.Dockerfile index e82e8c202..e8c289a32 100644 --- a/static-builder.Dockerfile +++ b/static-builder.Dockerfile @@ -88,7 +88,7 @@ COPY caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -COPY --link . . +ADD --link . ./ -RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./build-static.sh && git status \ +RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./build-static.sh && git status && \ rm -Rf dist/static-php-cli/source/* From ff852472d1adcd885f4e76ef61d285d61f920d35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Mon, 10 Mar 2025 13:29:59 +0100 Subject: [PATCH 04/15] wip --- Dockerfile | 6 +++--- alpine.Dockerfile | 2 +- static-builder.Dockerfile | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index ea76bb7f0..b3aa78838 100644 --- a/Dockerfile +++ b/Dockerfile @@ -61,8 +61,8 @@ ENV PATH=/usr/local/go/bin:$PATH # This is required to link the FrankenPHP binary to the PHP binary RUN apt-get update && \ apt-get -y --no-install-recommends install \ - cmake \ - git \ + cmake \ + git \ libargon2-dev \ libbrotli-dev \ libcurl4-openssl-dev \ @@ -100,7 +100,7 @@ COPY --link caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -ADD --link . ./ +COPY --link . ./ # See https://github.com/docker-library/php/blob/master/8.3/bookworm/zts/Dockerfile#L57-L59 for PHP values ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" diff --git a/alpine.Dockerfile b/alpine.Dockerfile index c20c23cce..ba4b06323 100644 --- a/alpine.Dockerfile +++ b/alpine.Dockerfile @@ -105,7 +105,7 @@ COPY caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -ADD --link . ./ +COPY --link . ./ # See https://github.com/docker-library/php/blob/master/8.3/alpine3.20/zts/Dockerfile#L53-L55 ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" diff --git a/static-builder.Dockerfile b/static-builder.Dockerfile index e8c289a32..7bc79c729 100644 --- a/static-builder.Dockerfile +++ b/static-builder.Dockerfile @@ -88,7 +88,7 @@ COPY caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -ADD --link . ./ +COPY --link . ./ -RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./build-static.sh && git status && \ +RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./build-static.sh && \ rm -Rf dist/static-php-cli/source/* From 409c0fdf5fb2fe5d06c0460571239debf12e5ca2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Mon, 10 Mar 2025 15:35:17 +0100 Subject: [PATCH 05/15] chore: bump deps (#1434) --- caddy/go.mod | 14 +++++++------- caddy/go.sum | 23 ++++++++++++++--------- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- 4 files changed, 33 insertions(+), 28 deletions(-) diff --git a/caddy/go.mod b/caddy/go.mod index f13da27e8..6f463bd6d 100644 --- a/caddy/go.mod +++ b/caddy/go.mod @@ -15,7 +15,7 @@ require ( github.com/dunglas/frankenphp v1.4.4 github.com/dunglas/mercure/caddy v0.18.4 github.com/dunglas/vulcain/caddy v1.1.1 - github.com/prometheus/client_golang v1.21.0 + github.com/prometheus/client_golang v1.21.1 github.com/spf13/cobra v1.9.1 github.com/stretchr/testify v1.10.0 go.uber.org/zap v1.27.0 @@ -185,16 +185,16 @@ require ( go.uber.org/mock v0.5.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap/exp v0.3.0 // indirect - golang.org/x/crypto v0.33.0 // indirect + golang.org/x/crypto v0.36.0 // indirect golang.org/x/crypto/x509roots/fallback v0.0.0-20250214233241-911360c8a4f4 // indirect golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa // indirect golang.org/x/mod v0.23.0 // indirect - golang.org/x/net v0.35.0 // indirect + golang.org/x/net v0.37.0 // indirect golang.org/x/oauth2 v0.26.0 // indirect - golang.org/x/sync v0.11.0 // indirect - golang.org/x/sys v0.30.0 // indirect - golang.org/x/term v0.29.0 // indirect - golang.org/x/text v0.22.0 // indirect + golang.org/x/sync v0.12.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/term v0.30.0 // indirect + golang.org/x/text v0.23.0 // indirect golang.org/x/time v0.10.0 // indirect golang.org/x/tools v0.30.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a // indirect diff --git a/caddy/go.sum b/caddy/go.sum index a963d6f48..af12c1a68 100644 --- a/caddy/go.sum +++ b/caddy/go.sum @@ -390,8 +390,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.21.0 h1:DIsaGmiaBkSangBgMtWdNfxbMNdku5IK6iNhrEqWvdA= -github.com/prometheus/client_golang v1.21.0/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= +github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk= +github.com/prometheus/client_golang v1.21.1/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= @@ -610,8 +610,9 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= -golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= +golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= golang.org/x/crypto/x509roots/fallback v0.0.0-20250214233241-911360c8a4f4 h1:QDiVWrFJ2lyXzr3pJnIREQWR8S7jkjzuWJPJda8Ic8E= golang.org/x/crypto/x509roots/fallback v0.0.0-20250214233241-911360c8a4f4/go.mod h1:lxN5T34bK4Z/i6cMaU7frUU57VkDXFD4Kamfl/cp9oU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -643,8 +644,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= -golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= +golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -663,8 +664,9 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -687,8 +689,9 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -698,8 +701,9 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= -golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= +golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= +golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -710,8 +714,9 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4= diff --git a/go.mod b/go.mod index 0e1126bcf..f353a5a1c 100644 --- a/go.mod +++ b/go.mod @@ -8,10 +8,10 @@ retract v1.0.0-rc.1 // Human error require ( github.com/maypok86/otter v1.2.4 - github.com/prometheus/client_golang v1.21.0 + github.com/prometheus/client_golang v1.21.1 github.com/stretchr/testify v1.10.0 go.uber.org/zap v1.27.0 - golang.org/x/net v0.35.0 + golang.org/x/net v0.37.0 ) require ( @@ -27,8 +27,8 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/sys v0.30.0 // indirect - golang.org/x/text v0.22.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/text v0.23.0 // indirect google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 8011bb41b..c59ba1b1e 100644 --- a/go.sum +++ b/go.sum @@ -22,8 +22,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.21.0 h1:DIsaGmiaBkSangBgMtWdNfxbMNdku5IK6iNhrEqWvdA= -github.com/prometheus/client_golang v1.21.0/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= +github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk= +github.com/prometheus/client_golang v1.21.1/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= @@ -40,12 +40,12 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= -golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= +golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 2324339cebbe35ec498feabd97731ab2442be896 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Mon, 10 Mar 2025 16:06:21 +0100 Subject: [PATCH 06/15] build info logs --- .github/workflows/static.yaml | 2 ++ Dockerfile | 6 ++++-- alpine.Dockerfile | 6 ++++-- build-static.sh | 1 + 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/static.yaml b/.github/workflows/static.yaml index 62b3cfbbe..8b32cc9b6 100644 --- a/.github/workflows/static.yaml +++ b/.github/workflows/static.yaml @@ -168,6 +168,7 @@ jobs: - name: Run sanity checks run: | "${BINARY}" version + "${BINARY}" build-info "${BINARY}" list-modules | grep frankenphp "${BINARY}" list-modules | grep http.encoders.br "${BINARY}" list-modules | grep http.handlers.mercure @@ -262,6 +263,7 @@ jobs: - name: Run sanity checks run: | "${BINARY}" version + "${BINARY}" build-info "${BINARY}" list-modules | grep frankenphp "${BINARY}" list-modules | grep http.encoders.br "${BINARY}" list-modules | grep http.handlers.mercure diff --git a/Dockerfile b/Dockerfile index b3aa78838..a1e804153 100644 --- a/Dockerfile +++ b/Dockerfile @@ -113,7 +113,8 @@ WORKDIR /go/src/app/caddy/frankenphp RUN GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" -buildvcs=true && \ setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp && \ cp Caddyfile /etc/caddy/Caddyfile && \ - frankenphp version + frankenphp version && \ + frankenphp build-info WORKDIR /go/src/app @@ -131,4 +132,5 @@ RUN apt-get install -y --no-install-recommends libstdc++6 && \ COPY --from=builder /usr/local/bin/frankenphp /usr/local/bin/frankenphp RUN setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp && \ - frankenphp version + frankenphp version && \ + frankenphp build-info diff --git a/alpine.Dockerfile b/alpine.Dockerfile index ba4b06323..7089ce93a 100644 --- a/alpine.Dockerfile +++ b/alpine.Dockerfile @@ -116,7 +116,8 @@ WORKDIR /go/src/app/caddy/frankenphp RUN GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -extldflags '-Wl,-z,stack-size=0x80000' -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" -buildvcs=true && \ setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp && \ ([ -z "${NO_COMPRESS}" ] && upx --best /usr/local/bin/frankenphp || true) && \ - frankenphp version + frankenphp version && \ + frankenphp build-info WORKDIR /go/src/app @@ -132,4 +133,5 @@ RUN apk add --no-cache libstdc++ && \ COPY --from=builder /usr/local/bin/frankenphp /usr/local/bin/frankenphp RUN setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp && \ - frankenphp version + frankenphp version && \ + frankenphp build-info diff --git a/build-static.sh b/build-static.sh index 5005a5365..517a82988 100755 --- a/build-static.sh +++ b/build-static.sh @@ -323,6 +323,7 @@ if type "upx" >/dev/null 2>&1 && [ -z "${DEBUG_SYMBOLS}" ] && [ -z "${NO_COMPRES fi "dist/${bin}" version +"dist/${bin}" build-info if [ -n "${RELEASE}" ]; then gh release upload "v${FRANKENPHP_VERSION}" "dist/${bin}" --repo dunglas/frankenphp --clobber From 8d9ce158499eb4a6bee66799ef778734aff05144 Mon Sep 17 00:00:00 2001 From: Alexander Stecher <45872305+AlliBalliBaba@users.noreply.github.com> Date: Mon, 10 Mar 2025 22:49:58 +0100 Subject: [PATCH 07/15] fix: log worker failures (#1437) * Small fixes on error. * Adds comments. --------- Co-authored-by: Alliballibaba --- frankenphp.go | 8 +++++++- threadworker.go | 17 +++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/frankenphp.go b/frankenphp.go index f8012730a..48f71be38 100644 --- a/frankenphp.go +++ b/frankenphp.go @@ -405,6 +405,7 @@ func go_ub_write(threadIndex C.uintptr_t, cBuf *C.char, length C.int) (C.size_t, } if fc.responseWriter == nil { + // probably starting a worker script, log the output fc.logger.Info(writer.(*bytes.Buffer).String()) } @@ -466,10 +467,15 @@ func addHeader(fc *frankenPHPContext, cString *C.char, length C.int) { func go_write_headers(threadIndex C.uintptr_t, status C.int, headers *C.zend_llist) C.bool { fc := phpThreads[threadIndex].getRequestContext() - if fc.isDone || fc.responseWriter == nil { + if fc.isDone { return C.bool(false) } + if fc.responseWriter == nil { + // probably starting a worker script, pretend we wrote headers so PHP still calls ub_write + return C.bool(true) + } + current := headers.head for current != nil { h := (*C.sapi_header_struct)(unsafe.Pointer(&(current.data))) diff --git a/threadworker.go b/threadworker.go index b0643d292..3c7982736 100644 --- a/threadworker.go +++ b/threadworker.go @@ -112,7 +112,7 @@ func tearDownWorkerScript(handler *workerThread, exitStatus int) { } // on exit status 0 we just run the worker script again - if exitStatus == 0 { + if exitStatus == 0 && !handler.isBootingScript { // TODO: make the max restart configurable metrics.StopWorker(worker.fileName, StopReasonRestart) handler.backoff.recordSuccess() @@ -122,10 +122,19 @@ func tearDownWorkerScript(handler *workerThread, exitStatus int) { return } - // on exit status 1 we apply an exponential backoff when restarting + // worker has thrown a fatal error or has not reached frankenphp_handle_request metrics.StopWorker(worker.fileName, StopReasonCrash) - if handler.isBootingScript && handler.backoff.recordFailure() { - if !watcherIsEnabled { + + if !handler.isBootingScript { + // fatal error (could be due to timeouts, etc.) + return + } + + logger.Error("worker script has not reached frankenphp_handle_request", zap.String("worker", worker.fileName)) + + // panic after exponential backoff if the worker has never reached frankenphp_handle_request + if handler.backoff.recordFailure() { + if !watcherIsEnabled && !handler.state.is(stateReady) { logger.Panic("too many consecutive worker failures", zap.String("worker", worker.fileName), zap.Int("failures", handler.backoff.failureCount)) } logger.Warn("many consecutive worker failures", zap.String("worker", worker.fileName), zap.Int("failures", handler.backoff.failureCount)) From a9cf944b62fb51edf87172c107b1131b7e1dbc2d Mon Sep 17 00:00:00 2001 From: Alexander Stecher <45872305+AlliBalliBaba@users.noreply.github.com> Date: Mon, 10 Mar 2025 22:59:18 +0100 Subject: [PATCH 08/15] ci: env test remediation (#1436) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * nbParallell * trigger build * Update frankenphp_test.go --------- Co-authored-by: Alliballibaba Co-authored-by: Kévin Dunglas --- frankenphp_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frankenphp_test.go b/frankenphp_test.go index 4d5e97779..731fa32e8 100644 --- a/frankenphp_test.go +++ b/frankenphp_test.go @@ -672,11 +672,12 @@ func TestFailingWorker(t *testing.T) { } func TestEnv(t *testing.T) { - testEnv(t, &testOptions{}) + testEnv(t, &testOptions{nbParallelRequests:1}) } func TestEnvWorker(t *testing.T) { - testEnv(t, &testOptions{workerScript: "env/test-env.php"}) + testEnv(t, &testOptions{nbParallelRequests:1, workerScript: "env/test-env.php"}) } +// testEnv cannot be run in parallel due to https://github.com/golang/go/issues/63567 func testEnv(t *testing.T, opts *testOptions) { assert.NoError(t, os.Setenv("EMPTY", "")) From 424ca426cb037b8f69467c14bbed6e142cd6466a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Tue, 11 Mar 2025 17:34:49 +0100 Subject: [PATCH 09/15] fix: timeouts handling on macOS (#1435) * ci: run tests on macOS * debug * debug * fix * nobrotli * install brotli * fix * fix * Also registers php.ini if ZEND_MAX_EXECUTION_TIMERS is disabled. * Removes max_execution_time from tests (it gets overwritten on mac) * tiny refacto * fix free * cs --------- Co-authored-by: Alliballibaba --- .github/workflows/tests.yaml | 39 +++++++++++++++++++++++++++++++++++- CONTRIBUTING.md | 9 +++------ caddy/caddy_test.go | 8 ++++---- frankenphp.c | 34 +++++++++---------------------- phpmainthread.go | 26 +++++++++++++++++------- 5 files changed, 74 insertions(+), 42 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 4efb0693a..f4ae6b883 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -14,7 +14,8 @@ on: permissions: contents: read jobs: - tests: + tests-linux: + name: Tests (Linux, PHP ${{ matrix.php-versions }}) runs-on: ubuntu-latest strategy: fail-fast: false @@ -71,3 +72,39 @@ jobs: if: matrix.php-versions == '8.4' with: version: latest + tests-mac: + name: Tests (macOS, PHP 8.4) + runs-on: macos-latest + env: + GOEXPERIMENT: cgocheck2 + HOMEBREW_NO_AUTO_UPDATE: 1 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version: "1.24" + cache-dependency-path: | + go.sum + caddy/go.sum + - uses: shivammathur/setup-php@v2 + with: + php-version: 8.4 + ini-file: development + coverage: none + tools: none + env: + phpts: ts + debug: true + - name: Set Set CGO flags + run: | + { + echo "CGO_CFLAGS=-I/opt/homebrew/include/ $(php-config --includes)" + echo "CGO_LDFLAGS=-L/opt/homebrew/lib/ $(php-config --ldflags) $(php-config --libs)" + } >> "${GITHUB_ENV}" + - name: Build + run: go build -tags nowatcher + - name: Run library tests + run: go test -tags nowatcher -race -v ./... + - name: Run Caddy module tests + working-directory: caddy/ + run: go test -tags nowatcher,nobadger,nomysql,nopgx -race -v ./... diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bf5c5ebdc..b7b7796e6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -149,16 +149,13 @@ docker buildx bake -f docker-bake.hcl --pull --no-cache --push 3. Enable `tmate` to connect to the container ```patch - - - name: Set CGO flags + - name: Set CGO flags run: echo "CGO_CFLAGS=$(php-config --includes)" >> "$GITHUB_ENV" - + - - + run: | + + - run: | + sudo apt install gdb + mkdir -p /home/runner/.config/gdb/ + printf "set auto-load safe-path /\nhandle SIG34 nostop noprint pass" > /home/runner/.config/gdb/gdbinit - + - - + uses: mxschmitt/action-tmate@v3 + + - uses: mxschmitt/action-tmate@v3 ``` 4. Connect to the container diff --git a/caddy/caddy_test.go b/caddy/caddy_test.go index 0d374f47f..2ff8bf207 100644 --- a/caddy/caddy_test.go +++ b/caddy/caddy_test.go @@ -660,7 +660,7 @@ func TestPHPIniConfiguration(t *testing.T) { frankenphp { num_threads 2 worker ../testdata/ini.php 1 - php_ini max_execution_time 100 + php_ini upload_max_filesize 100M php_ini memory_limit 10000000 } } @@ -673,7 +673,7 @@ func TestPHPIniConfiguration(t *testing.T) { } `, "caddyfile") - testSingleIniConfiguration(tester, "max_execution_time", "100") + testSingleIniConfiguration(tester, "upload_max_filesize", "100M") testSingleIniConfiguration(tester, "memory_limit", "10000000") } @@ -688,7 +688,7 @@ func TestPHPIniBlockConfiguration(t *testing.T) { frankenphp { num_threads 1 php_ini { - max_execution_time 15 + upload_max_filesize 100M memory_limit 20000000 } } @@ -702,7 +702,7 @@ func TestPHPIniBlockConfiguration(t *testing.T) { } `, "caddyfile") - testSingleIniConfiguration(tester, "max_execution_time", "15") + testSingleIniConfiguration(tester, "upload_max_filesize", "100M") testSingleIniConfiguration(tester, "memory_limit", "20000000") } diff --git a/frankenphp.c b/frankenphp.c index c4af6c2af..a20d40186 100644 --- a/frankenphp.c +++ b/frankenphp.c @@ -33,13 +33,6 @@ ZEND_TSRMLS_CACHE_DEFINE() #endif -/* Timeouts are currently fundamentally broken with ZTS except on Linux and - * FreeBSD: https://bugs.php.net/bug.php?id=79464 */ -#ifndef ZEND_MAX_EXECUTION_TIMERS -static const char HARDCODED_INI[] = "max_execution_time=0\n" - "max_input_time=-1\n\0"; -#endif - static const char *MODULES_TO_RELOAD[] = {"filter", "session", NULL}; frankenphp_version frankenphp_get_version() { @@ -900,25 +893,18 @@ static void *php_main(void *arg) { sapi_startup(&frankenphp_sapi_module); -#ifndef ZEND_MAX_EXECUTION_TIMERS -#if (PHP_VERSION_ID >= 80300) - frankenphp_sapi_module.ini_entries = HARDCODED_INI; +#ifdef ZEND_MAX_EXECUTION_TIMERS + /* overwrite php.ini with custom user settings */ + char *php_ini_overrides = go_get_custom_php_ini(false); #else - frankenphp_sapi_module.ini_entries = malloc(sizeof(HARDCODED_INI)); - if (frankenphp_sapi_module.ini_entries == NULL) { - perror("malloc failed"); - exit(EXIT_FAILURE); - } - memcpy(frankenphp_sapi_module.ini_entries, HARDCODED_INI, - sizeof(HARDCODED_INI)); + /* overwrite php.ini with custom user settings and disable + * max_execution_timers */ + char *php_ini_overrides = go_get_custom_php_ini(true); #endif -#else - /* overwrite php.ini with custom user settings */ - char *php_ini_overrides = go_get_custom_php_ini(); + if (php_ini_overrides != NULL) { frankenphp_sapi_module.ini_entries = php_ini_overrides; } -#endif frankenphp_sapi_module.startup(&frankenphp_sapi_module); @@ -938,13 +924,13 @@ static void *php_main(void *arg) { tsrm_shutdown(); #endif -#if (PHP_VERSION_ID < 80300) if (frankenphp_sapi_module.ini_entries) { - free(frankenphp_sapi_module.ini_entries); + free((char *)frankenphp_sapi_module.ini_entries); frankenphp_sapi_module.ini_entries = NULL; } -#endif + go_frankenphp_shutdown_main_thread(); + return NULL; } diff --git a/phpmainthread.go b/phpmainthread.go index 559c58964..7245db371 100644 --- a/phpmainthread.go +++ b/phpmainthread.go @@ -8,7 +8,7 @@ package frankenphp // #include "frankenphp.h" import "C" import ( - "fmt" + "strings" "sync" "github.com/dunglas/frankenphp/internal/memory" @@ -191,16 +191,28 @@ func go_frankenphp_shutdown_main_thread() { } //export go_get_custom_php_ini -func go_get_custom_php_ini() *C.char { +func go_get_custom_php_ini(disableTimeouts C.bool) *C.char { if mainThread.phpIni == nil { - return nil + mainThread.phpIni = make(map[string]string) } - // pass the php.ini overrides to PHP before startup + // Timeouts are currently fundamentally broken + // with ZTS except on Linux and FreeBSD: https://bugs.php.net/bug.php?id=79464 + // Disable timeouts if ZEND_MAX_EXECUTION_TIMERS is not supported + if disableTimeouts { + mainThread.phpIni["max_execution_time"] = "0" + mainThread.phpIni["max_input_time"] = "-1" + } + + // Pass the php.ini overrides to PHP before startup // TODO: if needed this would also be possible on a per-thread basis - overrides := "" + var overrides strings.Builder for k, v := range mainThread.phpIni { - overrides += fmt.Sprintf("%s=%s\n", k, v) + overrides.WriteString(k) + overrides.WriteByte('=') + overrides.WriteString(v) + overrides.WriteByte('\n') } - return C.CString(overrides) + + return C.CString(overrides.String()) } From 26ac9a1e547959b5cacb1f2488914e21f37ba5f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Wed, 5 Mar 2025 08:43:31 +0100 Subject: [PATCH 10/15] ci: include version in BuildInfo and Prometheus metrics --- .dockerignore | 23 +++++++++-------------- .gitignore | 1 + Dockerfile | 30 ++++++++++++++---------------- alpine.Dockerfile | 29 +++++++++++++---------------- static-builder.Dockerfile | 6 ++---- 5 files changed, 39 insertions(+), 50 deletions(-) diff --git a/.dockerignore b/.dockerignore index 39f5c2235..8a1f3ecc1 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,14 +1,9 @@ -# ignored -**/* - -# authorized -!**/Caddyfile -!**/*.go -!**/go.* -!**/*.c -!**/*.h -!testdata/*.php -!testdata/*.txt -!build-static.sh -!app.tar -!app_checksum.txt +/caddy/frankenphp/frankenphp +/internal/testserver/testserver +/internal/testcli/testcli +/dist +.idea/ +.vscode/ +__debug_bin +frankenphp.test +caddy/frankenphp/Build diff --git a/.gitignore b/.gitignore index e61ecb619..8a1f3ecc1 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ .vscode/ __debug_bin frankenphp.test +caddy/frankenphp/Build diff --git a/Dockerfile b/Dockerfile index 24312888d..b79737c8f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -62,6 +62,7 @@ ENV PATH=/usr/local/go/bin:$PATH RUN apt-get update && \ apt-get -y --no-install-recommends install \ cmake \ + git \ libargon2-dev \ libbrotli-dev \ libcurl4-openssl-dev \ @@ -75,21 +76,6 @@ RUN apt-get update && \ && \ apt-get clean -WORKDIR /go/src/app - -COPY --link go.mod go.sum ./ -RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get - -WORKDIR /go/src/app/caddy -COPY --link caddy/go.mod caddy/go.sum ./ -RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get - -WORKDIR /go/src/app -COPY --link *.* ./ -COPY --link caddy caddy -COPY --link internal internal -COPY --link testdata testdata - # Install e-dant/watcher (necessary for file watching) WORKDIR /usr/local/src/watcher RUN curl -s https://api.github.com/repos/e-dant/watcher/releases/latest | \ @@ -104,6 +90,18 @@ RUN curl -s https://api.github.com/repos/e-dant/watcher/releases/latest | \ cmake --install build && \ ldconfig +WORKDIR /go/src/app + +COPY --link go.mod go.sum ./ +RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get + +WORKDIR /go/src/app/caddy +COPY --link caddy/go.mod caddy/go.sum ./ +RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get + +WORKDIR /go/src/app +ADD --link . ./ + # See https://github.com/docker-library/php/blob/master/8.3/bookworm/zts/Dockerfile#L57-L59 for PHP values ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" ENV CGO_CPPFLAGS=$PHP_CPPFLAGS @@ -112,7 +110,7 @@ ENV CGO_LDFLAGS="-L/usr/local/lib -lssl -lcrypto -lreadline -largon2 -lcurl -lon RUN echo $CGO_LDFLAGS WORKDIR /go/src/app/caddy/frankenphp -RUN GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" && \ +RUN git status && GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" -buildvcs=true && \ setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp && \ cp Caddyfile /etc/caddy/Caddyfile && \ frankenphp version diff --git a/alpine.Dockerfile b/alpine.Dockerfile index ff981a57b..c20c23cce 100644 --- a/alpine.Dockerfile +++ b/alpine.Dockerfile @@ -82,21 +82,6 @@ RUN apk add --no-cache --virtual .build-deps \ sqlite-dev \ upx -WORKDIR /go/src/app - -COPY --link go.mod go.sum ./ -RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get - -WORKDIR /go/src/app/caddy -COPY caddy/go.mod caddy/go.sum ./ -RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get - -WORKDIR /go/src/app -COPY --link *.* ./ -COPY --link caddy caddy -COPY --link internal internal -COPY --link testdata testdata - # Install e-dant/watcher (necessary for file watching) WORKDIR /usr/local/src/watcher RUN curl -s https://api.github.com/repos/e-dant/watcher/releases/latest | \ @@ -110,13 +95,25 @@ RUN curl -s https://api.github.com/repos/e-dant/watcher/releases/latest | \ cmake --build build && \ cmake --install build +WORKDIR /go/src/app + +COPY --link go.mod go.sum ./ +RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get + +WORKDIR /go/src/app/caddy +COPY caddy/go.mod caddy/go.sum ./ +RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get + +WORKDIR /go/src/app +ADD --link . ./ + # See https://github.com/docker-library/php/blob/master/8.3/alpine3.20/zts/Dockerfile#L53-L55 ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" ENV CGO_CPPFLAGS=$PHP_CPPFLAGS ENV CGO_LDFLAGS="-lssl -lcrypto -lreadline -largon2 -lcurl -lonig -lz $PHP_LDFLAGS" WORKDIR /go/src/app/caddy/frankenphp -RUN GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -extldflags '-Wl,-z,stack-size=0x80000' -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" && \ +RUN GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -extldflags '-Wl,-z,stack-size=0x80000' -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" -buildvcs=true && \ setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp && \ ([ -z "${NO_COMPRESS}" ] && upx --best /usr/local/bin/frankenphp || true) && \ frankenphp version diff --git a/static-builder.Dockerfile b/static-builder.Dockerfile index cc5971e09..2f76f8f98 100644 --- a/static-builder.Dockerfile +++ b/static-builder.Dockerfile @@ -88,9 +88,7 @@ COPY caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -COPY --link *.* ./ -COPY --link caddy caddy -COPY --link internal internal +ADD --link . ./ -RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./build-static.sh && \ +RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./build-static.sh && git status \ rm -Rf dist/static-php-cli/source/* From 618f0ccd94bc8765a379f9dc5ce7178308479a48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Wed, 5 Mar 2025 09:10:26 +0100 Subject: [PATCH 11/15] remove ADD --- Dockerfile | 2 +- alpine.Dockerfile | 2 +- static-builder.Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index b79737c8f..3612e08e7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -100,7 +100,7 @@ COPY --link caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -ADD --link . ./ +COPY --link . . # See https://github.com/docker-library/php/blob/master/8.3/bookworm/zts/Dockerfile#L57-L59 for PHP values ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" diff --git a/alpine.Dockerfile b/alpine.Dockerfile index c20c23cce..fb87b8015 100644 --- a/alpine.Dockerfile +++ b/alpine.Dockerfile @@ -105,7 +105,7 @@ COPY caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -ADD --link . ./ +COPY --link . . # See https://github.com/docker-library/php/blob/master/8.3/alpine3.20/zts/Dockerfile#L53-L55 ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" diff --git a/static-builder.Dockerfile b/static-builder.Dockerfile index 2f76f8f98..e82e8c202 100644 --- a/static-builder.Dockerfile +++ b/static-builder.Dockerfile @@ -88,7 +88,7 @@ COPY caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -ADD --link . ./ +COPY --link . . RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./build-static.sh && git status \ rm -Rf dist/static-php-cli/source/* From 5793da05fc3373dbcd283b1eca18cc830db0081f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Wed, 5 Mar 2025 13:47:06 +0100 Subject: [PATCH 12/15] fix --- Dockerfile | 4 ++-- alpine.Dockerfile | 2 +- static-builder.Dockerfile | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3612e08e7..ea76bb7f0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -100,7 +100,7 @@ COPY --link caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -COPY --link . . +ADD --link . ./ # See https://github.com/docker-library/php/blob/master/8.3/bookworm/zts/Dockerfile#L57-L59 for PHP values ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" @@ -110,7 +110,7 @@ ENV CGO_LDFLAGS="-L/usr/local/lib -lssl -lcrypto -lreadline -largon2 -lcurl -lon RUN echo $CGO_LDFLAGS WORKDIR /go/src/app/caddy/frankenphp -RUN git status && GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" -buildvcs=true && \ +RUN GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" -buildvcs=true && \ setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp && \ cp Caddyfile /etc/caddy/Caddyfile && \ frankenphp version diff --git a/alpine.Dockerfile b/alpine.Dockerfile index fb87b8015..c20c23cce 100644 --- a/alpine.Dockerfile +++ b/alpine.Dockerfile @@ -105,7 +105,7 @@ COPY caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -COPY --link . . +ADD --link . ./ # See https://github.com/docker-library/php/blob/master/8.3/alpine3.20/zts/Dockerfile#L53-L55 ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" diff --git a/static-builder.Dockerfile b/static-builder.Dockerfile index e82e8c202..e8c289a32 100644 --- a/static-builder.Dockerfile +++ b/static-builder.Dockerfile @@ -88,7 +88,7 @@ COPY caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -COPY --link . . +ADD --link . ./ -RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./build-static.sh && git status \ +RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./build-static.sh && git status && \ rm -Rf dist/static-php-cli/source/* From 6cd3a8b515fa1bc07267161c6c7cb6abf689c0fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Mon, 10 Mar 2025 13:29:59 +0100 Subject: [PATCH 13/15] wip --- Dockerfile | 6 +++--- alpine.Dockerfile | 2 +- static-builder.Dockerfile | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index ea76bb7f0..b3aa78838 100644 --- a/Dockerfile +++ b/Dockerfile @@ -61,8 +61,8 @@ ENV PATH=/usr/local/go/bin:$PATH # This is required to link the FrankenPHP binary to the PHP binary RUN apt-get update && \ apt-get -y --no-install-recommends install \ - cmake \ - git \ + cmake \ + git \ libargon2-dev \ libbrotli-dev \ libcurl4-openssl-dev \ @@ -100,7 +100,7 @@ COPY --link caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -ADD --link . ./ +COPY --link . ./ # See https://github.com/docker-library/php/blob/master/8.3/bookworm/zts/Dockerfile#L57-L59 for PHP values ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" diff --git a/alpine.Dockerfile b/alpine.Dockerfile index c20c23cce..ba4b06323 100644 --- a/alpine.Dockerfile +++ b/alpine.Dockerfile @@ -105,7 +105,7 @@ COPY caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -ADD --link . ./ +COPY --link . ./ # See https://github.com/docker-library/php/blob/master/8.3/alpine3.20/zts/Dockerfile#L53-L55 ENV CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" diff --git a/static-builder.Dockerfile b/static-builder.Dockerfile index e8c289a32..7bc79c729 100644 --- a/static-builder.Dockerfile +++ b/static-builder.Dockerfile @@ -88,7 +88,7 @@ COPY caddy/go.mod caddy/go.sum ./ RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get WORKDIR /go/src/app -ADD --link . ./ +COPY --link . ./ -RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./build-static.sh && git status && \ +RUN --mount=type=secret,id=github-token GITHUB_TOKEN=$(cat /run/secrets/github-token) ./build-static.sh && \ rm -Rf dist/static-php-cli/source/* From 0a5ec3924276e2c6556eccb8cbc8f2915a6e5b8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Mon, 10 Mar 2025 16:06:21 +0100 Subject: [PATCH 14/15] build info logs --- .github/workflows/static.yaml | 2 ++ Dockerfile | 6 ++++-- alpine.Dockerfile | 6 ++++-- build-static.sh | 1 + 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/static.yaml b/.github/workflows/static.yaml index 62b3cfbbe..8b32cc9b6 100644 --- a/.github/workflows/static.yaml +++ b/.github/workflows/static.yaml @@ -168,6 +168,7 @@ jobs: - name: Run sanity checks run: | "${BINARY}" version + "${BINARY}" build-info "${BINARY}" list-modules | grep frankenphp "${BINARY}" list-modules | grep http.encoders.br "${BINARY}" list-modules | grep http.handlers.mercure @@ -262,6 +263,7 @@ jobs: - name: Run sanity checks run: | "${BINARY}" version + "${BINARY}" build-info "${BINARY}" list-modules | grep frankenphp "${BINARY}" list-modules | grep http.encoders.br "${BINARY}" list-modules | grep http.handlers.mercure diff --git a/Dockerfile b/Dockerfile index b3aa78838..a1e804153 100644 --- a/Dockerfile +++ b/Dockerfile @@ -113,7 +113,8 @@ WORKDIR /go/src/app/caddy/frankenphp RUN GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" -buildvcs=true && \ setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp && \ cp Caddyfile /etc/caddy/Caddyfile && \ - frankenphp version + frankenphp version && \ + frankenphp build-info WORKDIR /go/src/app @@ -131,4 +132,5 @@ RUN apt-get install -y --no-install-recommends libstdc++6 && \ COPY --from=builder /usr/local/bin/frankenphp /usr/local/bin/frankenphp RUN setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp && \ - frankenphp version + frankenphp version && \ + frankenphp build-info diff --git a/alpine.Dockerfile b/alpine.Dockerfile index ba4b06323..7089ce93a 100644 --- a/alpine.Dockerfile +++ b/alpine.Dockerfile @@ -116,7 +116,8 @@ WORKDIR /go/src/app/caddy/frankenphp RUN GOBIN=/usr/local/bin go install -tags 'nobadger,nomysql,nopgx' -ldflags "-w -s -extldflags '-Wl,-z,stack-size=0x80000' -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" -buildvcs=true && \ setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp && \ ([ -z "${NO_COMPRESS}" ] && upx --best /usr/local/bin/frankenphp || true) && \ - frankenphp version + frankenphp version && \ + frankenphp build-info WORKDIR /go/src/app @@ -132,4 +133,5 @@ RUN apk add --no-cache libstdc++ && \ COPY --from=builder /usr/local/bin/frankenphp /usr/local/bin/frankenphp RUN setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp && \ - frankenphp version + frankenphp version && \ + frankenphp build-info diff --git a/build-static.sh b/build-static.sh index 5005a5365..517a82988 100755 --- a/build-static.sh +++ b/build-static.sh @@ -323,6 +323,7 @@ if type "upx" >/dev/null 2>&1 && [ -z "${DEBUG_SYMBOLS}" ] && [ -z "${NO_COMPRES fi "dist/${bin}" version +"dist/${bin}" build-info if [ -n "${RELEASE}" ]; then gh release upload "v${FRANKENPHP_VERSION}" "dist/${bin}" --repo dunglas/frankenphp --clobber From 03b4542de1dc66698729f9a64dbf97c269d7557d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Wed, 12 Mar 2025 15:19:28 +0100 Subject: [PATCH 15/15] exclude *.log and .DS_Store --- .dockerignore | 2 ++ .gitignore | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.dockerignore b/.dockerignore index 8a1f3ecc1..16910ad23 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,8 +2,10 @@ /internal/testserver/testserver /internal/testcli/testcli /dist +.DS_Store .idea/ .vscode/ __debug_bin frankenphp.test caddy/frankenphp/Build +*.log diff --git a/.gitignore b/.gitignore index 8a1f3ecc1..16910ad23 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,10 @@ /internal/testserver/testserver /internal/testcli/testcli /dist +.DS_Store .idea/ .vscode/ __debug_bin frankenphp.test caddy/frankenphp/Build +*.log