From 6f4cf627c6f5acff7ced831028e175f58aa0a209 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Wed, 8 Oct 2025 15:02:13 -0700 Subject: [PATCH] Index generation --- build/generate-index.go | 70 +++++++++++++++++++++++++++++++++++++++++ build/index.html.tmpl | 28 +++++++++++++++++ helios/index.html | 63 +++++++++++++++++++++++++++++++++++++ justfile | 2 ++ 4 files changed, 163 insertions(+) create mode 100644 build/generate-index.go create mode 100644 build/index.html.tmpl create mode 100644 helios/index.html create mode 100644 justfile diff --git a/build/generate-index.go b/build/generate-index.go new file mode 100644 index 0000000..0dcb4b4 --- /dev/null +++ b/build/generate-index.go @@ -0,0 +1,70 @@ +package main + +import ( + "fmt" + "html/template" + "os" + "path/filepath" + "sort" +) + +type IndexData struct { + Dir string + Files []string +} + +func generateIndex(dir string) error { + entries, err := os.ReadDir(dir) + if err != nil { + return fmt.Errorf("failed to read directory: %w", err) + } + + var files []string + for _, entry := range entries { + name := entry.Name() + // Skip the index.html itself and hidden files + if name != "index.html" && !filepath.HasPrefix(name, ".") { + files = append(files, name) + } + } + sort.Strings(files) + + templatePath := "build/index.html.tmpl" + tmpl, err := template.ParseFiles(templatePath) + if err != nil { + return fmt.Errorf("failed to parse template: %w", err) + } + + indexPath := filepath.Join(dir, "index.html") + f, err := os.Create(indexPath) + if err != nil { + return fmt.Errorf("failed to create index.html: %w", err) + } + defer f.Close() + + data := IndexData{ + Dir: filepath.Base(dir), + Files: files, + } + + if err := tmpl.Execute(f, data); err != nil { + return fmt.Errorf("failed to execute template: %w", err) + } + + fmt.Printf("Generated index.html in %s\n", dir) + return nil +} + +func main() { + if len(os.Args) < 2 { + fmt.Println("Usage: generate-index [...]") + os.Exit(1) + } + + for _, dir := range os.Args[1:] { + if err := generateIndex(dir); err != nil { + fmt.Fprintf(os.Stderr, "Error processing %s: %v\n", dir, err) + os.Exit(1) + } + } +} diff --git a/build/index.html.tmpl b/build/index.html.tmpl new file mode 100644 index 0000000..bc4989f --- /dev/null +++ b/build/index.html.tmpl @@ -0,0 +1,28 @@ + + + + + Index of {{.Dir}} + + + +

Index of {{.Dir}}

+
    + {{- range .Files}} +
  • {{.}}
  • + {{- end}} +
+ + diff --git a/helios/index.html b/helios/index.html new file mode 100644 index 0000000..df4dc54 --- /dev/null +++ b/helios/index.html @@ -0,0 +1,63 @@ + + + + + Index of helios + + + +

Index of helios

+ + + diff --git a/justfile b/justfile new file mode 100644 index 0000000..e9d4651 --- /dev/null +++ b/justfile @@ -0,0 +1,2 @@ +default: + go run build/generate-index.go helios