66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
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)
|
|
}
|