Skip to content

Commit

Permalink
Allow shorter syntax for tasks with default configuration
Browse files Browse the repository at this point in the history
Closes #194
Closes #240

Co-authored-by: Jaedle <dennis.jekubczyk@gmail.com>
  • Loading branch information
andreynering and Jaedle committed Dec 8, 2019
1 parent b7bcd20 commit b7b752b
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 9 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

- Expose `.TASK` variable in templates with the task name
([#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

Expand Down
13 changes: 5 additions & 8 deletions Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,12 @@ tasks:
- cp ./install-task.sh ./docs/install.sh

ci:
cmds:
- task: go-get
vars: {REPO: golang.org/x/lint/golint}
- task: lint
- task: test
- task: go-get
vars: {REPO: golang.org/x/lint/golint}
- task: lint
- task: test

go-get:
cmds:
- go get -u {{.REPO}}
go-get: go get -u {{.REPO}}

packages:
cmds:
Expand Down
16 changes: 16 additions & 0 deletions docs/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -840,6 +840,22 @@ $ task default

> 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

If you give a `--watch` or `-w` argument, task will watch for file changes
Expand Down
64 changes: 63 additions & 1 deletion internal/taskfile/task.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package taskfile

import (
"errors"
)

// Tasks represents a group of tasks
type Tasks map[string]*Task

Expand All @@ -20,5 +24,63 @@ type Task struct {
Silent bool
Method string
Prefix string
IgnoreError bool `yaml:"ignore_error"`
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
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 `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 changes: 15 additions & 0 deletions task_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -684,3 +684,18 @@ func TestDisplaysErrorOnUnsupportedVersion(t *testing.T) {
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 changes: 12 additions & 0 deletions testdata/short_task_notation/Taskfile.yml
Original file line number Diff line number Diff line change
@@ -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"

0 comments on commit b7b752b

Please sign in to comment.