1
0
mirror of https://github.com/go-task/task.git synced 2025-06-25 00:47:04 +02:00

Add --taskfile flag (alias -t) to allow running another Taskfile

Closes #221
This commit is contained in:
Andrey Nering
2019-07-21 10:54:09 -03:00
parent 762714de68
commit d970e93507
4 changed files with 43 additions and 22 deletions

View File

@ -7,6 +7,9 @@
([#205](https://github.com/go-task/task/pull/205)). ([#205](https://github.com/go-task/task/pull/205)).
- Create directory informed on `dir:` if it doesn't exist - Create directory informed on `dir:` if it doesn't exist
([#209](https://github.com/go-task/task/issues/209), [#211](https://github.com/go-task/task/pull/211)). ([#209](https://github.com/go-task/task/issues/209), [#211](https://github.com/go-task/task/pull/211)).
- We now have a `--taskfile` flag (alias `-t`), which can be used to run
another Taskfile (other than the default `Taskfile.yml`)
([#221](https://github.com/go-task/task/pull/221)).
## v2.5.2 - 2019-05-11 ## v2.5.2 - 2019-05-11

View File

@ -5,6 +5,7 @@ import (
"log" "log"
"os" "os"
"os/signal" "os/signal"
"path/filepath"
"syscall" "syscall"
"github.com/go-task/task/v2" "github.com/go-task/task/v2"
@ -17,7 +18,7 @@ var (
version = "master" version = "master"
) )
const usage = `Usage: task [-ilfwvsd] [--init] [--list] [--force] [--watch] [--verbose] [--silent] [--dir] [--dry] [--summary] [task...] const usage = `Usage: task [-ilfwvsd] [--init] [--list] [--force] [--watch] [--verbose] [--silent] [--dir] [--taskfile] [--dry] [--summary] [task...]
Runs the specified task(s). Falls back to the "default" task if no task name Runs the specified task(s). Falls back to the "default" task if no task name
was specified, or lists all tasks if an unknown task name was specified. was specified, or lists all tasks if an unknown task name was specified.
@ -58,6 +59,7 @@ func main() {
dry bool dry bool
summary bool summary bool
dir string dir string
entrypoint string
output string output string
) )
@ -72,6 +74,7 @@ func main() {
pflag.BoolVar(&dry, "dry", false, "compiles and prints tasks in the order that they would be run, without executing them") pflag.BoolVar(&dry, "dry", false, "compiles and prints tasks in the order that they would be run, without executing them")
pflag.BoolVar(&summary, "summary", false, "show summary about a task") pflag.BoolVar(&summary, "summary", false, "show summary about a task")
pflag.StringVarP(&dir, "dir", "d", "", "sets directory of execution") pflag.StringVarP(&dir, "dir", "d", "", "sets directory of execution")
pflag.StringVarP(&entrypoint, "taskfile", "t", "", `choose which Taskfile to run. Defaults to "Taskfile.yml"`)
pflag.StringVarP(&output, "output", "o", "", "sets output style: [interleaved|group|prefixed]") pflag.StringVarP(&output, "output", "o", "", "sets output style: [interleaved|group|prefixed]")
pflag.Parse() pflag.Parse()
@ -91,6 +94,17 @@ func main() {
return return
} }
if dir != "" && entrypoint != "" {
log.Fatal("task: You can't set both --dir and --taskfile")
return
}
if entrypoint != "" {
dir = filepath.Dir(entrypoint)
entrypoint = filepath.Base(entrypoint)
} else {
entrypoint = "Taskfile.yml"
}
e := task.Executor{ e := task.Executor{
Force: force, Force: force,
Watch: watch, Watch: watch,
@ -98,6 +112,7 @@ func main() {
Silent: silent, Silent: silent,
Dir: dir, Dir: dir,
Dry: dry, Dry: dry,
Entrypoint: entrypoint,
Summary: summary, Summary: summary,
Stdin: os.Stdin, Stdin: os.Stdin,

View File

@ -15,16 +15,13 @@ import (
var ( var (
// ErrIncludedTaskfilesCantHaveIncludes is returned when a included Taskfile contains includes // ErrIncludedTaskfilesCantHaveIncludes is returned when a included Taskfile contains includes
ErrIncludedTaskfilesCantHaveIncludes = errors.New("task: Included Taskfiles can't have includes. Please, move the include to the main Taskfile") ErrIncludedTaskfilesCantHaveIncludes = errors.New("task: Included Taskfiles can't have includes. Please, move the include to the main Taskfile")
// ErrNoTaskfileFound is returned when Taskfile.yml is not found
ErrNoTaskfileFound = errors.New(`task: No Taskfile.yml found. Use "task --init" to create a new one`)
) )
// Taskfile reads a Taskfile for a given directory // Taskfile reads a Taskfile for a given directory
func Taskfile(dir string) (*taskfile.Taskfile, error) { func Taskfile(dir string, entrypoint string) (*taskfile.Taskfile, error) {
path := filepath.Join(dir, "Taskfile.yml") path := filepath.Join(dir, entrypoint)
if _, err := os.Stat(path); err != nil { if _, err := os.Stat(path); err != nil {
return nil, ErrNoTaskfileFound return nil, fmt.Errorf(`task: No Taskfile found on "%s". Use "task --init" to create a new one`, path)
} }
t, err := readTaskfile(path) t, err := readTaskfile(path)
if err != nil { if err != nil {

View File

@ -32,7 +32,9 @@ const (
// Executor executes a Taskfile // Executor executes a Taskfile
type Executor struct { type Executor struct {
Taskfile *taskfile.Taskfile Taskfile *taskfile.Taskfile
Dir string Dir string
Entrypoint string
Force bool Force bool
Watch bool Watch bool
Verbose bool Verbose bool
@ -85,8 +87,12 @@ func (e *Executor) Run(ctx context.Context, calls ...taskfile.Call) error {
// Setup setups Executor's internal state // Setup setups Executor's internal state
func (e *Executor) Setup() error { func (e *Executor) Setup() error {
if e.Entrypoint == "" {
e.Entrypoint = "Taskfile.yml"
}
var err error var err error
e.Taskfile, err = read.Taskfile(e.Dir) e.Taskfile, err = read.Taskfile(e.Dir, e.Entrypoint)
if err != nil { if err != nil {
return err return err
} }