diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 22a5c4bf9..62cf6d640 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -207,7 +207,7 @@ jobs: run: | docker run --platform=${{ matrix.platform }} --rm \ "$(jq -r '."builder-${{ matrix.variant }}"."containerimage.config.digest"' <<< "${METADATA}")" \ - sh -c 'go test ${{ matrix.race }} -v ./... && cd caddy && go test ${{ matrix.race }} -v ./...' + sh -c 'gotip test ${{ matrix.race }} -v ./... && cd caddy && gotip test ${{ matrix.race }} -v ./...' env: METADATA: ${{ steps.build.outputs.metadata }} # Adapted from https://docs.docker.com/build/ci/github-actions/multi-platform/ diff --git a/Dockerfile b/Dockerfile index a4b48ddee..837aedae8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -65,17 +65,21 @@ RUN apt-get update && \ libssl-dev \ libxml2-dev \ zlib1g-dev \ + # Needed by gotip + git \ && \ apt-get clean +RUN GOBIN=/usr/local/go/bin go install golang.org/dl/gotip@latest && gotip download + WORKDIR /go/src/app COPY --link go.mod go.sum ./ -RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get +RUN gotip mod graph | awk '{if ($1 !~ "@") print $2}' | xargs gotip 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 +RUN gotip mod graph | awk '{if ($1 !~ "@") print $2}' | xargs gotip get WORKDIR /go/src/app COPY --link *.* ./ @@ -88,7 +92,7 @@ COPY --link testdata testdata ENV CGO_LDFLAGS="-lssl -lcrypto -lreadline -largon2 -lcurl -lonig -lz $PHP_LDFLAGS" CGO_CFLAGS="-DFRANKENPHP_VERSION=$FRANKENPHP_VERSION $PHP_CFLAGS" CGO_CPPFLAGS=$PHP_CPPFLAGS WORKDIR /go/src/app/caddy/frankenphp -RUN GOBIN=/usr/local/bin go install -ldflags "-w -s -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" && \ +RUN GOBIN=/usr/local/bin gotip install -ldflags "-w -s -X 'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP $FRANKENPHP_VERSION PHP $PHP_VERSION Caddy'" && \ 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 af0140bd5..c9e65419b 100644 --- a/alpine.Dockerfile +++ b/alpine.Dockerfile @@ -67,33 +67,20 @@ RUN apk add --no-cache --virtual .build-deps \ readline-dev \ sqlite-dev \ upx \ - # Needed for the custom Go build + # Needed by gotip git \ bash - -# FIXME: temporary workaround for https://github.com/golang/go/issues/68285 -WORKDIR / -RUN git clone https://go.googlesource.com/go goroot -WORKDIR /goroot -# Revert https://github.com/golang/go/commit/3560cf0afb3c29300a6c88ccd98256949ca7a6f6 to prevent the crash with musl -RUN git config --global user.email "build@example.com" && \ - git config --global user.name "Build" && \ - git checkout "$(go env GOVERSION)" && \ - git revert 3560cf0afb3c29300a6c88ccd98256949ca7a6f6 -WORKDIR /goroot/src -ENV GOHOSTARCH="$TARGETARCH" -RUN ./make.bash -ENV PATH="/goroot/bin:$PATH" -RUN go version - + +RUN GOBIN=/usr/local/go/bin go install golang.org/dl/gotip@latest && (yes || true) | gotip download 600296 + WORKDIR /go/src/app COPY --link go.mod go.sum ./ -RUN go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get +RUN gotip mod graph | awk '{if ($1 !~ "@") print $2}' | xargs gotip 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 +RUN gotip mod graph | awk '{if ($1 !~ "@") print $2}' | xargs gotip get WORKDIR /go/src/app COPY --link *.* ./ diff --git a/frankenphp_test.go b/frankenphp_test.go index 2c1e5c681..3e357d983 100644 --- a/frankenphp_test.go +++ b/frankenphp_test.go @@ -496,6 +496,23 @@ func testEarlyHints(t *testing.T, opts *testOptions) { }, opts) } +func TestFiberBasic_module(t *testing.T) { testFiberBasic(t, &testOptions{}) } +func TestFiberBasic_worker(t *testing.T) { + testFiberBasic(t, &testOptions{workerScript: "fiber-basic.php"}) +} +func testFiberBasic(t *testing.T, opts *testOptions) { + runTest(t, func(handler func(http.ResponseWriter, *http.Request), _ *httptest.Server, i int) { + req := httptest.NewRequest("GET", fmt.Sprintf("http://example.com/fiber-basic.php?i=%d", i), nil) + w := httptest.NewRecorder() + handler(w, req) + + resp := w.Result() + body, _ := io.ReadAll(resp.Body) + + assert.Equal(t, string(body), fmt.Sprintf("Fiber %d", i)) + }, opts) +} + type streamResponseRecorder struct { *httptest.ResponseRecorder writeCallback func(buf []byte) diff --git a/testdata/fiber-basic.php b/testdata/fiber-basic.php new file mode 100644 index 000000000..bdb52336f --- /dev/null +++ b/testdata/fiber-basic.php @@ -0,0 +1,9 @@ +start(); +};