diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-04-13 16:24:36 -0600 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-04-13 16:24:36 -0600 |
commit | b1d829c8dd7c115779710314dbda2b034835ff1e (patch) | |
tree | 902c4f2729c53accef0b3123d913ea84d16a1279 /gen.go | |
parent | 6adec5105142a6a746a08ad715bd5467a1a1db55 (diff) |
wip
Diffstat (limited to 'gen.go')
-rw-r--r-- | gen.go | 79 |
1 files changed, 66 insertions, 13 deletions
@@ -4,7 +4,9 @@ import ( "bytes" _ "embed" "fmt" + "net/url" "os" + "path" "sigs.k8s.io/yaml" "strings" @@ -12,7 +14,7 @@ import ( "html/template" ) -type Plan struct { +type Contribs struct { Tags map[string]TagInfo `json:"tags"` Contributions []Contribution `json:"contributions"` } @@ -29,14 +31,41 @@ type Contribution struct { Desc string `json:"desc"` } -func ReadPlan(filename string) (Plan, error) { +func ReadContribs(filename string) (Contribs, error) { bs, err := os.ReadFile(filename) if err != nil { - return Plan{}, err + return Contribs{}, err } - var ret Plan + var ret Contribs if err := yaml.UnmarshalStrict(bs, &ret); err != nil { - return Plan{}, err + return Contribs{}, err + } + return ret, nil +} + +type Upstream struct { + URLs []string `json:"urls"` + Name string `json:"name"` + Desc string `json:"desc"` +} + +func ReadUpstreams(filename string) ([]Upstream, error) { + bs, err := os.ReadFile(filename) + if err != nil { + return nil, err + } + var ret []Upstream + if err := yaml.UnmarshalStrict(bs, &ret); err != nil { + return []Upstream{}, err + } + for i := range ret { + if ret[i].Name == "" { + u, err := url.Parse(ret[i].URLs[0]) + if err != nil { + return nil, err + } + _, ret[i].Name = path.Split(path.Clean(u.Path)) + } } return ret, nil } @@ -49,6 +78,10 @@ func MarkdownToHTML(md string) (template.HTML, error) { return template.HTML(html.String()), nil } +var githubProjects = map[string]string{ + "flori/json": "ruby-json", +} + func main() { if err := mainWithError(); err != nil { fmt.Fprintf(os.Stderr, "%s: error: %v\n", os.Args[0], err) @@ -59,19 +92,39 @@ func main() { //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") + contribs, err := ReadContribs("contribs.yml") + if err != nil { + return err + } + upstreams, err := ReadUpstreams("upstreams.yml") if err != nil { return err } + tmpl := template.Must(template.New("plan.html"). + Funcs(template.FuncMap{ + "md2html": MarkdownToHTML, + "getUpstream": func(c Contribution) Upstream { + // First try any of the documented upstreams. + for _, cURL := range c.URLs { + for _, upstream := range upstreams { + for _, uURL := range upstream.URLs { + prefix := uURL + if !strings.HasSuffix(prefix, "/") { + prefix += "/" + } + if cURL == uURL || strings.HasPrefix(cURL, prefix) { + return upstream + } + } + } + } + return Upstream{URLs: []string{c.URLs[0]}, Name: "???"} + }, + }). + Parse(embedPlanHTMLTmpl)) var out bytes.Buffer - if err := tmpl.Execute(&out, plan); err != nil { + if err := tmpl.Execute(&out, contribs); err != nil { return err } if err := os.WriteFile("plan.html", out.Bytes(), 0666); err != nil { |