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.
Top comments (0)