mirror of
https://github.com/go-task/task.git
synced 2025-11-25 22:32:55 +02:00
rename Cmd.Params to Cmd.Vars
This commit is contained in:
24
command.go
24
command.go
@@ -5,17 +5,15 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Params map[string]string
|
|
||||||
|
|
||||||
type Cmd struct {
|
type Cmd struct {
|
||||||
Cmd string
|
Cmd string
|
||||||
Task string
|
Task string
|
||||||
Params Params
|
Vars Vars
|
||||||
}
|
}
|
||||||
|
|
||||||
type Dep struct {
|
type Dep struct {
|
||||||
Task string
|
Task string
|
||||||
Params Params
|
Vars Vars
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -34,12 +32,12 @@ func (c *Cmd) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var taskCall struct {
|
var taskCall struct {
|
||||||
Task string
|
Task string
|
||||||
Params Params
|
Vars Vars
|
||||||
}
|
}
|
||||||
if err := unmarshal(&taskCall); err == nil {
|
if err := unmarshal(&taskCall); err == nil {
|
||||||
c.Task = taskCall.Task
|
c.Task = taskCall.Task
|
||||||
c.Params = taskCall.Params
|
c.Vars = taskCall.Vars
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return ErrCantUnmarshalCmd
|
return ErrCantUnmarshalCmd
|
||||||
@@ -52,12 +50,12 @@ func (d *Dep) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var taskCall struct {
|
var taskCall struct {
|
||||||
Task string
|
Task string
|
||||||
Params Params
|
Vars Vars
|
||||||
}
|
}
|
||||||
if err := unmarshal(&taskCall); err == nil {
|
if err := unmarshal(&taskCall); err == nil {
|
||||||
d.Task = taskCall.Task
|
d.Task = taskCall.Task
|
||||||
d.Params = taskCall.Params
|
d.Vars = taskCall.Vars
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return ErrCantUnmarshalDep
|
return ErrCantUnmarshalDep
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ func TestCmdParse(t *testing.T) {
|
|||||||
yamlDep = `"task-name"`
|
yamlDep = `"task-name"`
|
||||||
yamlTaskCall = `
|
yamlTaskCall = `
|
||||||
task: another-task
|
task: another-task
|
||||||
params:
|
vars:
|
||||||
PARAM1: VALUE1
|
PARAM1: VALUE1
|
||||||
PARAM2: VALUE2
|
PARAM2: VALUE2
|
||||||
`
|
`
|
||||||
@@ -33,7 +33,7 @@ params:
|
|||||||
{
|
{
|
||||||
yamlTaskCall,
|
yamlTaskCall,
|
||||||
&task.Cmd{},
|
&task.Cmd{},
|
||||||
&task.Cmd{Task: "another-task", Params: task.Params{"PARAM1": "VALUE1", "PARAM2": "VALUE2"}},
|
&task.Cmd{Task: "another-task", Vars: task.Vars{"PARAM1": "VALUE1", "PARAM2": "VALUE2"}},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
yamlDep,
|
yamlDep,
|
||||||
@@ -43,7 +43,7 @@ params:
|
|||||||
{
|
{
|
||||||
yamlTaskCall,
|
yamlTaskCall,
|
||||||
&task.Dep{},
|
&task.Dep{},
|
||||||
&task.Dep{Task: "another-task", Params: task.Params{"PARAM1": "VALUE1", "PARAM2": "VALUE2"}},
|
&task.Dep{Task: "another-task", Vars: task.Vars{"PARAM1": "VALUE1", "PARAM2": "VALUE2"}},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
|
|||||||
65
task.go
65
task.go
@@ -30,10 +30,13 @@ type Executor struct {
|
|||||||
Stdout io.Writer
|
Stdout io.Writer
|
||||||
Stderr io.Writer
|
Stderr io.Writer
|
||||||
|
|
||||||
taskvars Params
|
taskvars Vars
|
||||||
watchingFiles map[string]struct{}
|
watchingFiles map[string]struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Vars is a string[string] variables map
|
||||||
|
type Vars map[string]string
|
||||||
|
|
||||||
// Tasks representas a group of tasks
|
// Tasks representas a group of tasks
|
||||||
type Tasks map[string]*Task
|
type Tasks map[string]*Task
|
||||||
|
|
||||||
@@ -46,9 +49,9 @@ type Task struct {
|
|||||||
Generates []string
|
Generates []string
|
||||||
Status []string
|
Status []string
|
||||||
Dir string
|
Dir string
|
||||||
Vars map[string]string
|
Vars Vars
|
||||||
Set string
|
Set string
|
||||||
Env map[string]string
|
Env Vars
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run runs Task
|
// Run runs Task
|
||||||
@@ -92,18 +95,18 @@ func (e *Executor) Run(args ...string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RunTask runs a task by its name
|
// RunTask runs a task by its name
|
||||||
func (e *Executor) RunTask(ctx context.Context, name string, params Params) error {
|
func (e *Executor) RunTask(ctx context.Context, name string, vars Vars) error {
|
||||||
t, ok := e.Tasks[name]
|
t, ok := e.Tasks[name]
|
||||||
if !ok {
|
if !ok {
|
||||||
return &taskNotFoundError{name}
|
return &taskNotFoundError{name}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := e.runDeps(ctx, name, params); err != nil {
|
if err := e.runDeps(ctx, name, vars); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !e.Force {
|
if !e.Force {
|
||||||
upToDate, err := e.isTaskUpToDate(ctx, name, params)
|
upToDate, err := e.isTaskUpToDate(ctx, name, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -114,14 +117,14 @@ func (e *Executor) RunTask(ctx context.Context, name string, params Params) erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i := range t.Cmds {
|
for i := range t.Cmds {
|
||||||
if err := e.runCommand(ctx, name, i, params); err != nil {
|
if err := e.runCommand(ctx, name, i, vars); err != nil {
|
||||||
return &taskRunError{name, err}
|
return &taskRunError{name, err}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Executor) runDeps(ctx context.Context, task string, params Params) error {
|
func (e *Executor) runDeps(ctx context.Context, task string, vars Vars) error {
|
||||||
g, ctx := errgroup.WithContext(ctx)
|
g, ctx := errgroup.WithContext(ctx)
|
||||||
t := e.Tasks[task]
|
t := e.Tasks[task]
|
||||||
|
|
||||||
@@ -129,12 +132,12 @@ func (e *Executor) runDeps(ctx context.Context, task string, params Params) erro
|
|||||||
d := d
|
d := d
|
||||||
|
|
||||||
g.Go(func() error {
|
g.Go(func() error {
|
||||||
dep, err := e.ReplaceVariables(d.Task, task, params)
|
dep, err := e.ReplaceVariables(d.Task, task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = e.RunTask(ctx, dep, d.Params); err != nil {
|
if err = e.RunTask(ctx, dep, d.Vars); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -147,27 +150,27 @@ func (e *Executor) runDeps(ctx context.Context, task string, params Params) erro
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Executor) isTaskUpToDate(ctx context.Context, task string, params Params) (bool, error) {
|
func (e *Executor) isTaskUpToDate(ctx context.Context, task string, vars Vars) (bool, error) {
|
||||||
t := e.Tasks[task]
|
t := e.Tasks[task]
|
||||||
|
|
||||||
if len(t.Status) > 0 {
|
if len(t.Status) > 0 {
|
||||||
return e.isUpToDateStatus(ctx, task, params)
|
return e.isUpToDateStatus(ctx, task, vars)
|
||||||
}
|
}
|
||||||
return e.isUpToDateTimestamp(ctx, task, params)
|
return e.isUpToDateTimestamp(ctx, task, vars)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Executor) isUpToDateStatus(ctx context.Context, task string, params Params) (bool, error) {
|
func (e *Executor) isUpToDateStatus(ctx context.Context, task string, vars Vars) (bool, error) {
|
||||||
t := e.Tasks[task]
|
t := e.Tasks[task]
|
||||||
|
|
||||||
environ, err := e.getEnviron(task, params)
|
environ, err := e.getEnviron(task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
dir, err := e.getTaskDir(task, params)
|
dir, err := e.getTaskDir(task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
status, err := e.ReplaceSliceVariables(t.Status, task, params)
|
status, err := e.ReplaceSliceVariables(t.Status, task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
@@ -186,23 +189,23 @@ func (e *Executor) isUpToDateStatus(ctx context.Context, task string, params Par
|
|||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Executor) isUpToDateTimestamp(ctx context.Context, task string, params Params) (bool, error) {
|
func (e *Executor) isUpToDateTimestamp(ctx context.Context, task string, vars Vars) (bool, error) {
|
||||||
t := e.Tasks[task]
|
t := e.Tasks[task]
|
||||||
|
|
||||||
if len(t.Sources) == 0 || len(t.Generates) == 0 {
|
if len(t.Sources) == 0 || len(t.Generates) == 0 {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
dir, err := e.getTaskDir(task, params)
|
dir, err := e.getTaskDir(task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
sources, err := e.ReplaceSliceVariables(t.Sources, task, params)
|
sources, err := e.ReplaceSliceVariables(t.Sources, task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
generates, err := e.ReplaceSliceVariables(t.Generates, task, params)
|
generates, err := e.ReplaceSliceVariables(t.Generates, task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
@@ -220,25 +223,25 @@ func (e *Executor) isUpToDateTimestamp(ctx context.Context, task string, params
|
|||||||
return generatesMinTime.After(sourcesMaxTime), nil
|
return generatesMinTime.After(sourcesMaxTime), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Executor) runCommand(ctx context.Context, task string, i int, params Params) error {
|
func (e *Executor) runCommand(ctx context.Context, task string, i int, vars Vars) error {
|
||||||
t := e.Tasks[task]
|
t := e.Tasks[task]
|
||||||
cmd := t.Cmds[i]
|
cmd := t.Cmds[i]
|
||||||
|
|
||||||
if cmd.Cmd == "" {
|
if cmd.Cmd == "" {
|
||||||
return e.RunTask(ctx, cmd.Task, cmd.Params)
|
return e.RunTask(ctx, cmd.Task, cmd.Vars)
|
||||||
}
|
}
|
||||||
|
|
||||||
c, err := e.ReplaceVariables(cmd.Cmd, task, params)
|
c, err := e.ReplaceVariables(cmd.Cmd, task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
dir, err := e.getTaskDir(task, params)
|
dir, err := e.getTaskDir(task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
envs, err := e.getEnviron(task, params)
|
envs, err := e.getEnviron(task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -268,14 +271,14 @@ func (e *Executor) runCommand(ctx context.Context, task string, i int, params Pa
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Executor) getTaskDir(task string, params Params) (string, error) {
|
func (e *Executor) getTaskDir(task string, vars Vars) (string, error) {
|
||||||
t := e.Tasks[task]
|
t := e.Tasks[task]
|
||||||
|
|
||||||
exeDir, err := e.ReplaceVariables(e.Dir, task, params)
|
exeDir, err := e.ReplaceVariables(e.Dir, task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
taskDir, err := e.ReplaceVariables(t.Dir, task, params)
|
taskDir, err := e.ReplaceVariables(t.Dir, task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -283,7 +286,7 @@ func (e *Executor) getTaskDir(task string, params Params) (string, error) {
|
|||||||
return filepath.Join(exeDir, taskDir), nil
|
return filepath.Join(exeDir, taskDir), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Executor) getEnviron(task string, params Params) ([]string, error) {
|
func (e *Executor) getEnviron(task string, vars Vars) ([]string, error) {
|
||||||
t := e.Tasks[task]
|
t := e.Tasks[task]
|
||||||
|
|
||||||
if t.Env == nil {
|
if t.Env == nil {
|
||||||
@@ -293,7 +296,7 @@ func (e *Executor) getEnviron(task string, params Params) ([]string, error) {
|
|||||||
envs := os.Environ()
|
envs := os.Environ()
|
||||||
|
|
||||||
for k, v := range t.Env {
|
for k, v := range t.Env {
|
||||||
env, err := e.ReplaceVariables(fmt.Sprintf("%s=%s", k, v), task, params)
|
env, err := e.ReplaceVariables(fmt.Sprintf("%s=%s", k, v), task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
20
testdata/params/Taskfile.yml
vendored
20
testdata/params/Taskfile.yml
vendored
@@ -1,26 +1,16 @@
|
|||||||
default:
|
default:
|
||||||
deps:
|
deps:
|
||||||
- task: write-file
|
- task: write-file
|
||||||
params:
|
vars: {CONTENT: Dependence1, FILE: dep1.txt}
|
||||||
CONTENT: Dependence1
|
|
||||||
FILE: dep1.txt
|
|
||||||
- task: write-file
|
- task: write-file
|
||||||
params:
|
vars: {CONTENT: Dependence2, FILE: dep2.txt}
|
||||||
CONTENT: Dependence2
|
|
||||||
FILE: dep2.txt
|
|
||||||
cmds:
|
cmds:
|
||||||
- task: write-file
|
- task: write-file
|
||||||
params:
|
vars: {CONTENT: Hello, FILE: hello.txt}
|
||||||
CONTENT: Hello
|
|
||||||
FILE: hello.txt
|
|
||||||
- task: write-file
|
- task: write-file
|
||||||
params:
|
vars: {CONTENT: World, FILE: world.txt}
|
||||||
CONTENT: World
|
|
||||||
FILE: world.txt
|
|
||||||
- task: write-file
|
- task: write-file
|
||||||
params:
|
vars: {CONTENT: "!", FILE: exclamation.txt}
|
||||||
CONTENT: "!"
|
|
||||||
FILE: exclamation.txt
|
|
||||||
|
|
||||||
write-file:
|
write-file:
|
||||||
cmds:
|
cmds:
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ func (e *Executor) handleDynamicVariableContent(value string) (string, error) {
|
|||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Executor) getVariables(task string, params Params) (map[string]string, error) {
|
func (e *Executor) getVariables(task string, vars Vars) (map[string]string, error) {
|
||||||
t := e.Tasks[task]
|
t := e.Tasks[task]
|
||||||
|
|
||||||
localVariables := make(map[string]string)
|
localVariables := make(map[string]string)
|
||||||
@@ -71,8 +71,8 @@ func (e *Executor) getVariables(task string, params Params) (map[string]string,
|
|||||||
for key, value := range getEnvironmentVariables() {
|
for key, value := range getEnvironmentVariables() {
|
||||||
localVariables[key] = value
|
localVariables[key] = value
|
||||||
}
|
}
|
||||||
if params != nil {
|
if vars != nil {
|
||||||
for k, v := range params {
|
for k, v := range vars {
|
||||||
val, err := e.handleDynamicVariableContent(v)
|
val, err := e.handleDynamicVariableContent(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -112,11 +112,11 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ReplaceSliceVariables writes vars into initial string slice
|
// ReplaceSliceVariables writes vars into initial string slice
|
||||||
func (e *Executor) ReplaceSliceVariables(initials []string, task string, params Params) ([]string, error) {
|
func (e *Executor) ReplaceSliceVariables(initials []string, task string, vars Vars) ([]string, error) {
|
||||||
result := make([]string, len(initials))
|
result := make([]string, len(initials))
|
||||||
for i, s := range initials {
|
for i, s := range initials {
|
||||||
var err error
|
var err error
|
||||||
result[i], err = e.ReplaceVariables(s, task, params)
|
result[i], err = e.ReplaceVariables(s, task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -125,8 +125,8 @@ func (e *Executor) ReplaceSliceVariables(initials []string, task string, params
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ReplaceVariables writes vars into initial string
|
// ReplaceVariables writes vars into initial string
|
||||||
func (e *Executor) ReplaceVariables(initial, task string, params Params) (string, error) {
|
func (e *Executor) ReplaceVariables(initial, task string, vars Vars) (string, error) {
|
||||||
vars, err := e.getVariables(task, params)
|
vars, err := e.getVariables(task, vars)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user