github.com/tooploox/oya@v0.0.21-0.20230524103240-1cda1861aad6/cmd/internal/tasks.go (about) 1 package internal 2 3 import ( 4 "fmt" 5 "io" 6 "path/filepath" 7 "text/tabwriter" 8 9 "github.com/pkg/errors" 10 "github.com/tooploox/oya/pkg/project" 11 "github.com/tooploox/oya/pkg/task" 12 ) 13 14 func Tasks(workDir string, recurse, changeset bool, stdout, stderr io.Writer) error { 15 16 w := tabwriter.NewWriter(stdout, 0, 0, 2, ' ', 0) 17 18 installDir, err := installDir() 19 if err != nil { 20 return err 21 } 22 p, err := project.Detect(workDir, installDir) 23 if err != nil { 24 return err 25 } 26 err = p.InstallPacks() 27 if err != nil { 28 return err 29 } 30 oyafiles, err := p.ListTargets(workDir, recurse, changeset) 31 if err != nil { 32 return err 33 } 34 35 dependencies, err := p.Deps() 36 if err != nil { 37 return err 38 } 39 40 first := true 41 for _, o := range oyafiles { 42 relPath, err := filepath.Rel(workDir, o.Path) 43 if err != nil { 44 return err 45 } 46 47 err = o.Build(dependencies) 48 if err != nil { 49 return errors.Wrapf(err, "error in %v", o.Path) 50 } 51 52 if !first { 53 fmt.Fprintln(w) 54 } else { 55 first = false 56 } 57 58 fmt.Fprintf(w, "# in ./%s\n", relPath) 59 60 err = o.Tasks.ForEachSorted(func(taskName task.Name, task task.Task, meta task.Meta) error { 61 if !taskName.IsBuiltIn() { 62 if len(meta.Doc) > 0 { 63 fmt.Fprintf(w, "oya run %s\t# %s\n", taskName, meta.Doc) 64 } else { 65 fmt.Fprintf(w, "oya run %s\t\n", taskName) 66 } 67 } 68 return nil 69 }) 70 71 if err != nil { 72 return err 73 } 74 } 75 w.Flush() 76 return nil 77 }