1
0
mirror of https://github.com/go-task/task.git synced 2024-12-14 10:52:43 +02:00

Merge pull request #126 from bebbs/125-dry-run

Implemented dry run mode
This commit is contained in:
Andrey Nering 2018-08-05 11:21:52 -03:00 committed by GitHub
commit 27fc4c4ca8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 40 additions and 1 deletions

View File

@ -635,6 +635,11 @@ tasks:
- echo "This will print nothing" > /dev/null
```
## Dry Run Mode
Dry run mode (`--dry`) compiles and steps through each task, printing the commands
that would be run without executing them. This is useful for debugging your Taskfiles.
## Output syntax
By default, Task just redirect the STDOUT and STDERR of the running commands

View File

@ -17,7 +17,7 @@ var (
version = "master"
)
const usage = `Usage: task [-ilfwvsd] [--init] [--list] [--force] [--watch] [--verbose] [--silent] [--dir] [task...]
const usage = `Usage: task [-ilfwvsd] [--init] [--list] [--force] [--watch] [--verbose] [--silent] [--dir] [--dry] [task...]
Runs the specified task(s). Falls back to the "default" task if no task name
was specified, or lists all tasks if an unknown task name was specified.
@ -55,6 +55,7 @@ func main() {
watch bool
verbose bool
silent bool
dryRun bool
dir string
)
@ -66,6 +67,7 @@ func main() {
pflag.BoolVarP(&watch, "watch", "w", false, "enables watch of the given task")
pflag.BoolVarP(&verbose, "verbose", "v", false, "enables verbose mode")
pflag.BoolVarP(&silent, "silent", "s", false, "disables echoing")
pflag.BoolVar(&dryRun, "dry", false, "compiles and prints tasks in the order that they would be run, without executing them")
pflag.StringVarP(&dir, "dir", "d", "", "sets directory of execution")
pflag.Parse()
@ -91,6 +93,7 @@ func main() {
Verbose: verbose,
Silent: silent,
Dir: dir,
DryRun: dryRun,
Context: getSignalContext(),

View File

@ -12,6 +12,7 @@ function __list() {
_arguments \
'(-d --dir)'{-d,--dir}': :_files' \
'(--dry)'--dry \
'(-f --force)'{-f,--force} \
'(-i --init)'{-i,--init} \
'(-l --list)'{-l,--list} \

View File

@ -35,6 +35,7 @@ type Executor struct {
Watch bool
Verbose bool
Silent bool
DryRun bool
Context context.Context
@ -211,6 +212,10 @@ func (e *Executor) runCommand(ctx context.Context, t *taskfile.Task, call taskfi
e.Logger.Errf(cmd.Cmd)
}
if e.DryRun {
return nil
}
stdOut := e.Output.WrapWriter(e.Stdout, t.Prefix)
stdErr := e.Output.WrapWriter(e.Stderr, t.Prefix)
defer stdOut.Close()

View File

@ -432,3 +432,25 @@ func TestExpand(t *testing.T) {
assert.NoError(t, e.Run(taskfile.Call{Task: "pwd"}))
assert.Equal(t, home, strings.TrimSpace(buff.String()))
}
func TestDryRun(t *testing.T) {
const dir = "testdata/dryrun"
file := filepath.Join(dir, "file.txt")
_ = os.Remove(file)
var buff bytes.Buffer
e := task.Executor{
Dir: dir,
Stdout: &buff,
Stderr: &buff,
DryRun: true,
}
assert.NoError(t, e.Setup())
assert.NoError(t, e.Run(taskfile.Call{Task: "build"}))
if _, err := os.Stat(file); err == nil {
t.Errorf("File should not exist %s", file)
}
}

3
testdata/dryrun/Taskfile.yml vendored Normal file
View File

@ -0,0 +1,3 @@
build:
cmds:
- touch file.txt