diff --git a/docs/taskfile_versions.md b/docs/taskfile_versions.md index 997334a7..9b74c527 100644 --- a/docs/taskfile_versions.md +++ b/docs/taskfile_versions.md @@ -128,5 +128,21 @@ tasks: ignore_error: true ``` -[output]: https://github.com/go-task/task#output-syntax -[ignore_errors]: https://github.com/go-task/task#ignore-errors +## Version 2.2 + +Version 2.2 comes with a global `includes` options to include other +Taskfiles: + +```yaml +version: '2' + +includes: + docs: ./documentation # will look for ./documentation/Taskfile.yml + docker: ./DockerTasks.yml +``` + +Please check the [documentation][includes] + +[output]: usage#output-syntax +[ignore_errors]: usage#ignore-errors +[includes]: usage#including-other-taskfiles diff --git a/internal/taskfile/version/version.go b/internal/taskfile/version/version.go index 2853c5c3..bb2176e4 100644 --- a/internal/taskfile/version/version.go +++ b/internal/taskfile/version/version.go @@ -9,6 +9,7 @@ var ( v2 = mustVersion("2") v21 = mustVersion("2.1") v22 = mustVersion("2.2") + v23 = mustVersion("2.3") ) // IsV1 returns if is a given Taskfile version is version 1 @@ -31,6 +32,11 @@ func IsV22(v *semver.Constraints) bool { return v.Check(v22) } +// IsV23 returns if is a given Taskfile version is at least version 2.3 +func IsV23(v *semver.Constraints) bool { + return v.Check(v23) +} + func mustVersion(s string) *semver.Version { v, err := semver.NewVersion(s) if err != nil { diff --git a/task.go b/task.go index e9e29045..e8ba9381 100644 --- a/task.go +++ b/task.go @@ -116,7 +116,7 @@ func (e *Executor) Setup() error { Vars: e.taskvars, Logger: e.Logger, } - case version.IsV2(v), version.IsV21(v): + case version.IsV2(v), version.IsV21(v), version.IsV22(v): e.Compiler = &compilerv2.CompilerV2{ Dir: e.Dir, Taskvars: e.taskvars, @@ -124,13 +124,16 @@ func (e *Executor) Setup() error { Expansions: e.Taskfile.Expansions, Logger: e.Logger, } - case version.IsV22(v): - return fmt.Errorf(`task: Taskfile versions greater than v2.1 not implemented in the version of Task`) + case version.IsV23(v): + return fmt.Errorf(`task: Taskfile versions greater than v2.3 not implemented in the version of Task`) } if !version.IsV21(v) && e.Taskfile.Output != "" { return fmt.Errorf(`task: Taskfile option "output" is only available starting on Taskfile version v2.1`) } + if !version.IsV22(v) && len(e.Taskfile.Includes) > 0 { + return fmt.Errorf(`task: Including Taskfiles is only available starting on Taskfile version v2.2`) + } switch e.Taskfile.Output { case "", "interleaved": e.Output = output.Interleaved{}