summaryrefslogtreecommitdiff
path: root/cmd/gen-imworkingon/src_upstreams.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/gen-imworkingon/src_upstreams.go')
-rw-r--r--cmd/gen-imworkingon/src_upstreams.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/cmd/gen-imworkingon/src_upstreams.go b/cmd/gen-imworkingon/src_upstreams.go
new file mode 100644
index 0000000..03f72ec
--- /dev/null
+++ b/cmd/gen-imworkingon/src_upstreams.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+ _ "embed"
+ "fmt"
+ "net/url"
+ "os"
+ "path"
+ "strings"
+
+ "sigs.k8s.io/yaml"
+)
+
+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, fmt.Errorf("upstreams: %q: %w", filename, err)
+ }
+ var ret []Upstream
+ if err := yaml.UnmarshalStrict(bs, &ret); err != nil {
+ return nil, fmt.Errorf("upstreams: %q: %w", filename, err)
+ }
+ for i := range ret {
+ upstream := ret[i]
+ if err := upstream.Fill(); err != nil {
+ return nil, fmt.Errorf("upstreams: %q: %w", filename, err)
+ }
+ ret[i] = upstream
+ }
+ return ret, nil
+}
+
+func (upstream *Upstream) Fill() error {
+ if upstream.Name == "" {
+ u, err := url.Parse(upstream.URLs[0])
+ if err != nil {
+ return err
+ }
+ _, upstream.Name = path.Split(strings.TrimSuffix(path.Clean(u.Path), ".git"))
+ }
+ return nil
+}