From e4c1cc3e7765d25c4f7cedd0544405872ba37241 Mon Sep 17 00:00:00 2001 From: Rene Zbinden Date: Mon, 6 Mar 2017 22:25:50 +0100 Subject: [PATCH] add help task Signed-off-by: Andrey Nering --- README.md | 31 +++++++++++++++++++++++++++++++ task.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/README.md b/README.md index db63cf6a..dce10a8f 100644 --- a/README.md +++ b/README.md @@ -268,6 +268,37 @@ printos: - echo 'Is SH? {{IsSH}}' ``` +### Help + +Running `task help` lists all tasks with a description. The following taskfile: + +```yml +build: + desc: Build the go binary. + cmds: + - go build -v -i main.go + +test: + desc: Run all the go tests. + cmds: + - go test -race ./... + +js: + cmds: + - npm run buildjs + +css: + cmds: + - npm run buildcss +``` + +would print the following output: + +```bash +build Build the go binary. +test Run all the go tests. +``` + ## Alternatives Similar software: diff --git a/task.go b/task.go index f0df8923..74282988 100644 --- a/task.go +++ b/task.go @@ -4,8 +4,10 @@ import ( "fmt" "log" "os" + "sort" "strings" "sync" + "text/tabwriter" "github.com/go-task/task/execext" @@ -30,6 +32,7 @@ var ( type Task struct { Cmds []string Deps []string + Desc string Sources []string Generates []string Dir string @@ -73,6 +76,11 @@ func RunTask(name string) error { t, ok := Tasks[name] if !ok { + tasks := tasksWithDesc() + if len(tasks) > 0 { + help(tasks) + return nil + } return &taskNotFoundError{name} } @@ -202,3 +210,24 @@ func (t *Task) runCommand(i int) error { } return nil } + +func help(tasks []string) { + w := new(tabwriter.Writer) + // Format in tab-separated columns with a tab stop of 8. + w.Init(os.Stdout, 0, 8, 0, '\t', 0) + for _, task := range tasks { + fmt.Fprintln(w, fmt.Sprintf("%s\t%s", task, Tasks[task].Desc)) + } + w.Flush() +} + +func tasksWithDesc() []string { + tasks := []string{} + for name, task := range Tasks { + if len(task.Desc) > 0 { + tasks = append(tasks, name) + } + } + sort.Strings(tasks) + return tasks +}