1
0
mirror of https://github.com/go-task/task.git synced 2025-07-15 01:35:00 +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
6 changed files with 40 additions and 1 deletions

View File

@ -635,6 +635,11 @@ tasks:
- echo "This will print nothing" > /dev/null - 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 ## Output syntax
By default, Task just redirect the STDOUT and STDERR of the running commands By default, Task just redirect the STDOUT and STDERR of the running commands

View File

@ -17,7 +17,7 @@ var (
version = "master" 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 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. was specified, or lists all tasks if an unknown task name was specified.
@ -55,6 +55,7 @@ func main() {
watch bool watch bool
verbose bool verbose bool
silent bool silent bool
dryRun bool
dir string dir string
) )
@ -66,6 +67,7 @@ func main() {
pflag.BoolVarP(&watch, "watch", "w", false, "enables watch of the given task") pflag.BoolVarP(&watch, "watch", "w", false, "enables watch of the given task")
pflag.BoolVarP(&verbose, "verbose", "v", false, "enables verbose mode") pflag.BoolVarP(&verbose, "verbose", "v", false, "enables verbose mode")
pflag.BoolVarP(&silent, "silent", "s", false, "disables echoing") 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.StringVarP(&dir, "dir", "d", "", "sets directory of execution")
pflag.Parse() pflag.Parse()
@ -91,6 +93,7 @@ func main() {
Verbose: verbose, Verbose: verbose,
Silent: silent, Silent: silent,
Dir: dir, Dir: dir,
DryRun: dryRun,
Context: getSignalContext(), Context: getSignalContext(),

View File

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

View File

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

View File

@ -432,3 +432,25 @@ func TestExpand(t *testing.T) {
assert.NoError(t, e.Run(taskfile.Call{Task: "pwd"})) assert.NoError(t, e.Run(taskfile.Call{Task: "pwd"}))
assert.Equal(t, home, strings.TrimSpace(buff.String())) 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