diff options
Diffstat (limited to 'gen.go')
-rw-r--r-- | gen.go | 81 |
1 files changed, 81 insertions, 0 deletions
@@ -0,0 +1,81 @@ +package main + +import ( + "bytes" + _ "embed" + "fmt" + "os" + "sigs.k8s.io/yaml" + "strings" + + "github.com/yuin/goldmark" + "html/template" +) + +type Plan struct { + Tags map[string]TagInfo `json:"tags"` + Contributions []Contribution `json:"contributions"` +} + +type TagInfo struct { + PrettyName string `json:"prettyName"` + Desc string `json:"desc"` +} + +type Contribution struct { + URLs []string `json:"urls"` + Tags []string `json:"tags"` + SponsoredBy string `json:"sponsored-by"` + Desc string `json:"desc"` +} + +func ReadPlan(filename string) (Plan, error) { + bs, err := os.ReadFile(filename) + if err != nil { + return Plan{}, err + } + var ret Plan + if err := yaml.UnmarshalStrict(bs, &ret); err != nil { + return Plan{}, err + } + return ret, nil +} + +func MarkdownToHTML(md string) (template.HTML, error) { + var html strings.Builder + if err := goldmark.Convert([]byte(md), &html); err != nil { + return template.HTML(""), err + } + return template.HTML(html.String()), nil +} + +func main() { + if err := mainWithError(); err != nil { + fmt.Fprintf(os.Stderr, "%s: error: %v\n", os.Args[0], err) + os.Exit(1) + } +} + +//go:embed plan.html.tmpl +var embedPlanHTMLTmpl string + +var tmpl = template.Must(template.New("plan.html"). + Funcs(template.FuncMap{ + "md2html": MarkdownToHTML, + }). + Parse(embedPlanHTMLTmpl)) + +func mainWithError() error { + plan, err := ReadPlan("plan.yml") + if err != nil { + return err + } + var out bytes.Buffer + if err := tmpl.Execute(&out, plan); err != nil { + return err + } + if err := os.WriteFile("plan.html", out.Bytes(), 0666); err != nil { + return err + } + return nil +} |