diff options
| author | Steven Hartland <stevenmhartland@gmail.com> | 2023-05-12 15:34:18 +0000 |
|---|---|---|
| committer | Robert Findley <rfindley@google.com> | 2023-05-12 18:33:08 +0000 |
| commit | 87a924a23d6c0f3ff7d99bb09e2ad2041b01f8c9 (patch) | |
| tree | b992e01718a27f7129ea415666e3a3ef5efe295a /cmd/pkgsite | |
| parent | f4b03253b3f2adda1a55cde552220643f35afe84 (diff) | |
| download | go-x-pkgsite-87a924a23d6c0f3ff7d99bb09e2ad2041b01f8c9.tar.xz | |
x/pkgsite: add -open to open browser
Add -open command line flag to cmd/pkgsite which tries to open a browser to the newly running server.
This provides a simple way to open a browser to pkgsite service without having do paste the URL into a browser manually.
It leverages the internal/browser package from go for this functionality as used by go tool cover -html.
Fixes golang/go#60002
Change-Id: I94ba4cde2aa0830630bf0e9d7710414db9801606
GitHub-Last-Rev: 4e4f3cd79b94c7301e7ef563c65b6ca2551d536d
GitHub-Pull-Request: golang/pkgsite#64
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/493075
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
Diffstat (limited to 'cmd/pkgsite')
| -rw-r--r-- | cmd/pkgsite/main.go | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/cmd/pkgsite/main.go b/cmd/pkgsite/main.go index 46ad2ea2..85ce83e5 100644 --- a/cmd/pkgsite/main.go +++ b/cmd/pkgsite/main.go @@ -55,6 +55,7 @@ import ( "flag" "fmt" "io/fs" + "net" "net/http" "os" "os/exec" @@ -65,6 +66,7 @@ import ( "github.com/google/safehtml/template" "golang.org/x/pkgsite/internal" + "golang.org/x/pkgsite/internal/browser" "golang.org/x/pkgsite/internal/fetch" "golang.org/x/pkgsite/internal/fetchdatasource" "golang.org/x/pkgsite/internal/frontend" @@ -85,6 +87,7 @@ var ( useProxy = flag.Bool("proxy", false, "fetch from GOPROXY if not found locally") devMode = flag.Bool("dev", false, "enable developer mode (reload templates on each page load, serve non-minified JS/CSS, etc.)") staticFlag = flag.String("static", "static", "path to folder containing static files served") + openFlag = flag.Bool("open", false, "open a browser window to the server's address") // other flags are bound to serverConfig below ) @@ -142,11 +145,32 @@ func main() { die(err.Error()) } + addr := *httpAddr + if addr == "" { + addr = ":http" + } + + ln, err := net.Listen("tcp", addr) + if err != nil { + die(err.Error()) + } + + url := "http://" + addr + log.Infof(ctx, "Listening on addr %s", url) + + if *openFlag { + go func() { + if !browser.Open(url) { + log.Infof(ctx, "Failed to open browser window. Please visit %s in your browser.", url) + } + }() + } + router := http.NewServeMux() server.Install(router.Handle, nil, nil) mw := middleware.Timeout(54 * time.Second) - log.Infof(ctx, "Listening on addr http://%s", *httpAddr) - die("%v", http.ListenAndServe(*httpAddr, mw(router))) + srv := &http.Server{Addr: addr, Handler: mw(router)} + die("%v", srv.Serve(ln)) } func die(format string, args ...any) { |
