mirror of
https://github.com/go-task/task.git
synced 2025-11-23 22:24:45 +02:00
feat(task): tasks can be internal (not accessible from cli)
This commit is contained in:
@@ -20,6 +20,14 @@ func (err *taskNotFoundError) Error() string {
|
|||||||
return fmt.Sprintf(`task: Task "%s" not found`, err.taskName)
|
return fmt.Sprintf(`task: Task "%s" not found`, err.taskName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type taskInternalError struct {
|
||||||
|
taskName string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (err *taskInternalError) Error() string {
|
||||||
|
return fmt.Sprintf(`task: Task "%s" is internal`, err.taskName)
|
||||||
|
}
|
||||||
|
|
||||||
type TaskRunError struct {
|
type TaskRunError struct {
|
||||||
taskName string
|
taskName string
|
||||||
err error
|
err error
|
||||||
|
|||||||
6
help.go
6
help.go
@@ -52,7 +52,9 @@ func (e *Executor) printTasks(listAll bool) {
|
|||||||
func (e *Executor) allTaskNames() (tasks []*taskfile.Task) {
|
func (e *Executor) allTaskNames() (tasks []*taskfile.Task) {
|
||||||
tasks = make([]*taskfile.Task, 0, len(e.Taskfile.Tasks))
|
tasks = make([]*taskfile.Task, 0, len(e.Taskfile.Tasks))
|
||||||
for _, task := range e.Taskfile.Tasks {
|
for _, task := range e.Taskfile.Tasks {
|
||||||
tasks = append(tasks, task)
|
if !task.Internal {
|
||||||
|
tasks = append(tasks, task)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sort.Slice(tasks, func(i, j int) bool { return tasks[i].Task < tasks[j].Task })
|
sort.Slice(tasks, func(i, j int) bool { return tasks[i].Task < tasks[j].Task })
|
||||||
return
|
return
|
||||||
@@ -61,7 +63,7 @@ func (e *Executor) allTaskNames() (tasks []*taskfile.Task) {
|
|||||||
func (e *Executor) tasksWithDesc() (tasks []*taskfile.Task) {
|
func (e *Executor) tasksWithDesc() (tasks []*taskfile.Task) {
|
||||||
tasks = make([]*taskfile.Task, 0, len(e.Taskfile.Tasks))
|
tasks = make([]*taskfile.Task, 0, len(e.Taskfile.Tasks))
|
||||||
for _, task := range e.Taskfile.Tasks {
|
for _, task := range e.Taskfile.Tasks {
|
||||||
if task.Desc != "" {
|
if !task.Internal && task.Desc != "" {
|
||||||
compiledTask, err := e.FastCompiledTask(taskfile.Call{Task: task.Task})
|
compiledTask, err := e.FastCompiledTask(taskfile.Call{Task: task.Task})
|
||||||
if err == nil {
|
if err == nil {
|
||||||
task = compiledTask
|
task = compiledTask
|
||||||
|
|||||||
7
task.go
7
task.go
@@ -64,11 +64,16 @@ type Executor struct {
|
|||||||
func (e *Executor) Run(ctx context.Context, calls ...taskfile.Call) error {
|
func (e *Executor) Run(ctx context.Context, calls ...taskfile.Call) error {
|
||||||
// check if given tasks exist
|
// check if given tasks exist
|
||||||
for _, c := range calls {
|
for _, c := range calls {
|
||||||
if _, ok := e.Taskfile.Tasks[c.Task]; !ok {
|
t, ok := e.Taskfile.Tasks[c.Task]
|
||||||
|
if !ok {
|
||||||
// FIXME: move to the main package
|
// FIXME: move to the main package
|
||||||
e.ListTasksWithDesc()
|
e.ListTasksWithDesc()
|
||||||
return &taskNotFoundError{taskName: c.Task}
|
return &taskNotFoundError{taskName: c.Task}
|
||||||
}
|
}
|
||||||
|
if t.Internal {
|
||||||
|
e.ListTasksWithDesc()
|
||||||
|
return &taskInternalError{taskName: c.Task}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if e.Summary {
|
if e.Summary {
|
||||||
|
|||||||
40
task_test.go
40
task_test.go
@@ -929,6 +929,46 @@ func TestIncludesRelativePath(t *testing.T) {
|
|||||||
assert.Contains(t, buff.String(), "testdata/includes_rel_path/common")
|
assert.Contains(t, buff.String(), "testdata/includes_rel_path/common")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestInternalTask(t *testing.T) {
|
||||||
|
const dir = "testdata/internal_task"
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
task string
|
||||||
|
expectedErr bool
|
||||||
|
expectedOutput string
|
||||||
|
}{
|
||||||
|
{"internal task via task", "task-1", false, "Hello, World!\n"},
|
||||||
|
{"internal task via dep", "task-2", false, "Hello, World!\n"},
|
||||||
|
{
|
||||||
|
"internal direct",
|
||||||
|
"task-3",
|
||||||
|
true,
|
||||||
|
"task: No tasks with description available. Try --list-all to list all tasks\n",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
var buff bytes.Buffer
|
||||||
|
e := task.Executor{
|
||||||
|
Dir: dir,
|
||||||
|
Stdout: &buff,
|
||||||
|
Stderr: &buff,
|
||||||
|
Silent: true,
|
||||||
|
}
|
||||||
|
assert.NoError(t, e.Setup())
|
||||||
|
|
||||||
|
err := e.Run(context.Background(), taskfile.Call{Task: test.task})
|
||||||
|
if test.expectedErr {
|
||||||
|
assert.Error(t, err, test.expectedErr)
|
||||||
|
} else {
|
||||||
|
assert.NoError(t, err)
|
||||||
|
}
|
||||||
|
assert.Equal(t, test.expectedOutput, buff.String())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestSupportedFileNames(t *testing.T) {
|
func TestSupportedFileNames(t *testing.T) {
|
||||||
fileNames := []string{
|
fileNames := []string{
|
||||||
"Taskfile.yml",
|
"Taskfile.yml",
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ type Task struct {
|
|||||||
Env *Vars
|
Env *Vars
|
||||||
Silent bool
|
Silent bool
|
||||||
Interactive bool
|
Interactive bool
|
||||||
|
Internal bool
|
||||||
Method string
|
Method string
|
||||||
Prefix string
|
Prefix string
|
||||||
IgnoreError bool
|
IgnoreError bool
|
||||||
@@ -63,6 +64,7 @@ func (t *Task) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
|||||||
Env *Vars
|
Env *Vars
|
||||||
Silent bool
|
Silent bool
|
||||||
Interactive bool
|
Interactive bool
|
||||||
|
Internal bool
|
||||||
Method string
|
Method string
|
||||||
Prefix string
|
Prefix string
|
||||||
IgnoreError bool `yaml:"ignore_error"`
|
IgnoreError bool `yaml:"ignore_error"`
|
||||||
@@ -85,6 +87,7 @@ func (t *Task) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
|||||||
t.Env = task.Env
|
t.Env = task.Env
|
||||||
t.Silent = task.Silent
|
t.Silent = task.Silent
|
||||||
t.Interactive = task.Interactive
|
t.Interactive = task.Interactive
|
||||||
|
t.Internal = task.Internal
|
||||||
t.Method = task.Method
|
t.Method = task.Method
|
||||||
t.Prefix = task.Prefix
|
t.Prefix = task.Prefix
|
||||||
t.IgnoreError = task.IgnoreError
|
t.IgnoreError = task.IgnoreError
|
||||||
|
|||||||
16
testdata/internal_task/Taskfile.yml
vendored
Normal file
16
testdata/internal_task/Taskfile.yml
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
version: '3'
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
|
||||||
|
task-1:
|
||||||
|
cmds:
|
||||||
|
- task: task-3
|
||||||
|
|
||||||
|
task-2:
|
||||||
|
deps:
|
||||||
|
- task-3
|
||||||
|
|
||||||
|
task-3:
|
||||||
|
internal: true
|
||||||
|
cmds:
|
||||||
|
- echo "Hello, World!"
|
||||||
@@ -57,6 +57,7 @@ func (e *Executor) compiledTask(call taskfile.Call, evaluateShVars bool) (*taskf
|
|||||||
Env: nil,
|
Env: nil,
|
||||||
Silent: origTask.Silent,
|
Silent: origTask.Silent,
|
||||||
Interactive: origTask.Interactive,
|
Interactive: origTask.Interactive,
|
||||||
|
Internal: origTask.Internal,
|
||||||
Method: r.Replace(origTask.Method),
|
Method: r.Replace(origTask.Method),
|
||||||
Prefix: r.Replace(origTask.Prefix),
|
Prefix: r.Replace(origTask.Prefix),
|
||||||
IgnoreError: origTask.IgnoreError,
|
IgnoreError: origTask.IgnoreError,
|
||||||
|
|||||||
Reference in New Issue
Block a user