mirror of
https://github.com/go-task/task.git
synced 2025-04-19 12:12:27 +02:00
Use context together with errgroup
This will let other deps to be killed when one of the deps returns an error. Before this change, the process could keep running even after Task exited.
This commit is contained in:
parent
2ec6b03022
commit
c591ea4185
20
task.go
20
task.go
@ -77,20 +77,20 @@ func Run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, a := range args {
|
for _, a := range args {
|
||||||
if err = RunTask(a); err != nil {
|
if err = RunTask(context.Background(), a); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// RunTask runs a task by its name
|
// RunTask runs a task by its name
|
||||||
func RunTask(name string) error {
|
func RunTask(ctx context.Context, name string) error {
|
||||||
t, ok := Tasks[name]
|
t, ok := Tasks[name]
|
||||||
if !ok {
|
if !ok {
|
||||||
return &taskNotFoundError{name}
|
return &taskNotFoundError{name}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := t.runDeps(); err != nil {
|
if err := t.runDeps(ctx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,20 +100,20 @@ func RunTask(name string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i := range t.Cmds {
|
for i := range t.Cmds {
|
||||||
if err := t.runCommand(i); err != nil {
|
if err := t.runCommand(ctx, i); err != nil {
|
||||||
return &taskRunError{name, err}
|
return &taskRunError{name, err}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Task) runDeps() error {
|
func (t *Task) runDeps(ctx context.Context) error {
|
||||||
vars, err := t.handleVariables()
|
vars, err := t.handleVariables()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var g errgroup.Group
|
g, ctx := errgroup.WithContext(ctx)
|
||||||
|
|
||||||
for _, d := range t.Deps {
|
for _, d := range t.Deps {
|
||||||
dep := d
|
dep := d
|
||||||
@ -124,7 +124,7 @@ func (t *Task) runDeps() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = RunTask(dep); err != nil {
|
if err = RunTask(ctx, dep); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -155,7 +155,7 @@ func (t *Task) isUpToDate() bool {
|
|||||||
return generatesMinTime.After(sourcesMaxTime)
|
return generatesMinTime.After(sourcesMaxTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Task) runCommand(i int) error {
|
func (t *Task) runCommand(ctx context.Context, i int) error {
|
||||||
vars, err := t.handleVariables()
|
vars, err := t.handleVariables()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -167,7 +167,7 @@ func (t *Task) runCommand(i int) error {
|
|||||||
|
|
||||||
if strings.HasPrefix(c, "^") {
|
if strings.HasPrefix(c, "^") {
|
||||||
c = strings.TrimPrefix(c, "^")
|
c = strings.TrimPrefix(c, "^")
|
||||||
if err = RunTask(c); err != nil {
|
if err = RunTask(ctx, c); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -177,7 +177,7 @@ func (t *Task) runCommand(i int) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cmd := execext.NewCommand(context.Background(), c)
|
cmd := execext.NewCommand(ctx, c)
|
||||||
if dir != "" {
|
if dir != "" {
|
||||||
cmd.Dir = dir
|
cmd.Dir = dir
|
||||||
}
|
}
|
||||||
|
5
watch.go
5
watch.go
@ -1,6 +1,7 @@
|
|||||||
package task
|
package task
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"strings"
|
"strings"
|
||||||
@ -16,7 +17,7 @@ func WatchTasks(args []string) error {
|
|||||||
|
|
||||||
// run tasks on init
|
// run tasks on init
|
||||||
for _, a := range args {
|
for _, a := range args {
|
||||||
if err := RunTask(a); err != nil {
|
if err := RunTask(context.Background(), a); err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@ -42,7 +43,7 @@ loop:
|
|||||||
select {
|
select {
|
||||||
case <-watcher.Events:
|
case <-watcher.Events:
|
||||||
for _, a := range args {
|
for _, a := range args {
|
||||||
if err := RunTask(a); err != nil {
|
if err := RunTask(context.Background(), a); err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
continue loop
|
continue loop
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user