diff --git a/internal/taskfile/read/taskfile.go b/internal/taskfile/read/taskfile.go index 1a310eda..d7ed4b9e 100644 --- a/internal/taskfile/read/taskfile.go +++ b/internal/taskfile/read/taskfile.go @@ -6,6 +6,7 @@ import ( "os" "path/filepath" "runtime" + "strings" "github.com/go-task/task/v2/internal/taskfile" @@ -45,6 +46,19 @@ func Taskfile(dir string, entrypoint string) (*taskfile.Taskfile, error) { return nil, ErrIncludedTaskfilesCantHaveIncludes } + includedTaskDirectory := filepath.Dir(path) + includedTaskFileName := strings.TrimSuffix(filepath.Base(path), filepath.Ext(path)) + path = filepath.Join(includedTaskDirectory, fmt.Sprintf("%s_%s.yml", includedTaskFileName, runtime.GOOS)) + if _, err = os.Stat(path); err == nil { + osIncludedTaskfile, err := readTaskfile(path) + if err != nil { + return nil, err + } + if err = taskfile.Merge(includedTaskfile, osIncludedTaskfile); err != nil { + return nil, err + } + } + for _, task := range includedTaskfile.Tasks { task.Dir = filepath.Join(includedTask.Dir, task.Dir) }