diff options
| author | Xe Iaso <me@xeiaso.net> | 2024-11-09 10:50:59 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-09 10:50:59 -0500 |
| commit | 20d07c7005665f8e2001b4cbd24e15ec589d9882 (patch) | |
| tree | 8b98d1446c6d9e42bc2621e633543e0420f43541 /cmd/hydrate | |
| parent | 2b349f56cb20420dd153f40f22b3654b5079100f (diff) | |
| download | xesite-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.go | 125 | ||||
| -rw-r--r-- | cmd/hydrate/templates/blog.tmpl | 10 | ||||
| -rw-r--r-- | cmd/hydrate/templates/linkpost.tmpl | 5 | ||||
| -rw-r--r-- | cmd/hydrate/templates/note.tmpl | 5 | ||||
| -rw-r--r-- | cmd/hydrate/templates/talk.tmpl | 0 | ||||
| -rw-r--r-- | cmd/hydrate/templates/xecast.tmpl | 0 |
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 |
