2018-09-22 23:44:24 +02:00
|
|
|
# Taskfile Versions
|
2018-03-08 03:54:37 +02:00
|
|
|
|
|
|
|
The Taskfile syntax and features changed with time. This document explains what
|
|
|
|
changed on each version and how to upgrade your Taskfile.
|
|
|
|
|
2018-09-22 23:44:24 +02:00
|
|
|
## What the Taskfile version mean
|
2018-03-08 03:54:37 +02:00
|
|
|
|
|
|
|
The Taskfile version follows the Task version. E.g. the change to Taskfile
|
|
|
|
version `2` means that Task `v2.0.0` should be release to support it.
|
|
|
|
|
|
|
|
The `version:` key on Taskfile accepts a semver string, so either `2`, `2.0` or
|
|
|
|
`2.0.0` is accepted. You you choose to use `2.0` Task will not enable future
|
|
|
|
`2.1` features, but if you choose to use `2`, than any `2.x.x` features will be
|
|
|
|
available, but not `3.0.0+`.
|
|
|
|
|
|
|
|
## Version 1
|
|
|
|
|
2019-08-19 20:59:02 +02:00
|
|
|
*Taskfiles with Version `1` are not available on Task >= `v3.0.0` anymore.*
|
|
|
|
|
|
|
|
In the first version of the `Taskfile`, the `version:` key was not available,
|
|
|
|
because the tasks was in the root of the YAML document. Like this:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
echo:
|
|
|
|
cmds:
|
|
|
|
- echo "Hello, World!"
|
|
|
|
```
|
|
|
|
|
|
|
|
The variable priority order was also different:
|
|
|
|
|
|
|
|
1. Call variables
|
|
|
|
2. Environment
|
|
|
|
3. Task variables
|
|
|
|
4. `Taskvars.yml` variables
|
2018-03-08 03:54:37 +02:00
|
|
|
|
|
|
|
## Version 2.0
|
|
|
|
|
|
|
|
At version 2, we introduced the `version:` key, to allow us to envolve Task
|
|
|
|
with new features without breaking existing Taskfiles. The new syntax is as
|
|
|
|
follows:
|
|
|
|
|
2018-09-22 23:44:24 +02:00
|
|
|
```yaml
|
2018-03-08 03:54:37 +02:00
|
|
|
version: '2'
|
|
|
|
|
|
|
|
tasks:
|
|
|
|
echo:
|
|
|
|
cmds:
|
|
|
|
- echo "Hello, World!"
|
|
|
|
```
|
|
|
|
|
2018-03-08 11:18:27 +02:00
|
|
|
Version 2 allows you to write global variables directly in the Taskfile,
|
2018-03-08 03:54:37 +02:00
|
|
|
if you don't want to create a `Taskvars.yml`:
|
|
|
|
|
2018-09-22 23:44:24 +02:00
|
|
|
```yaml
|
2018-03-08 03:54:37 +02:00
|
|
|
version: '2'
|
|
|
|
|
|
|
|
vars:
|
|
|
|
GREETING: Hello, World!
|
|
|
|
|
|
|
|
tasks:
|
|
|
|
greet:
|
|
|
|
cmds:
|
|
|
|
- echo "{{.GREETING}}"
|
|
|
|
```
|
|
|
|
|
|
|
|
The variable priority order changed to the following:
|
|
|
|
|
|
|
|
1. Task variables
|
|
|
|
2. Call variables
|
|
|
|
3. Taskfile variables
|
|
|
|
4. Taskvars file variables
|
|
|
|
5. Environment variables
|
|
|
|
|
|
|
|
A new global option was added to configure the number of variables expansions
|
|
|
|
(which default to 2):
|
|
|
|
|
2018-09-22 23:44:24 +02:00
|
|
|
```yaml
|
2018-03-08 03:54:37 +02:00
|
|
|
version: '2'
|
|
|
|
|
|
|
|
expansions: 3
|
|
|
|
|
|
|
|
vars:
|
|
|
|
FOO: foo
|
|
|
|
BAR: bar
|
|
|
|
BAZ: baz
|
|
|
|
FOOBAR: "{{.FOO}}{{.BAR}}"
|
|
|
|
FOOBARBAZ: "{{.FOOBAR}}{{.BAZ}}"
|
|
|
|
|
|
|
|
tasks:
|
|
|
|
default:
|
|
|
|
cmds:
|
|
|
|
- echo "{{.FOOBARBAZ}}"
|
|
|
|
```
|
2018-08-19 20:47:21 +02:00
|
|
|
|
|
|
|
## Version 2.1
|
|
|
|
|
|
|
|
Version 2.1 includes a global `output` option, to allow having more control
|
|
|
|
over how commands output are printed to the console
|
|
|
|
(see [documentation][output] for more info):
|
|
|
|
|
2018-09-22 23:44:24 +02:00
|
|
|
```yaml
|
2018-08-19 20:47:21 +02:00
|
|
|
version: '2'
|
|
|
|
|
|
|
|
output: prefixed
|
|
|
|
|
|
|
|
tasks:
|
|
|
|
server:
|
|
|
|
cmds:
|
|
|
|
- go run main.go
|
|
|
|
prefix: server
|
|
|
|
```
|
|
|
|
|
|
|
|
From this version it's not also possible to ignore errors of a command or task
|
2018-09-22 23:44:24 +02:00
|
|
|
(check documentation [here][ignore_errors]):
|
2018-08-19 20:47:21 +02:00
|
|
|
|
2018-09-22 23:44:24 +02:00
|
|
|
```yaml
|
2018-08-19 20:47:21 +02:00
|
|
|
version: '2'
|
|
|
|
|
|
|
|
tasks:
|
|
|
|
example-1:
|
|
|
|
cmds:
|
|
|
|
- cmd: exit 1
|
|
|
|
ignore_error: true
|
|
|
|
- echo "This will be print"
|
|
|
|
|
|
|
|
example-2:
|
|
|
|
cmds:
|
|
|
|
- exit 1
|
|
|
|
- echo "This will be print"
|
|
|
|
ignore_error: true
|
|
|
|
```
|
|
|
|
|
2018-10-13 23:25:40 +02:00
|
|
|
## 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
|
|
|
|
```
|
|
|
|
|
2019-05-28 21:28:29 +02:00
|
|
|
## Version 2.6
|
2019-05-17 22:13:47 +02:00
|
|
|
|
2019-05-28 21:28:29 +02:00
|
|
|
Version 2.6 comes with `preconditions` stanza in tasks.
|
2019-05-17 22:13:47 +02:00
|
|
|
|
|
|
|
```yaml
|
|
|
|
version: '2'
|
|
|
|
|
|
|
|
tasks:
|
|
|
|
upload_environment:
|
|
|
|
preconditions:
|
|
|
|
- test -f .env
|
|
|
|
cmds:
|
|
|
|
- aws s3 cp .env s3://myenvironment
|
|
|
|
```
|
|
|
|
|
2018-10-13 23:25:40 +02:00
|
|
|
Please check the [documentation][includes]
|
|
|
|
|
2018-10-27 20:25:39 +02:00
|
|
|
[output]: usage.md#output-syntax
|
|
|
|
[ignore_errors]: usage.md#ignore-errors
|
|
|
|
[includes]: usage.md#including-other-taskfiles
|