mirror of
https://github.com/go-task/task.git
synced 2025-04-23 12:18:57 +02:00
Allow shorter syntax for tasks with default configuration
Closes #194 Closes #240 Co-authored-by: Jaedle <dennis.jekubczyk@gmail.com>
This commit is contained in:
parent
b7bcd204b4
commit
b7b752b92f
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
- Expose `.TASK` variable in templates with the task name
|
- Expose `.TASK` variable in templates with the task name
|
||||||
([#252](https://github.com/go-task/task/issues/252)).
|
([#252](https://github.com/go-task/task/issues/252)).
|
||||||
|
- Implement short task syntax
|
||||||
|
([#194](https://github.com/go-task/task/issues/194), [#240](https://github.com/go-task/task/pull/240)).
|
||||||
|
|
||||||
# v3.0.0 - Preview 2
|
# v3.0.0 - Preview 2
|
||||||
|
|
||||||
|
@ -72,15 +72,12 @@ tasks:
|
|||||||
- cp ./install-task.sh ./docs/install.sh
|
- cp ./install-task.sh ./docs/install.sh
|
||||||
|
|
||||||
ci:
|
ci:
|
||||||
cmds:
|
|
||||||
- task: go-get
|
- task: go-get
|
||||||
vars: {REPO: golang.org/x/lint/golint}
|
vars: {REPO: golang.org/x/lint/golint}
|
||||||
- task: lint
|
- task: lint
|
||||||
- task: test
|
- task: test
|
||||||
|
|
||||||
go-get:
|
go-get: go get -u {{.REPO}}
|
||||||
cmds:
|
|
||||||
- go get -u {{.REPO}}
|
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
cmds:
|
cmds:
|
||||||
|
@ -840,6 +840,22 @@ $ task default
|
|||||||
|
|
||||||
> The `output` option can also be specified by the `--output` or `-o` flags.
|
> The `output` option can also be specified by the `--output` or `-o` flags.
|
||||||
|
|
||||||
|
## Short task syntax
|
||||||
|
|
||||||
|
Starting on Task v3, you can now write tasks with a shorter syntax if they
|
||||||
|
have the default settings (e.g. no custom `env:`, `vars:`, `silent:` , etc):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: '3'
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
build: go build -v -o ./app{{exeExt}} .
|
||||||
|
|
||||||
|
build:
|
||||||
|
- task: build
|
||||||
|
- ./app{{exeExt}} -h localhost -p 8080
|
||||||
|
```
|
||||||
|
|
||||||
## Watch tasks
|
## Watch tasks
|
||||||
|
|
||||||
If you give a `--watch` or `-w` argument, task will watch for file changes
|
If you give a `--watch` or `-w` argument, task will watch for file changes
|
||||||
|
@ -1,11 +1,51 @@
|
|||||||
package taskfile
|
package taskfile
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
)
|
||||||
|
|
||||||
// Tasks represents a group of tasks
|
// Tasks represents a group of tasks
|
||||||
type Tasks map[string]*Task
|
type Tasks map[string]*Task
|
||||||
|
|
||||||
// Task represents a task
|
// Task represents a task
|
||||||
type Task struct {
|
type Task struct {
|
||||||
Task string
|
Task string
|
||||||
|
Cmds []*Cmd
|
||||||
|
Deps []*Dep
|
||||||
|
Desc string
|
||||||
|
Summary string
|
||||||
|
Sources []string
|
||||||
|
Generates []string
|
||||||
|
Status []string
|
||||||
|
Preconditions []*Precondition
|
||||||
|
Dir string
|
||||||
|
Vars Vars
|
||||||
|
Env Vars
|
||||||
|
Silent bool
|
||||||
|
Method string
|
||||||
|
Prefix string
|
||||||
|
IgnoreError bool
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
// ErrCantUnmarshalTask is returned for invalid task YAML
|
||||||
|
ErrCantUnmarshalTask = errors.New("task: can't unmarshal task value")
|
||||||
|
)
|
||||||
|
|
||||||
|
func (t *Task) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||||||
|
var cmd Cmd
|
||||||
|
if err := unmarshal(&cmd); err == nil && cmd.Cmd != "" {
|
||||||
|
t.Cmds = append(t.Cmds, &cmd)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var cmds []*Cmd
|
||||||
|
if err := unmarshal(&cmds); err == nil && len(cmds) > 0 {
|
||||||
|
t.Cmds = cmds
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var task struct {
|
||||||
Cmds []*Cmd
|
Cmds []*Cmd
|
||||||
Deps []*Dep
|
Deps []*Dep
|
||||||
Desc string
|
Desc string
|
||||||
@ -22,3 +62,25 @@ type Task struct {
|
|||||||
Prefix string
|
Prefix string
|
||||||
IgnoreError bool `yaml:"ignore_error"`
|
IgnoreError bool `yaml:"ignore_error"`
|
||||||
}
|
}
|
||||||
|
if err := unmarshal(&task); err == nil {
|
||||||
|
t.Cmds = task.Cmds
|
||||||
|
t.Deps = task.Deps
|
||||||
|
t.Desc = task.Desc
|
||||||
|
t.Summary = task.Summary
|
||||||
|
t.Sources = task.Sources
|
||||||
|
t.Generates = task.Generates
|
||||||
|
t.Status = task.Status
|
||||||
|
t.Preconditions = task.Preconditions
|
||||||
|
t.Dir = task.Dir
|
||||||
|
t.Vars = task.Vars
|
||||||
|
t.Env = task.Env
|
||||||
|
t.Silent = task.Silent
|
||||||
|
t.Method = task.Method
|
||||||
|
t.Prefix = task.Prefix
|
||||||
|
t.IgnoreError = task.IgnoreError
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return ErrCantUnmarshalTask
|
||||||
|
}
|
||||||
|
15
task_test.go
15
task_test.go
@ -684,3 +684,18 @@ func TestDisplaysErrorOnUnsupportedVersion(t *testing.T) {
|
|||||||
assert.Equal(t, "task: Taskfile versions prior to v2 are not supported anymore", err.Error())
|
assert.Equal(t, "task: Taskfile versions prior to v2 are not supported anymore", err.Error())
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestShortTaskNotation(t *testing.T) {
|
||||||
|
const dir = "testdata/short_task_notation"
|
||||||
|
|
||||||
|
var buff bytes.Buffer
|
||||||
|
e := task.Executor{
|
||||||
|
Dir: dir,
|
||||||
|
Stdout: &buff,
|
||||||
|
Stderr: &buff,
|
||||||
|
Silent: true,
|
||||||
|
}
|
||||||
|
assert.NoError(t, e.Setup())
|
||||||
|
assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: "default"}))
|
||||||
|
assert.Equal(t, "string-slice-1\nstring-slice-2\nstring\n", buff.String())
|
||||||
|
}
|
||||||
|
12
testdata/short_task_notation/Taskfile.yml
vendored
Normal file
12
testdata/short_task_notation/Taskfile.yml
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
version: '3'
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
default:
|
||||||
|
- task: string-slice
|
||||||
|
- task: string
|
||||||
|
|
||||||
|
string-slice:
|
||||||
|
- echo "string-slice-1"
|
||||||
|
- echo "string-slice-2"
|
||||||
|
|
||||||
|
string: echo "string"
|
Loading…
x
Reference in New Issue
Block a user