Skip to main content

Task

This guide covers configuring continuous integration pipelines to use Task.

Example Task file

Here is an example Taskfile.yml.

Taskfile.yml
version: '3'

tasks:

first:
cmds:
- echo "this is the {{.TASK}} task"

second:
deps: [first]
cmds:
- echo "this is the {{.TASK}} task"

third:
cmds:
- echo "this is the {{.TASK}} task"
info

The below examples assume this file is checked in to the root of your repository.

Pipeline with one step

You can install Task and run task commands in a step.

kind: pipeline
spec:
stages:
- name: task example
type: ci
spec:
steps:
- name: run tasks
type: run
spec:
container: node:20
script: |
npm install -g @go-task/cli
task second
task third

Pipeline with multiple steps

If your pipeline has multiple steps, each step that runs tasks will need the task binary.

Here is a pipeline that installs the task binary to ./bin in the workspace, then runs tasks in separate steps.

kind: pipeline
spec:
stages:
- name: task example
type: ci
spec:
steps:
- name: install task
type: run
spec:
container: alpine
script: |
apk add curl
sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d
./bin/task --version

- name: second task
type: run
spec:
container: alpine
script: |
./bin/task second

- name: third task
type: run
spec:
container: alpine
script: |
./bin/task third

Temporary volume

If you don't want to install the task binary in the workspace, you can install it in a temporary volume.

kind: pipeline
spec:
stages:
- name: task example
type: ci
spec:
volumes:
- name: shared
type: temp
spec: {}
steps:
- name: install task
type: run
spec:
mount:
- name: shared
path: /shared
container: alpine
script: |
apk add curl
sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /shared

- name: task version
type: run
spec:
mount:
- name: shared
path: /shared
container: alpine
script: |
/shared/task --version