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  }