package main import ( "log" "os" "github.com/urfave/cli" "gopkg.in/yaml.v2" ) func main() { app := &cli.App{ Name: "autoupdate", ArgsUsage: "[CONFIG_FILE] [VERSIONS_FILE]", Action: func(c *cli.Context) error { if c.NArg() != 2 { cli.ShowAppHelp(c) } var sources map[string]struct { Type string `yaml:"type"` Args map[string]interface{} `yaml:"args"` } conf, err := os.Open(c.Args().Get(0)) if err != nil { log.Fatal(err) return err } defer conf.Close() versions, err := os.Create(c.Args().Get(1)) if err != nil { log.Fatal(err) return err } defer versions.Close() err = yaml.NewDecoder(conf).Decode(&sources) if err != nil { log.Fatal(err) return err } new_versions := make(map[string]string, len(sources)) for name, source := range sources { provider, err := GetProvider(source.Type, source.Args) if err != nil { log.Fatal(err) return err } v, err := provider.GetVersion() if err != nil { log.Fatal(err) return err } new_versions[name] = v.String() } yaml.NewEncoder(versions).Encode(new_versions) return nil }, } app.Run(os.Args) }