From d8cbae874c27473b3f1f91880c79f4a0d7a80c5a Mon Sep 17 00:00:00 2001 From: "Alex Ellis (OpenFaaS Ltd)" Date: Wed, 12 Nov 2025 16:19:58 +0000 Subject: [PATCH 1/3] WIP: in-process version of Go template The watchdog is imported as an SDK to avoid an extra hop and to reduce total memory usage of one Go process vs two. Signed-off-by: Alex Ellis (OpenFaaS Ltd) --- template/golang-http/Dockerfile | 6 +- template/golang-middleware-inproc/.gitignore | 1 + template/golang-middleware-inproc/Dockerfile | 59 ++++++++++++++ .../golang-middleware-inproc/function/go.mod | 3 + .../function/handler.go | 37 +++++++++ template/golang-middleware-inproc/go.mod | 29 +++++++ template/golang-middleware-inproc/go.sum | 68 ++++++++++++++++ template/golang-middleware-inproc/go.work | 6 ++ template/golang-middleware-inproc/main.go | 80 +++++++++++++++++++ .../golang-middleware-inproc/template.yml | 11 +++ template/golang-middleware/Dockerfile | 6 +- 11 files changed, 300 insertions(+), 6 deletions(-) create mode 100644 template/golang-middleware-inproc/.gitignore create mode 100644 template/golang-middleware-inproc/Dockerfile create mode 100644 template/golang-middleware-inproc/function/go.mod create mode 100644 template/golang-middleware-inproc/function/handler.go create mode 100644 template/golang-middleware-inproc/go.mod create mode 100644 template/golang-middleware-inproc/go.sum create mode 100644 template/golang-middleware-inproc/go.work create mode 100644 template/golang-middleware-inproc/main.go create mode 100644 template/golang-middleware-inproc/template.yml diff --git a/template/golang-http/Dockerfile b/template/golang-http/Dockerfile index 5d48862..f27a4dd 100644 --- a/template/golang-http/Dockerfile +++ b/template/golang-http/Dockerfile @@ -1,5 +1,5 @@ -FROM --platform=${TARGETPLATFORM:-linux/amd64} ghcr.io/openfaas/of-watchdog:0.10.11 AS watchdog -FROM --platform=${BUILDPLATFORM:-linux/amd64} golang:1.24.0-alpine AS build +FROM --platform=${TARGETPLATFORM:-linux/amd64} ghcr.io/openfaas/of-watchdog:0.10.12 AS watchdog +FROM --platform=${BUILDPLATFORM:-linux/amd64} golang:1.25-alpine AS build ARG TARGETPLATFORM ARG BUILDPLATFORM @@ -36,7 +36,7 @@ WORKDIR /go/src/handler RUN CGO_ENABLED=${CGO_ENABLED} GOOS=${TARGETOS} GOARCH=${TARGETARCH} GOFLAGS=${GOFLAGS} \ go build --ldflags "-s -w" -o handler . -FROM --platform=${TARGETPLATFORM:-linux/amd64} alpine:3.22.0 AS ship +FROM --platform=${TARGETPLATFORM:-linux/amd64} alpine:3.22.2 AS ship # Add non root user and certs RUN apk --no-cache add ca-certificates \ diff --git a/template/golang-middleware-inproc/.gitignore b/template/golang-middleware-inproc/.gitignore new file mode 100644 index 0000000..8915b60 --- /dev/null +++ b/template/golang-middleware-inproc/.gitignore @@ -0,0 +1 @@ +/handler diff --git a/template/golang-middleware-inproc/Dockerfile b/template/golang-middleware-inproc/Dockerfile new file mode 100644 index 0000000..5b2d06f --- /dev/null +++ b/template/golang-middleware-inproc/Dockerfile @@ -0,0 +1,59 @@ +FROM --platform=${BUILDPLATFORM:-linux/amd64} golang:1.25-alpine AS build + +ARG TARGETPLATFORM +ARG BUILDPLATFORM +ARG TARGETOS +ARG TARGETARCH + +RUN apk --no-cache add git + +RUN mkdir -p /go/src/handler +WORKDIR /go/src/handler +COPY . . + +ARG GO111MODULE="on" +ARG GOPROXY="" +ARG GOFLAGS="" +ARG CGO_ENABLED=0 +ENV CGO_ENABLED=${CGO_ENABLED} + +# Run a gofmt and exclude all vendored code. +RUN test -z "$(gofmt -l $(find . -type f -name '*.go' -not -path "./vendor/*" -not -path "./function/vendor/*"))" || { echo "Run \"gofmt -s -w\" on your Golang code"; exit 1; } + +WORKDIR /go/src/handler/function +RUN mkdir -p /go/src/handler/function/static + +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/go/pkg/mod \ + GOOS=${TARGETOS} GOARCH=${TARGETARCH} go test ./... -cover + +WORKDIR /go/src/handler +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/go/pkg/mod \ + GOOS=${TARGETOS} GOARCH=${TARGETARCH} \ + go build --ldflags "-s -w" -o handler . + +FROM --platform=${TARGETPLATFORM:-linux/amd64} alpine:3.22.1 AS ship + +# Add non root user and certs +RUN apk --no-cache add ca-certificates \ + && addgroup -S app && adduser -S -g app app + +# Split instructions so that buildkit can run & cache +# the previous command ahead of time. +RUN mkdir -p /home/app \ + && chown app /home/app + +WORKDIR /home/app + +COPY --from=build --chown=app /go/src/handler/handler . +COPY --from=build --chown=app /go/src/handler/function/static static + +USER app + +ENV fprocess="" +ENV mode="inproc" +ENV upstream_url="" +ENV prefix_logs="false" + +CMD ["./handler"] diff --git a/template/golang-middleware-inproc/function/go.mod b/template/golang-middleware-inproc/function/go.mod new file mode 100644 index 0000000..c2d6162 --- /dev/null +++ b/template/golang-middleware-inproc/function/go.mod @@ -0,0 +1,3 @@ +module handler/function + +go 1.24.0 diff --git a/template/golang-middleware-inproc/function/handler.go b/template/golang-middleware-inproc/function/handler.go new file mode 100644 index 0000000..168c9ad --- /dev/null +++ b/template/golang-middleware-inproc/function/handler.go @@ -0,0 +1,37 @@ +package function + +import ( + "fmt" + "io" + "log/slog" + "os" + + "net/http" + "time" +) + +func Handle(w http.ResponseWriter, r *http.Request) { + var input []byte + + log := slog.New(slog.NewTextHandler(os.Stdout, opts)) + log = log.With("X-Call-Id", r.Header.Get("X-Call-Id")) + + log.Info("received request") + + if r.Body != nil { + defer r.Body.Close() + + body, _ := io.ReadAll(r.Body) + + input = body + } + + log.Info("Sleeping for 1 milliseconds") + + time.Sleep(time.Millisecond * 1) + + log.Info("Sleep done") + + w.WriteHeader(http.StatusOK) + w.Write([]byte(fmt.Sprintf("Body: %s", string(input)))) +} diff --git a/template/golang-middleware-inproc/go.mod b/template/golang-middleware-inproc/go.mod new file mode 100644 index 0000000..e778863 --- /dev/null +++ b/template/golang-middleware-inproc/go.mod @@ -0,0 +1,29 @@ +module handler + +go 1.24.0 + +require ( + github.com/google/uuid v1.6.0 + github.com/openfaas/of-watchdog v0.0.0-20251114100857-67a6309db21b +) + +require ( + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/openfaas/faas-middleware v1.2.5 // indirect + github.com/openfaas/faas-provider v0.25.8 // indirect + github.com/prometheus/client_golang v1.23.0 // indirect + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/common v0.65.0 // indirect + github.com/prometheus/procfs v0.17.0 // indirect + github.com/rakutentech/jwk-go v1.2.0 // indirect + golang.org/x/crypto v0.41.0 // indirect + golang.org/x/sys v0.35.0 // indirect + google.golang.org/protobuf v1.36.7 // indirect +) + +// replace github.com/openfaas/of-watchdog => ../../../of-watchdog diff --git a/template/golang-middleware-inproc/go.sum b/template/golang-middleware-inproc/go.sum new file mode 100644 index 0000000..1b11169 --- /dev/null +++ b/template/golang-middleware-inproc/go.sum @@ -0,0 +1,68 @@ +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/pprof v0.0.0-20250125003558-7fdb3d7e6fa0 h1:my2ucqBZmv+cWHIhZNSIYKzgN8EBGyHdC7zD5sASRAg= +github.com/google/pprof v0.0.0-20250125003558-7fdb3d7e6fa0/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= +github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= +github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= +github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= +github.com/openfaas/faas-middleware v1.2.5 h1:RXPsuXw1PsxPsQ0MJz0ud3mU6X+Rg8v50ZAPxapVJ1g= +github.com/openfaas/faas-middleware v1.2.5/go.mod h1:YuGnJ7wVW/dJEzZCltHYKGGHwfelQMPWt205m6PNfVE= +github.com/openfaas/faas-provider v0.25.8 h1:3W1ZyhUvpqTOiNQoV7jzdZhDJeJJlJelosAtjFzMNyw= +github.com/openfaas/faas-provider v0.25.8/go.mod h1:rMXbj+AYVpn82UoHIOgWHiDeV118t0bSxyoC9d00jpc= +github.com/openfaas/of-watchdog v0.0.0-20251111152958-6696d30d7c8a h1:RInh0UKCMMA8QG40kcDNs4TQHOQcwR3xtcWtO21RsTo= +github.com/openfaas/of-watchdog v0.0.0-20251111152958-6696d30d7c8a/go.mod h1:HjFTzt+rGkPtXEagz6qk3yTuqjJj52UPWeeSF02fosw= +github.com/openfaas/of-watchdog v0.0.0-20251114100857-67a6309db21b h1:xrTwtQQBowj2SAfIHxZjXWddYPlU9Yb9g52XwrJ70s4= +github.com/openfaas/of-watchdog v0.0.0-20251114100857-67a6309db21b/go.mod h1:HjFTzt+rGkPtXEagz6qk3yTuqjJj52UPWeeSF02fosw= +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.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc= +github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE= +github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= +github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= +github.com/prometheus/common v0.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2VzE= +github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= +github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7DuK0= +github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw= +github.com/rakutentech/jwk-go v1.2.0 h1:vNJwedPkRR+32V5WGNj0JP4COes93BGERvzQLBjLy4c= +github.com/rakutentech/jwk-go v1.2.0/go.mod h1:pI0bYVntqaJ27RCpaC75MTUacheW0Rk4+8XzWWe1OWM= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= +golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= +golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= +golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= +google.golang.org/protobuf v1.36.7 h1:IgrO7UwFQGJdRNXH/sQux4R1Dj1WAKcLElzeeRaXV2A= +google.golang.org/protobuf v1.36.7/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/template/golang-middleware-inproc/go.work b/template/golang-middleware-inproc/go.work new file mode 100644 index 0000000..d79d027 --- /dev/null +++ b/template/golang-middleware-inproc/go.work @@ -0,0 +1,6 @@ +go 1.25.0 + +use ( + . + ./function +) diff --git a/template/golang-middleware-inproc/main.go b/template/golang-middleware-inproc/main.go new file mode 100644 index 0000000..895506c --- /dev/null +++ b/template/golang-middleware-inproc/main.go @@ -0,0 +1,80 @@ +package main + +import ( + "context" + "handler/function" + "log" + "net/http" + "os" + "os/signal" + "syscall" + "time" + + "github.com/google/uuid" + "github.com/openfaas/of-watchdog/config" + + "github.com/openfaas/of-watchdog/pkg" +) + +const defaultTimeout = 10 * time.Second + +func main() { + + os.Setenv("mode", "inproc") + + if _, ok := os.LookupEnv("exec_timeout"); !ok { + os.Setenv("exec_timeout", defaultTimeout.String()) + } + + extendedTimeout := time.Duration(defaultTimeout + time.Millisecond*100) + + if _, ok := os.LookupEnv("read_timeout"); !ok { + os.Setenv("read_timeout", extendedTimeout.String()) + } + if _, ok := os.LookupEnv("write_timeout"); !ok { + os.Setenv("write_timeout", extendedTimeout.String()) + } + + if v, ok := os.LookupEnv("healthcheck_interval"); !ok { + os.Setenv("healthcheck_interval", os.Getenv("write_timeout")) + } else { + interval, _ := time.ParseDuration(v) + if interval <= time.Millisecond*0 { + os.Setenv("healthcheck_interval", "1ms") + } + } + + cfg, err := config.New(os.Environ()) + if err != nil { + log.Fatalf("failed to parse watchdog config: %v", err) + } + + log.Printf("Watchdog config: %+v\n", cfg) + + h := func(w http.ResponseWriter, r *http.Request) { + if _, ok := r.Header["X-Call-Id"]; !ok { + r.Header.Set("X-Call-Id", uuid.New().String()) + } + function.Handle(w, r) + } + + cfg.SetHandler(h) + cfg.OperationalMode = config.ModeInproc + + watchdog := pkg.NewWatchdog(cfg) + + sigs := make(chan os.Signal, 1) + signal.Notify(sigs, syscall.SIGTERM, syscall.SIGINT) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + go func() { + s := <-sigs + log.Printf("Signal received: %s", s.String()) + cancel() + }() + + if err := watchdog.Start(ctx); err != nil { + log.Fatalf("failed to start watchdog: %v", err) + } +} diff --git a/template/golang-middleware-inproc/template.yml b/template/golang-middleware-inproc/template.yml new file mode 100644 index 0000000..ace2674 --- /dev/null +++ b/template/golang-middleware-inproc/template.yml @@ -0,0 +1,11 @@ +language: golang-middleware-inproc +fprocess: ./handler +welcome_message: | + You have created a new function which uses go 1.24 and Alpine + Linux as its base image. + + To disable the go module, for private vendor code, please use + "--build-arg GO111MODULE=off" with faas-cli build or configure this + via your stack.yml file. + + Learn more: https://docs.openfaas.com/languages/go/ diff --git a/template/golang-middleware/Dockerfile b/template/golang-middleware/Dockerfile index 9ce7161..9122f78 100644 --- a/template/golang-middleware/Dockerfile +++ b/template/golang-middleware/Dockerfile @@ -1,5 +1,5 @@ -FROM --platform=${TARGETPLATFORM:-linux/amd64} ghcr.io/openfaas/of-watchdog:0.10.11 AS watchdog -FROM --platform=${BUILDPLATFORM:-linux/amd64} golang:1.24.0-alpine AS build +FROM --platform=${TARGETPLATFORM:-linux/amd64} ghcr.io/openfaas/of-watchdog:0.10.12 AS watchdog +FROM --platform=${BUILDPLATFORM:-linux/amd64} golang:1.25-alpine AS build # Multi-arch build args ARG TARGETPLATFORM @@ -34,7 +34,7 @@ WORKDIR /go/src/handler RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} \ go build --ldflags "-s -w" -o handler . -FROM --platform=${TARGETPLATFORM:-linux/amd64} alpine:3.22.0 AS ship +FROM --platform=${TARGETPLATFORM:-linux/amd64} alpine:3.22.2 AS ship # Add non root user and certs RUN apk --no-cache add ca-certificates \ From 466573f803f66a42c3fb9686bc87cf643f4f5c1e Mon Sep 17 00:00:00 2001 From: "Alex Ellis (OpenFaaS Ltd)" Date: Fri, 14 Nov 2025 16:15:15 +0000 Subject: [PATCH 2/3] Try a default log level Signed-off-by: Alex Ellis (OpenFaaS Ltd) --- template/golang-middleware-inproc/function/handler.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/template/golang-middleware-inproc/function/handler.go b/template/golang-middleware-inproc/function/handler.go index 168c9ad..c86fcdf 100644 --- a/template/golang-middleware-inproc/function/handler.go +++ b/template/golang-middleware-inproc/function/handler.go @@ -13,8 +13,8 @@ import ( func Handle(w http.ResponseWriter, r *http.Request) { var input []byte - log := slog.New(slog.NewTextHandler(os.Stdout, opts)) - log = log.With("X-Call-Id", r.Header.Get("X-Call-Id")) + log := slog.New(slog.NewTextHandler(os.Stdout, nil)). + With("X-Call-Id", r.Header.Get("X-Call-Id")) log.Info("received request") From 4c49d48c64dd1670ffd03432ed3d086bd8b0475c Mon Sep 17 00:00:00 2001 From: "Alex Ellis (OpenFaaS Ltd)" Date: Fri, 14 Nov 2025 16:20:45 +0000 Subject: [PATCH 3/3] Update template.yml files for consistency Signed-off-by: Alex Ellis (OpenFaaS Ltd) --- template/golang-middleware-inproc/template.yml | 5 +++-- template/golang-middleware/template.yml | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/template/golang-middleware-inproc/template.yml b/template/golang-middleware-inproc/template.yml index ace2674..aae9e58 100644 --- a/template/golang-middleware-inproc/template.yml +++ b/template/golang-middleware-inproc/template.yml @@ -1,8 +1,9 @@ language: golang-middleware-inproc fprocess: ./handler welcome_message: | - You have created a new function which uses go 1.24 and Alpine - Linux as its base image. + You have created a new function which uses Go 1.25 and Alpine + Linux as its base image. The go.mod version is set to 1.24.0 + for compatibility. To disable the go module, for private vendor code, please use "--build-arg GO111MODULE=off" with faas-cli build or configure this diff --git a/template/golang-middleware/template.yml b/template/golang-middleware/template.yml index d80a9ed..aa33ef5 100644 --- a/template/golang-middleware/template.yml +++ b/template/golang-middleware/template.yml @@ -1,8 +1,9 @@ language: golang-middleware fprocess: ./handler welcome_message: | - You have created a new function which uses go 1.23 and Alpine - Linux as its base image. + You have created a new function which uses Go 1.25 and Alpine + Linux as its base image. The go.mod version is set to 1.24.0 + for compatibility. To disable the go module, for private vendor code, please use "--build-arg GO111MODULE=off" with faas-cli build or configure this