aboutsummaryrefslogtreecommitdiff
path: root/cmd/hydrate
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2024-11-09 10:50:59 -0500
committerGitHub <noreply@github.com>2024-11-09 10:50:59 -0500
commit20d07c7005665f8e2001b4cbd24e15ec589d9882 (patch)
tree8b98d1446c6d9e42bc2621e633543e0420f43541 /cmd/hydrate
parent2b349f56cb20420dd153f40f22b3654b5079100f (diff)
downloadxesite-20d07c7005665f8e2001b4cbd24e15ec589d9882.tar.xz
xesite-20d07c7005665f8e2001b4cbd24e15ec589d9882.zip
Move to Kubernetes (#853)
* start to lift-and-shift to k8s Signed-off-by: Xe Iaso <me@xeiaso.net> * manifest/xesite: properly configure pod disruption budget, hostmount for xesite as a hack Signed-off-by: Xe Iaso <me@xeiaso.net> * properly slonk readiness Signed-off-by: Xe Iaso <me@xeiaso.net> * manifest: move to aeacus Signed-off-by: Xe Iaso <me@xeiaso.net> * internal: add OnionLocation middleware Signed-off-by: Xe Iaso <me@xeiaso.net> * internal/lume: jettison serving from the zipfile Signed-off-by: Xe Iaso <me@xeiaso.net> * yolo deploy to prod Signed-off-by: Xe Iaso <me@xeiaso.net> * okay use a machineproxy here Signed-off-by: Xe Iaso <me@xeiaso.net> * test CI/CD Signed-off-by: Xe Iaso <me@xeiaso.net> * try civo route Signed-off-by: Xe Iaso <me@xeiaso.net> * lol Signed-off-by: Xe Iaso <me@xeiaso.net> * plan c? Signed-off-by: Xe Iaso <me@xeiaso.net> * specify the region Signed-off-by: Xe Iaso <me@xeiaso.net> * lol Signed-off-by: Xe Iaso <me@xeiaso.net> * blog: hello again kubernetes! Signed-off-by: Xe Iaso <me@xeiaso.net> --------- Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'cmd/hydrate')
-rw-r--r--cmd/hydrate/main.go125
-rw-r--r--cmd/hydrate/templates/blog.tmpl10
-rw-r--r--cmd/hydrate/templates/linkpost.tmpl5
-rw-r--r--cmd/hydrate/templates/note.tmpl5
-rw-r--r--cmd/hydrate/templates/talk.tmpl0
-rw-r--r--cmd/hydrate/templates/xecast.tmpl0
6 files changed, 145 insertions, 0 deletions
diff --git a/cmd/hydrate/main.go b/cmd/hydrate/main.go
new file mode 100644
index 0000000..ced069c
--- /dev/null
+++ b/cmd/hydrate/main.go
@@ -0,0 +1,125 @@
+package main
+
+import (
+ "embed"
+ "flag"
+ "fmt"
+ "log"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strconv"
+ "strings"
+ "text/template"
+ "time"
+)
+
+var (
+ //go:embed templates/*.tmpl
+ templates embed.FS
+
+ date = flag.String("date", time.Now().Format(time.DateOnly), "Publication date of the post")
+
+ routing = map[string]string{
+ "blog": "lume/src/blog",
+ "linkpost": "lume/src/blog",
+ "note": "lume/src/notes",
+ "talk": "lume/src/talks",
+ "xecast": "lume/src/xecast",
+ }
+)
+
+// go run ./cmd/hydrate <kind> <slug>
+
+func init() {
+ flag.Usage = func() {
+ fmt.Fprintf(os.Stderr, "Usage: %s [flags] <kind> <slug>\n\n", filepath.Base(os.Args[0]))
+ fmt.Fprintln(os.Stderr, "Available kinds:")
+
+ templs, err := templates.ReadDir("templates")
+ if err != nil {
+ log.Panicf("can't read templates: %v", err)
+ }
+
+ for _, tmpl := range templs {
+ kind, ok := strings.CutSuffix(tmpl.Name(), filepath.Ext(tmpl.Name()))
+ if !ok {
+ log.Panicf("can't cut extension from %q", tmpl.Name())
+ }
+ fmt.Fprintln(os.Stderr, " *", kind)
+ }
+
+ fmt.Fprintln(os.Stderr)
+ fmt.Fprintln(os.Stderr, "Flags:")
+
+ flag.PrintDefaults()
+
+ os.Exit(2)
+ }
+}
+
+func main() {
+ tmpl, err := template.ParseFS(templates, "templates/*.tmpl")
+ if err != nil {
+ log.Fatalf("can't parse templates: %v", err)
+ }
+
+ flag.Parse()
+
+ if flag.NArg() != 2 {
+ flag.Usage()
+ }
+
+ kind := flag.Arg(0)
+ slug := flag.Arg(1)
+
+ year, err := yearOf(*date)
+ if err != nil {
+ log.Fatalf("can't parse year in %s: %v", *date, year)
+ }
+
+ foutName := filepath.Join(routing[kind], year, slug+".mdx")
+
+ if _, err := os.Stat(foutName); !os.IsNotExist(err) {
+ log.Printf("Potential error when trying to verify %s doesn't exist: %v", foutName, err)
+ log.Println("Does the file already exist?")
+ os.Exit(1)
+ }
+
+ fout, err := os.Create(foutName)
+ if err != nil {
+ log.Fatalf("can't create %s: %v", foutName, err)
+ }
+
+ if err := tmpl.ExecuteTemplate(fout, kind+".tmpl", struct {
+ Date string
+ }{
+ Date: *date,
+ }); err != nil {
+ log.Fatalf("error writing template: %v", err)
+ }
+
+ if err := fout.Close(); err != nil {
+ log.Fatalf("error closing output file: %v", err)
+ }
+
+ codePath, err := exec.LookPath("code")
+ if err != nil {
+ log.Println("hint: control shift p -> install code command")
+ log.Fatalf("can't find code command in $PATH: %v", err)
+ }
+
+ if err := exec.Command(codePath, foutName).Run(); err != nil {
+ log.Fatalf("can't open %s in VS Code: %v", foutName, err)
+ }
+
+}
+
+func yearOf(date string) (string, error) {
+ t, err := time.Parse(time.DateOnly, date)
+ if err != nil {
+ return "", err
+ }
+
+ return strconv.Itoa(t.Year()), nil
+}
diff --git a/cmd/hydrate/templates/blog.tmpl b/cmd/hydrate/templates/blog.tmpl
new file mode 100644
index 0000000..6d9edde
--- /dev/null
+++ b/cmd/hydrate/templates/blog.tmpl
@@ -0,0 +1,10 @@
+---
+title: ""
+desc: ""
+date: {{.Date}}
+hero:
+ ai: ""
+ file: ""
+ prompt: ""
+ social: false
+--- \ No newline at end of file
diff --git a/cmd/hydrate/templates/linkpost.tmpl b/cmd/hydrate/templates/linkpost.tmpl
new file mode 100644
index 0000000..9afcc71
--- /dev/null
+++ b/cmd/hydrate/templates/linkpost.tmpl
@@ -0,0 +1,5 @@
+---
+title: ""
+date: {{.Date}}
+redirect_to: ""
+--- \ No newline at end of file
diff --git a/cmd/hydrate/templates/note.tmpl b/cmd/hydrate/templates/note.tmpl
new file mode 100644
index 0000000..2e510a5
--- /dev/null
+++ b/cmd/hydrate/templates/note.tmpl
@@ -0,0 +1,5 @@
+---
+title: ""
+desc: ""
+date: {{.Date}}
+--- \ No newline at end of file
diff --git a/cmd/hydrate/templates/talk.tmpl b/cmd/hydrate/templates/talk.tmpl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/cmd/hydrate/templates/talk.tmpl
diff --git a/cmd/hydrate/templates/xecast.tmpl b/cmd/hydrate/templates/xecast.tmpl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/cmd/hydrate/templates/xecast.tmpl