From f1847f214f7de8d45617e4041c85246b07430553 Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Mon, 20 May 2024 18:40:43 -0300 Subject: [PATCH 01/12] feat: initial setup --- api/hello.go | 45 +++++++++++++++ cmd/build-static/main.go | 115 +++++++++++++++++++++++++++++++++++++++ cmd/dev-server/main.go | 22 ++++++++ layouts/page.templ | 12 ++++ pages/homepage.templ | 10 ++++ static/logo-013-dark.svg | 1 + static/robots.txt | 1 + 7 files changed, 206 insertions(+) create mode 100644 api/hello.go create mode 100644 cmd/build-static/main.go create mode 100644 cmd/dev-server/main.go create mode 100644 layouts/page.templ create mode 100644 pages/homepage.templ create mode 100644 static/logo-013-dark.svg create mode 100644 static/robots.txt diff --git a/api/hello.go b/api/hello.go new file mode 100644 index 0000000..7095201 --- /dev/null +++ b/api/hello.go @@ -0,0 +1,45 @@ +package api + +import ( + "encoding/json" + "fmt" + "io" + "math/rand/v2" + "net/http" +) + +type helloObj struct { + Language string + Hello string +} + +func getHelloList() ([]helloObj, error) { + res, err := http.Get("https://raw.githubusercontent.com/novellac/multilanguage-hello-json/master/hello.json") + if err != nil { + return nil, err + } + bytes, err := io.ReadAll(res.Body) + if err != nil { + return nil, err + } + + var hellos []helloObj + err = json.Unmarshal(bytes, &hellos) + if err != nil { + return nil, err + } + + return hellos, nil +} + +func Hello(w http.ResponseWriter, r *http.Request) { + hellos, err := getHelloList() + var hello string + if err != nil { + hello = "Welcome!" + } else { + hello = hellos[rand.IntN(len(hellos)-1)].Hello + } + + fmt.Fprint(w, hello) +} diff --git a/cmd/build-static/main.go b/cmd/build-static/main.go new file mode 100644 index 0000000..d3cd7ea --- /dev/null +++ b/cmd/build-static/main.go @@ -0,0 +1,115 @@ +package main + +import ( + "context" + "flag" + "io" + "io/fs" + "log" + "os" + "path/filepath" + "strings" + + "github.com/a-h/templ" + "guz.one/pages" +) + +const PERMISSIONS = 0755 + +type Page struct { + path string + component templ.Component +} + +type Writer struct { + root *string + pages []Page + context context.Context +} + +func (w Writer) writeFile(path string, writer func(ctx context.Context, w io.Writer) error) { + directory := filepath.Dir(path) + err := os.MkdirAll(directory, PERMISSIONS) + if err != nil { + log.Fatal(err) + } + + f, err := os.Create(path) + if err != nil { + log.Fatal(err) + } + defer f.Close() + + err = writer(w.context, f) + if err != nil { + log.Fatal(err) + } +} + +func (w Writer) WriteAll() { + for _, page := range w.pages { + p := filepath.Join(*w.root, page.path) + log.Printf("Writing page %s", p) + w.writeFile(p, page.component.Render) + } +} + +func main() { + dir := flag.String("d", "./dist", "the directory to write the files") + staticDir := flag.String("s", "./static", "the directory to copy static files from") + + pages := []Page{ + {"index.html", pages.Homepage()}, + } + w := Writer{dir, pages, context.Background()} + w.WriteAll() + + a, err := filepath.Abs(*staticDir) + if err != nil { + log.Fatal(err) + } + + copyFile := func(root string, dest *string) func(string, fs.DirEntry, error) error { + return func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } else if path == root { + return nil + } + + c, err := os.ReadFile(path) + if err != nil { + return err + } + + p := strings.TrimPrefix(path, root) + log.Printf("Copying static file %s to %s directory", p, *dest) + + p = filepath.Join(*dest, p) + + err = os.MkdirAll(filepath.Dir(p), PERMISSIONS) + if err != nil { + return err + } + + f, err := os.Create(p) + if err != nil { + return err + } + defer f.Close() + + b, err := f.Write(c) + if err != nil { + return err + } + log.Printf("Wrote %v bytes in %s", b, p) + + return nil + } + } + err = filepath.WalkDir(a, copyFile(a, dir)) + if err != nil { + log.Fatal(err) + } + +} diff --git a/cmd/dev-server/main.go b/cmd/dev-server/main.go new file mode 100644 index 0000000..7d9c12e --- /dev/null +++ b/cmd/dev-server/main.go @@ -0,0 +1,22 @@ +package main + +import ( + "context" + "log" + "net/http" + + "guz.one/api" + "guz.one/pages" +) + +func main() { + mux := http.NewServeMux() + + mux.HandleFunc("/api/hello", api.Hello) + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + err := pages.Homepage().Render(context.Background(), w) + _ = err + }) + + log.Fatal(http.ListenAndServe(":5432", mux)) +} diff --git a/layouts/page.templ b/layouts/page.templ new file mode 100644 index 0000000..d216377 --- /dev/null +++ b/layouts/page.templ @@ -0,0 +1,12 @@ +package layouts + +templ Page(title string) { + + + { title } + + + { children... } + + +} diff --git a/pages/homepage.templ b/pages/homepage.templ new file mode 100644 index 0000000..c2b497c --- /dev/null +++ b/pages/homepage.templ @@ -0,0 +1,10 @@ +package pages + +import ( + "guz.one/layouts" +) + +templ Homepage() { + + @layouts.Page("Hello world") +} diff --git a/static/logo-013-dark.svg b/static/logo-013-dark.svg new file mode 100644 index 0000000..37aea5f --- /dev/null +++ b/static/logo-013-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/robots.txt b/static/robots.txt new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/static/robots.txt @@ -0,0 +1 @@ +test From 3bceac455a21501fe27d3738be20321f5e247cff Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Tue, 21 May 2024 18:37:49 -0300 Subject: [PATCH 02/12] refactor: build command --- cmd/build-static/main.go | 115 ------------------------------------- cmd/build/main.go | 27 +++++++++ config/routes.go | 17 ++++++ internals/static_writer.go | 107 ++++++++++++++++++++++++++++++++++ vercel.json | 1 + 5 files changed, 152 insertions(+), 115 deletions(-) delete mode 100644 cmd/build-static/main.go create mode 100644 cmd/build/main.go create mode 100644 config/routes.go create mode 100644 internals/static_writer.go diff --git a/cmd/build-static/main.go b/cmd/build-static/main.go deleted file mode 100644 index d3cd7ea..0000000 --- a/cmd/build-static/main.go +++ /dev/null @@ -1,115 +0,0 @@ -package main - -import ( - "context" - "flag" - "io" - "io/fs" - "log" - "os" - "path/filepath" - "strings" - - "github.com/a-h/templ" - "guz.one/pages" -) - -const PERMISSIONS = 0755 - -type Page struct { - path string - component templ.Component -} - -type Writer struct { - root *string - pages []Page - context context.Context -} - -func (w Writer) writeFile(path string, writer func(ctx context.Context, w io.Writer) error) { - directory := filepath.Dir(path) - err := os.MkdirAll(directory, PERMISSIONS) - if err != nil { - log.Fatal(err) - } - - f, err := os.Create(path) - if err != nil { - log.Fatal(err) - } - defer f.Close() - - err = writer(w.context, f) - if err != nil { - log.Fatal(err) - } -} - -func (w Writer) WriteAll() { - for _, page := range w.pages { - p := filepath.Join(*w.root, page.path) - log.Printf("Writing page %s", p) - w.writeFile(p, page.component.Render) - } -} - -func main() { - dir := flag.String("d", "./dist", "the directory to write the files") - staticDir := flag.String("s", "./static", "the directory to copy static files from") - - pages := []Page{ - {"index.html", pages.Homepage()}, - } - w := Writer{dir, pages, context.Background()} - w.WriteAll() - - a, err := filepath.Abs(*staticDir) - if err != nil { - log.Fatal(err) - } - - copyFile := func(root string, dest *string) func(string, fs.DirEntry, error) error { - return func(path string, d fs.DirEntry, err error) error { - if err != nil { - return err - } else if path == root { - return nil - } - - c, err := os.ReadFile(path) - if err != nil { - return err - } - - p := strings.TrimPrefix(path, root) - log.Printf("Copying static file %s to %s directory", p, *dest) - - p = filepath.Join(*dest, p) - - err = os.MkdirAll(filepath.Dir(p), PERMISSIONS) - if err != nil { - return err - } - - f, err := os.Create(p) - if err != nil { - return err - } - defer f.Close() - - b, err := f.Write(c) - if err != nil { - return err - } - log.Printf("Wrote %v bytes in %s", b, p) - - return nil - } - } - err = filepath.WalkDir(a, copyFile(a, dir)) - if err != nil { - log.Fatal(err) - } - -} diff --git a/cmd/build/main.go b/cmd/build/main.go new file mode 100644 index 0000000..f61de39 --- /dev/null +++ b/cmd/build/main.go @@ -0,0 +1,27 @@ +package main + +import ( + "context" + "flag" + "log" + + "guz.one/internals" +) + +func main() { + dir := flag.String("d", "./dist", "the directory to write the files") + staticDir := flag.String("s", "./static", "the directory to copy static files from") + + w := internals.StaticWriter{ + DistDir: dir, + StaticDir: staticDir, + Pages: internals.ROUTES, + Context: context.Background(), + Logger: *log.Default(), + } + + err := w.WriteAll() + if err != nil { + log.Fatal(err) + } +} diff --git a/config/routes.go b/config/routes.go new file mode 100644 index 0000000..646f7f8 --- /dev/null +++ b/config/routes.go @@ -0,0 +1,17 @@ +package config + +import ( + "net/http" + + "guz.one/api" + "guz.one/internals" + "guz.one/pages" +) + +var ROUTES = []internals.Page{ + {Path: "index.html", Component: pages.Homepage()}, +} + +func APIROUTES(mux *http.ServeMux) { + mux.HandleFunc("/api/hello", api.Hello) +} diff --git a/internals/static_writer.go b/internals/static_writer.go new file mode 100644 index 0000000..976a1a7 --- /dev/null +++ b/internals/static_writer.go @@ -0,0 +1,107 @@ +package internals + +import ( + "context" + "io" + "io/fs" + "log" + "os" + "path/filepath" + "strings" + + "github.com/a-h/templ" +) + +const PERMISSIONS = 0755 + +type Page struct { + Path string + Component templ.Component +} + +type StaticWriter struct { + DistDir *string + StaticDir *string + Pages []Page + Context context.Context + Logger log.Logger +} + +func (w *StaticWriter) WritePage(path string, writer func(ctx context.Context, w io.Writer) error) error { + directory := filepath.Dir(path) + err := os.MkdirAll(directory, PERMISSIONS) + if err != nil { + return err + } + + f, err := os.Create(path) + if err != nil { + return err + } + defer f.Close() + + err = writer(w.Context, f) + return err +} + +func (w *StaticWriter) WriteAll() error { + for _, page := range w.Pages { + p := filepath.Join(*w.DistDir, page.Path) + w.Logger.Printf("Writing page %s", p) + err := w.WritePage(p, page.Component.Render) + if err != nil { + return err + } + } + + err := filepath.WalkDir(*w.StaticDir, func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } else if d.IsDir() || path == *w.StaticDir { + return nil + } + + f, err := filepath.Abs(path) + if err != nil { + return err + } + s, err := filepath.Abs(*w.StaticDir) + if err != nil { + return err + } + + err = w.CopyStatic(strings.TrimPrefix(f, s)) + if err != nil { + return err + } + return nil + }) + return err +} + +func (w *StaticWriter) CopyStatic(path string) error { + c, err := os.ReadFile(filepath.Join(*w.StaticDir, path)) + if err != nil { + return err + } + + p := filepath.Join(*w.DistDir, path) + err = os.MkdirAll(filepath.Dir(p), PERMISSIONS) + if err != nil { + return err + } + + f, err := os.Create(p) + if err != nil { + return err + } + defer f.Close() + + b, err := f.Write(c) + if err != nil { + return err + } + w.Logger.Printf("Wrote %v bytes in %s", b, p) + + return nil +} diff --git a/vercel.json b/vercel.json index 89db77a..1a28888 100644 --- a/vercel.json +++ b/vercel.json @@ -2,3 +2,4 @@ "$schema": "https://openapi.vercel.sh/vercel.json", "outputDirectory": "dist" } + From dcf2cc85443bef925a22b490720be97c7f85ea1d Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Tue, 21 May 2024 18:38:05 -0300 Subject: [PATCH 03/12] feat: vercel-like server --- cmd/dev-server/main.go | 22 --------------- cmd/vercel/main.go | 61 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 22 deletions(-) delete mode 100644 cmd/dev-server/main.go create mode 100644 cmd/vercel/main.go diff --git a/cmd/dev-server/main.go b/cmd/dev-server/main.go deleted file mode 100644 index 7d9c12e..0000000 --- a/cmd/dev-server/main.go +++ /dev/null @@ -1,22 +0,0 @@ -package main - -import ( - "context" - "log" - "net/http" - - "guz.one/api" - "guz.one/pages" -) - -func main() { - mux := http.NewServeMux() - - mux.HandleFunc("/api/hello", api.Hello) - mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - err := pages.Homepage().Render(context.Background(), w) - _ = err - }) - - log.Fatal(http.ListenAndServe(":5432", mux)) -} diff --git a/cmd/vercel/main.go b/cmd/vercel/main.go new file mode 100644 index 0000000..ee86cc9 --- /dev/null +++ b/cmd/vercel/main.go @@ -0,0 +1,61 @@ +package main + +import ( + "context" + "encoding/json" + "flag" + "fmt" + "log" + "net/http" + "os" + + "guz.one/config" + "guz.one/internals" +) + +type VercelConfig struct { + OutputDirectory string `json:"outputDirectory"` +} + +func main() { + configPath := flag.String("c", "./vercel.json", "the path to the vercel.json file") + staticDir := flag.String("s", "./static", "the directory to copy static files from") + port := flag.Int("p", 8080, "the port to run the server") + + configFile, err := os.ReadFile(*configPath) + if err != nil { + log.Fatalf("Unable to read vercel.json file due to:\n%s", err) + } + + var c VercelConfig + err = json.Unmarshal(configFile, &c) + if err != nil { + log.Fatalf("Unable to parse vercel.json file due to:\n%s", err) + } + + w := internals.StaticWriter{ + DistDir: &c.OutputDirectory, + StaticDir: staticDir, + Pages: config.ROUTES, + Context: context.Background(), + Logger: *log.Default(), + } + + log.Print("Writing static files") + err = w.WriteAll() + if err != nil { + log.Fatal(err) + } + + log.Print("Starting server") + mux := http.NewServeMux() + + config.APIROUTES(mux) + mux.Handle("/", http.FileServer(http.Dir(c.OutputDirectory))) + + log.Printf("Running server at port: %v", *port) + err = http.ListenAndServe(fmt.Sprintf(":%v", *port), mux) + if err != nil { + log.Fatalf("Server crashed due to:\n%s", err) + } +} From 3221cadeee059d7b32f514cf6512a44e537ddc09 Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Wed, 22 May 2024 13:51:10 -0300 Subject: [PATCH 04/12] fix: ROUTES package --- cmd/build/main.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/build/main.go b/cmd/build/main.go index f61de39..79d5748 100644 --- a/cmd/build/main.go +++ b/cmd/build/main.go @@ -5,6 +5,7 @@ import ( "flag" "log" + "guz.one/config" "guz.one/internals" ) @@ -15,7 +16,7 @@ func main() { w := internals.StaticWriter{ DistDir: dir, StaticDir: staticDir, - Pages: internals.ROUTES, + Pages: config.ROUTES, Context: context.Background(), Logger: *log.Default(), } From 05d63e40fbfe6149cd1526a243fc4497178b9c58 Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Wed, 22 May 2024 13:54:16 -0300 Subject: [PATCH 05/12] refactor: logger into variable --- cmd/vercel/main.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/cmd/vercel/main.go b/cmd/vercel/main.go index ee86cc9..1073866 100644 --- a/cmd/vercel/main.go +++ b/cmd/vercel/main.go @@ -17,6 +17,8 @@ type VercelConfig struct { OutputDirectory string `json:"outputDirectory"` } +var logger = log.Default() + func main() { configPath := flag.String("c", "./vercel.json", "the path to the vercel.json file") staticDir := flag.String("s", "./static", "the directory to copy static files from") @@ -24,13 +26,13 @@ func main() { configFile, err := os.ReadFile(*configPath) if err != nil { - log.Fatalf("Unable to read vercel.json file due to:\n%s", err) + logger.Fatalf("Unable to read vercel.json file due to:\n%s", err) } var c VercelConfig err = json.Unmarshal(configFile, &c) if err != nil { - log.Fatalf("Unable to parse vercel.json file due to:\n%s", err) + logger.Fatalf("Unable to parse vercel.json file due to:\n%s", err) } w := internals.StaticWriter{ @@ -41,21 +43,21 @@ func main() { Logger: *log.Default(), } - log.Print("Writing static files") + logger.Print("Writing static files") err = w.WriteAll() if err != nil { - log.Fatal(err) + logger.Fatal(err) } - log.Print("Starting server") + logger.Print("Starting server") mux := http.NewServeMux() config.APIROUTES(mux) mux.Handle("/", http.FileServer(http.Dir(c.OutputDirectory))) - log.Printf("Running server at port: %v", *port) + logger.Printf("Running server at port: %v", *port) err = http.ListenAndServe(fmt.Sprintf(":%v", *port), mux) if err != nil { - log.Fatalf("Server crashed due to:\n%s", err) + logger.Fatalf("Server crashed due to:\n%s", err) } } From 35d791b2826757ae18e2531be986ca79fe7ecc3c Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Wed, 22 May 2024 13:54:39 -0300 Subject: [PATCH 06/12] feat: default server command --- main.go | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/main.go b/main.go index 7d9c12e..0345992 100644 --- a/main.go +++ b/main.go @@ -1,22 +1,69 @@ package main import ( - "context" + "flag" + "fmt" "log" "net/http" + "slices" + "strings" - "guz.one/api" - "guz.one/pages" + "guz.one/config" + "guz.one/internals" ) +var logger = log.Default() + func main() { + staticDir := flag.String("s", "./static", "the directory to copy static files from") + port := flag.Int("p", 8080, "the port to run the server") + mux := http.NewServeMux() - mux.HandleFunc("/api/hello", api.Hello) + config.APIROUTES(mux) + for _, route := range config.ROUTES { + path := "/" + strings.TrimSuffix(route.Path, ".html") + if path == "/index" { + continue + } + logger.Printf("Registering page route. page=%s route=%s", route.Path, path) + + mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) { + logger.Printf("Handling request. path=%s", r.URL.Path) + + w.Header().Add("Content-Type", "text/html") + + err := route.Component.Render(r.Context(), w) + if err != nil { + logger.Fatalf("Unable to render route %s due to %s", route.Path, err) + } + }) + } mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - err := pages.Homepage().Render(context.Background(), w) - _ = err + if r.URL.Path != "/" { + logger.Printf("Handling file server request. path=%s", r.URL.Path) + http.FileServer(http.Dir(*staticDir)).ServeHTTP(w, r) + return + } + + logger.Printf("Handling request. path=%s", r.URL.Path) + + w.Header().Add("Content-Type", "text/html") + + index := slices.IndexFunc(config.ROUTES, func(route internals.Page) bool { + return route.Path == "index.html" + }) + indexPage := config.ROUTES[index] + + err := indexPage.Component.Render(r.Context(), w) + if err != nil { + log.Fatalf("Unable to render index page due to %s", err) + } }) - log.Fatal(http.ListenAndServe(":5432", mux)) + logger.Printf("Running server at port: %v", *port) + err := http.ListenAndServe(fmt.Sprintf(":%v", *port), mux) + if err != nil { + logger.Fatalf("Server crashed due to:\n%s", err) + } } From 58adcc6e21826037988cdfc6d3f4c0cf53b6865e Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Wed, 22 May 2024 13:56:32 -0300 Subject: [PATCH 07/12] chore: add tmp and bin directories to gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 8e27bf6..57e57de 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ Session.vim .vercel *_templ.go dist +tmp +bin From 69e24e93302258a27b7dc054936a0a308a560886 Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Thu, 23 May 2024 10:44:57 -0300 Subject: [PATCH 08/12] refactor: rename module --- cmd/build/main.go | 4 ++-- cmd/vercel/main.go | 4 ++-- config/routes.go | 6 +++--- go.mod | 2 +- main.go | 4 ++-- pages/homepage.templ | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/cmd/build/main.go b/cmd/build/main.go index 79d5748..e8d73aa 100644 --- a/cmd/build/main.go +++ b/cmd/build/main.go @@ -5,8 +5,8 @@ import ( "flag" "log" - "guz.one/config" - "guz.one/internals" + "www/config" + "www/internals" ) func main() { diff --git a/cmd/vercel/main.go b/cmd/vercel/main.go index 1073866..e321e6e 100644 --- a/cmd/vercel/main.go +++ b/cmd/vercel/main.go @@ -9,8 +9,8 @@ import ( "net/http" "os" - "guz.one/config" - "guz.one/internals" + "www/config" + "www/internals" ) type VercelConfig struct { diff --git a/config/routes.go b/config/routes.go index 646f7f8..bbce360 100644 --- a/config/routes.go +++ b/config/routes.go @@ -3,9 +3,9 @@ package config import ( "net/http" - "guz.one/api" - "guz.one/internals" - "guz.one/pages" + "www/api" + "www/internals" + "www/pages" ) var ROUTES = []internals.Page{ diff --git a/go.mod b/go.mod index f970146..23152ec 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module guz.one +module www go 1.22.2 diff --git a/main.go b/main.go index 0345992..1d3228a 100644 --- a/main.go +++ b/main.go @@ -8,8 +8,8 @@ import ( "slices" "strings" - "guz.one/config" - "guz.one/internals" + "www/config" + "www/internals" ) var logger = log.Default() diff --git a/pages/homepage.templ b/pages/homepage.templ index c2b497c..55f47fa 100644 --- a/pages/homepage.templ +++ b/pages/homepage.templ @@ -1,7 +1,7 @@ package pages import ( - "guz.one/layouts" + "www/layouts" ) templ Homepage() { From 1347b177d3e153610d7a7380a415eddc06b9ad71 Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Thu, 23 May 2024 10:45:20 -0300 Subject: [PATCH 09/12] fix: mirror go.mod templ version on flake.nix --- flake.lock | 13 +++++++------ flake.nix | 5 +---- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/flake.lock b/flake.lock index c70a9ff..24f3c81 100644 --- a/flake.lock +++ b/flake.lock @@ -96,11 +96,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1716137900, - "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=", + "lastModified": 1716293225, + "narHash": "sha256-pU9ViBVE3XYb70xZx+jK6SEVphvt7xMTbm6yDIF4xPs=", "owner": "nixos", "repo": "nixpkgs", - "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1", + "rev": "3eaeaeb6b1e08a016380c279f8846e0bd8808916", "type": "github" }, "original": { @@ -171,15 +171,16 @@ "xc": "xc" }, "locked": { - "lastModified": 1716195313, - "narHash": "sha256-/7UL2Oqpp9FPYVF0SJ32/q7inHJIwZDnoSmJN/323ck=", + "lastModified": 1716034419, + "narHash": "sha256-z/sb4AlFOU20sBEAu12VSXqhHQuqvj3mUu7JTvyc1pI=", "owner": "a-h", "repo": "templ", - "rev": "e369eaf5ca569e50ae3a17931d84de9d335f6db0", + "rev": "0c14a899236d115a790b5a960b5d2b50c277c77e", "type": "github" }, "original": { "owner": "a-h", + "ref": "tags/v0.2.697", "repo": "templ", "type": "github" } diff --git a/flake.nix b/flake.nix index b5cbe15..fe8ea67 100644 --- a/flake.nix +++ b/flake.nix @@ -3,7 +3,7 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; - templ.url = "github:a-h/templ"; + templ.url = "github:a-h/templ?ref=tags/v0.2.697"; }; outputs = { self @@ -29,9 +29,6 @@ templ nodePackages_latest.vercel ]; - shellHook = " - export GOOS=linux - "; }; }); } From 604cfdaefee60a89d5ca05ce5afa984835386318 Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Thu, 23 May 2024 10:45:27 -0300 Subject: [PATCH 10/12] chore: make makefile --- makefile | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 makefile diff --git a/makefile b/makefile new file mode 100644 index 0000000..e0ef018 --- /dev/null +++ b/makefile @@ -0,0 +1,35 @@ +all: run + +dev: + air + +run: bin/www + ./bin/www + +run-vercel: bin/vercel + ./bin/vercel + +build-static: templ + go run ./cmd/build/main.go + +build-vercel: build-static + +bin/www: main.go templ + go build -o ./bin/www ./main.go + +bin/vercel: cmd/vercel/main.go templ build-vercel + go build -o ./bin/vercel ./cmd/vercel/main.go + +# For some reason "templ generate" does not detect the files, so this is a +# workaround. +TEMPL_FILES=$(patsubst %.templ, %_templ.go, $(wildcard **/*.templ)) +templ: $(TEMPL_FILES) + @echo Generating templ files +%_templ.go: %.templ + templ generate -f $^ > /dev/null + +clean: + if [[ -d "dist" ]]; then rm -r ./dist; fi + if [[ -d "tmp" ]]; then rm -r ./tmp; fi + if [[ -d "bin" ]]; then rm -r ./bin; fi + rm $(TEMPL_FILES) From 47f2fc9299a8819da907444812193d9e6e095c48 Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Thu, 23 May 2024 11:20:26 -0300 Subject: [PATCH 11/12] chore: remove templ make note to self: do not use dots on the start of projects' folders --- makefile | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/makefile b/makefile index e0ef018..80ef800 100644 --- a/makefile +++ b/makefile @@ -20,13 +20,8 @@ bin/www: main.go templ bin/vercel: cmd/vercel/main.go templ build-vercel go build -o ./bin/vercel ./cmd/vercel/main.go -# For some reason "templ generate" does not detect the files, so this is a -# workaround. -TEMPL_FILES=$(patsubst %.templ, %_templ.go, $(wildcard **/*.templ)) -templ: $(TEMPL_FILES) - @echo Generating templ files -%_templ.go: %.templ - templ generate -f $^ > /dev/null +templ: + templ generate clean: if [[ -d "dist" ]]; then rm -r ./dist; fi From 42b2f529b74553d05661c4c63a653ba485e5b806 Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Thu, 23 May 2024 11:21:00 -0300 Subject: [PATCH 12/12] ci: development commands --- makefile | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/makefile b/makefile index 80ef800..f661f8b 100644 --- a/makefile +++ b/makefile @@ -1,7 +1,24 @@ +PORT?=8080 + all: run dev: - air + air -build.pre_cmd 'make templ' \ + -build.include_ext 'templ' \ + -proxy.enabled true \ + -proxy.app_port $(PORT) \ + -proxy.proxy_port $$(($(PORT) + 1)) \ + -- -p $(PORT) + +dev-vercel: + air -build.pre_cmd 'make build-vercel' \ + -build.include_ext 'templ' \ + -build.cmd 'make build-vercel' \ + -build.bin './bin/vercel' \ + -proxy.enabled true \ + -proxy.app_port $(PORT) \ + -proxy.proxy_port $$(($(PORT) + 1)) \ + -- -p $(PORT) run: bin/www ./bin/www @@ -12,7 +29,7 @@ run-vercel: bin/vercel build-static: templ go run ./cmd/build/main.go -build-vercel: build-static +build-vercel: bin/vercel build-static bin/www: main.go templ go build -o ./bin/www ./main.go