mirror of
https://github.com/go-task/task.git
synced 2025-06-23 00:38:19 +02:00
Support task dependencies
This commit is contained in:
37
task.go
37
task.go
@ -1,6 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
@ -14,6 +15,8 @@ import (
|
|||||||
var (
|
var (
|
||||||
CurrentDirectory, _ = osext.ExecutableFolder()
|
CurrentDirectory, _ = osext.ExecutableFolder()
|
||||||
TaskFilePath = filepath.Join(CurrentDirectory, "Taskfile.yml")
|
TaskFilePath = filepath.Join(CurrentDirectory, "Taskfile.yml")
|
||||||
|
|
||||||
|
Tasks = make(map[string]*Task)
|
||||||
)
|
)
|
||||||
|
|
||||||
type Task struct {
|
type Task struct {
|
||||||
@ -23,6 +26,14 @@ type Task struct {
|
|||||||
Generates string
|
Generates string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TaskNotFoundError struct {
|
||||||
|
taskName string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (err *TaskNotFoundError) Error() string {
|
||||||
|
return fmt.Sprintf(`Task "%s" not found`, err.taskName)
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
log.SetFlags(0)
|
log.SetFlags(0)
|
||||||
|
|
||||||
@ -33,25 +44,33 @@ func main() {
|
|||||||
|
|
||||||
file, err := ioutil.ReadFile(TaskFilePath)
|
file, err := ioutil.ReadFile(TaskFilePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
log.Fatal("Taskfile.yml not found")
|
||||||
|
}
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks := make(map[string]*Task)
|
if err = yaml.Unmarshal(file, &Tasks); err != nil {
|
||||||
if err = yaml.Unmarshal(file, &tasks); err != nil {
|
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
task, ok := tasks[args[0]]
|
if err = RunTask(args[0]); err != nil {
|
||||||
if !ok {
|
|
||||||
log.Fatalf(`Task "%s" not found`, args[0])
|
|
||||||
}
|
|
||||||
|
|
||||||
if err = RunTask(task); err != nil {
|
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunTask(t *Task) error {
|
func RunTask(name string) error {
|
||||||
|
t, ok := Tasks[name]
|
||||||
|
if !ok {
|
||||||
|
return &TaskNotFoundError{name}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, d := range t.Deps {
|
||||||
|
if err := RunTask(d); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for _, c := range t.Cmds {
|
for _, c := range t.Cmds {
|
||||||
cmd := exec.Command("/bin/sh", "-c", c)
|
cmd := exec.Command("/bin/sh", "-c", c)
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
|
Reference in New Issue
Block a user