1
0
Fork 0
mirror of https://github.com/imjasonh/gots synced 2026-07-07 00:33:56 +00:00
gots/main.go
Jason Hall 0853892d49 separate prod+dev JS compile
Signed-off-by: Jason Hall <jason@chainguard.dev>
2025-08-30 21:31:58 -04:00

70 lines
1.2 KiB
Go

package main
import (
"embed"
"flag"
"fmt"
"io/fs"
"log"
"net/http"
"os"
"runtime/debug"
)
//go:embed assets/*
var assets embed.FS
func main() {
port := flag.Int("port", 8080, "port to serve on")
flag.Parse()
assetsFS, err := fs.Sub(assets, "assets")
if err != nil {
log.Fatal(err)
}
http.Handle("/", http.FileServer(http.FS(assetsFS)))
addr := fmt.Sprintf(":%d", *port)
fmt.Printf("Version: %s\n", version())
fmt.Printf("Binary size: %d bytes\n", binarySize())
fmt.Printf("Embedded assets size: %d bytes\n", assetsSize())
fmt.Printf("Server starting on http://localhost%s\n", addr)
log.Fatal(http.ListenAndServe(addr, nil))
}
func version() string {
bi, ok := debug.ReadBuildInfo()
if !ok {
return "devel"
}
return bi.Main.Version
}
func binarySize() int64 {
info, err := os.Stat(os.Args[0])
if err != nil {
log.Fatal(err)
}
return info.Size()
}
func assetsSize() int64 {
var total int64
if err := fs.WalkDir(assets, ".", func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if !d.IsDir() {
info, err := d.Info()
if err != nil {
return err
}
total += info.Size()
}
return nil
}); err != nil {
log.Fatal(err)
}
return total
}