aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/golangorg/server.go34
-rw-r--r--go.mod1
-rw-r--r--go.sum2
3 files changed, 33 insertions, 4 deletions
diff --git a/cmd/golangorg/server.go b/cmd/golangorg/server.go
index 7eb2b628..da033e95 100644
--- a/cmd/golangorg/server.go
+++ b/cmd/golangorg/server.go
@@ -18,6 +18,7 @@ import (
"io"
"io/fs"
"log"
+ "net"
"net/http"
"net/url"
"os"
@@ -32,6 +33,7 @@ import (
"time"
"cloud.google.com/go/datastore"
+ "git.sr.ht/~shulhan/pakakeh.go/lib/systemd"
"golang.org/x/build/relnote"
"golang.org/x/build/repos"
"golang.org/x/website"
@@ -129,10 +131,34 @@ func main() {
handler = loggingHandler(handler)
}
- // Start http server.
- fmt.Fprintf(os.Stderr, "serving http://%s\n", *httpAddr)
- if err := http.ListenAndServe(*httpAddr, handler); err != nil {
- log.Fatalf("ListenAndServe %s: %v", *httpAddr, err)
+ listeners, err := systemd.Listeners(true)
+ if err != nil {
+ log.Fatal(err)
+ }
+ if len(listeners) > 1 {
+ log.Fatal(`too many listeners received for activation`)
+ }
+ var listener net.Listener
+ if len(listeners) == 1 {
+ listener = listeners[0]
+ gotAddr := listener.Addr().String()
+ if gotAddr != *httpAddr {
+ log.Fatal(`invalid Listener address, got %s, want %s`,
+ gotAddr, *httpAddr)
+ }
+ }
+
+ if listener == nil {
+ // Start http server.
+ fmt.Fprintf(os.Stderr, "serving http://%s\n", *httpAddr)
+ if err := http.ListenAndServe(*httpAddr, handler); err != nil {
+ log.Fatalf("ListenAndServe %s: %v", *httpAddr, err)
+ }
+ } else {
+ fmt.Fprintf(os.Stderr, "serving using Listener at %s\n", *httpAddr)
+ if err := http.Serve(listener, handler); err != nil {
+ log.Fatalf("Serve %s: %v", *httpAddr, err)
+ }
}
}
diff --git a/go.mod b/go.mod
index d8aff055..1b71d7e7 100644
--- a/go.mod
+++ b/go.mod
@@ -6,6 +6,7 @@ require (
cloud.google.com/go/cloudbuild v1.14.0
cloud.google.com/go/datastore v1.13.0
cloud.google.com/go/storage v1.31.0
+ git.sr.ht/~shulhan/pakakeh.go v0.60.3-0.20260202092811-1e3bb9be8444
github.com/chromedp/cdproto v0.0.0-20241022234722-4d5d5faf59fb
github.com/chromedp/chromedp v0.11.1
github.com/evanw/esbuild v0.18.19
diff --git a/go.sum b/go.sum
index 865a532f..1874b022 100644
--- a/go.sum
+++ b/go.sum
@@ -14,6 +14,8 @@ cloud.google.com/go/longrunning v0.5.1 h1:Fr7TXftcqTudoyRJa113hyaqlGdiBQkp0Gq7tE
cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc=
cloud.google.com/go/storage v1.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI=
cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0=
+git.sr.ht/~shulhan/pakakeh.go v0.60.3-0.20260202092811-1e3bb9be8444 h1:mqX+Z2dyfChpFOgt6gV9R5AT3oQN3pw4gMbPQLGm1DI=
+git.sr.ht/~shulhan/pakakeh.go v0.60.3-0.20260202092811-1e3bb9be8444/go.mod h1:1MkKXbLZRHTcnheeSEbRpGztkym4Yxzh90ep+jCxbDc=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/alexflint/go-arg v1.3.0/go.mod h1:9iRbDxne7LcR/GSvEr7ma++GLpdIU1zrghf2y2768kM=
github.com/alexflint/go-scalar v1.0.0/go.mod h1:GpHzbCOZXEKMEcygYQ5n/aa4Aq84zbxjy3MxYW0gjYw=