diff --git a/list.go b/list.go new file mode 100644 index 0000000..458251e --- /dev/null +++ b/list.go @@ -0,0 +1,68 @@ +package main + +import ( + "fmt" + "os" + + "github.com/urfave/cli/v2" + "go.arsenm.dev/lure/distro" + "go.arsenm.dev/lure/internal/shutils" + "go.arsenm.dev/lure/internal/shutils/decoder" + "mvdan.cc/sh/v3/expand" + "mvdan.cc/sh/v3/interp" + "mvdan.cc/sh/v3/syntax" +) + +func listCmd(c *cli.Context) error { + info, err := distro.ParseOSRelease(c.Context) + if err != nil { + log.Fatal("Error parsing os-release").Err(err).Send() + } + + pkgs, err := findPkg("*") + if err != nil { + log.Fatal("Error finding packages").Err(err).Send() + } + + for _, script := range pkgs { + fl, err := os.Open(script) + if err != nil { + log.Fatal("Error opening script").Err(err).Send() + } + + file, err := syntax.NewParser().Parse(fl, "lure.sh") + if err != nil { + log.Fatal("Error parsing script").Err(err).Send() + } + + fl.Close() + + runner, err := interp.New( + interp.Env(expand.ListEnviron()), + interp.ExecHandler(shutils.NopExec), + interp.StatHandler(shutils.NopStat), + interp.OpenHandler(shutils.NopOpen), + interp.ReadDirHandler(shutils.NopReadDir), + ) + if err != nil { + log.Fatal("Error creating runner").Err(err).Send() + } + + err = runner.Run(c.Context, file) + if err != nil { + log.Fatal("Error running script").Err(err).Send() + } + + dec := decoder.New(info, runner) + + var vars BuildVars + err = dec.DecodeVars(&vars) + if err != nil { + log.Fatal("Error decoding script variables").Err(err).Send() + } + + fmt.Println(vars.Name, vars.Version) + } + + return nil +} diff --git a/main.go b/main.go index e2ff941..e318b0c 100644 --- a/main.go +++ b/main.go @@ -67,9 +67,14 @@ func main() { { Name: "info", Usage: "Print information about a package", - Aliases: []string{"up"}, Action: infoCmd, }, + { + Name: "list", + Usage: "List LURE repo packages", + Aliases: []string{"ls"}, + Action: listCmd, + }, { Flags: []cli.Flag{ &cli.StringFlag{