Ruan Bekker
Posted on August 7, 2021
Task (aka Taskfile) is a task runner written in Go, which is similar to GNU Make, but in my opinion is a lot easier to use as you specify your tasks in yaml.
Originally posted on blog.ruanbekker.com
What to expect
In this post we will go through a quick demonstration using Task, how to install Task, as well as a couple of basic examples to get you up and running with Task.
Install
For mac, installing task::
$ brew install go-task/tap/go-task
For linux, installing task:
$ sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin
Or manual installation for arm as an example:
$ pushd /tmp
$ wget https://github.com/go-task/task/releases/download/v3.7.0/task_linux_arm.tar.gz
$ tar -xvf task_linux_arm.tar.gz
$ sudo mv task /usr/local/bin/task
$ sudo chmod +x /usr/local/bin/task
$ popd
Verify that task is installed:
$ task --version
Task version: v3.7.0
For more information check the installation page:
Usage
Task uses a default config file: Taskfile.yml
in the current working directory where you can provide context on what your tasks should do.
For a basic hello-world example, this task helloworld
will echo out hello, world!
:
version: '3'
tasks:
helloworld:
cmds:
- echo "hello, world!"
Which we call using the application task
with the argument of the task name:
$ task helloworld
task: [helloworld] echo "hello, world!"
hello, world!
For a example using environment variables, we can use it in two ways:
- per task
- globally, across all tasks
For using environment variables per task:
version: '3'
tasks:
helloworld:
cmds:
- echo "hello, $WORD!"
env:
WORD: world
Results in:
$ task helloworld
task: [helloworld] echo "hello, $WORD!"
hello, world!
For using environment variables globally across all tasks:
version: '3'
env:
WORD: world
tasks:
helloworld:
cmds:
- echo "hello, $WORD!"
env:
GREETING: hello
byeworld:
cmds:
- echo "$GREETING, $WORD!"
env:
GREETING: bye
Running our first task:
$ task helloworld
task: [helloworld] echo "hello, $WORD!"
hello, world!
And running our second task:
$ task byeworld
task: [byeworld] echo "$GREETING, $WORD!"
bye, world!
To store your environment variables in a .env
file, you can specify it as the following in your Taskfile.yml
:
version: '3'
dotenv: ['.env']
tasks:
helloworld:
cmds:
- echo "hello, $WORD!"
env:
GREETING: hello
byeworld:
cmds:
- echo "$GREETING, $WORD!"
env:
GREETING: bye
And in your .env
:
WORD=world
Then you should see your environment variables referenced from the .env
file:
$ task helloworld
task: [helloworld] echo "hello, $WORD!"
hello, world!
To run both tasks with one command, you can specify dependencies, so if we define a task with zero commands but just dependencies, it will call those tasks and execute them:
version: '3'
env:
WORD: world
tasks:
helloworld:
cmds:
- echo "hello, $WORD!"
env:
GREETING: hello
byeworld:
cmds:
- echo "$GREETING, $WORD!"
env:
GREETING: bye
all:
deps: [helloworld, byeworld]
So when we run the all
task:
$ task all
task: [helloworld] echo "hello, $WORD!"
hello, world!
task: [byeworld] echo "$GREETING, $WORD!"
bye, world!
For more usage examples, have a look at their documentation:
Thanks
Thanks for reading, if you like my content, check out my website or follow me at @ruanbekker on Twitter.
Posted on August 7, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.