Files
git.taskfile.build/usage.md
T
Janik von Rotz ac64a25871 feat(task): add support for comma-separated command execution and update documentation
- Implement parsing and execution of multiple comma-separated commands
- Add whitespace trimming for individual commands
- Improve error handling with unknown command detection
- Update README.md and usage.md with examples and usage instructions
- Enhance documentation formatting and clarity
2025-11-19 12:17:30 +01:00

3.5 KiB

layout
layout
layouts/base.njk

Usage

It is recommended to use simple shell alias to run the task file: alias task='./task'

Start with showing the available commands: task help

You should get an ouput like this:


task <command> [options]

commands:

| Command              | Option     | Description                                |
|----------------------|------------|--------------------------------------------|
| all                  |            | Run all tasks.                             |
...

You can now run a task command with task install.

It is also possible to run multiple commands without parameters: task install,lint

And if there is a command group run it with task all.

Completion

With the output of task help the task commands can be completed.

Completion for bash: /etc/bash_completion.d/task_completions

#!/usr/bin/env bash

_task_completions() {
    local cur prev commands
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"

    commands=$(./task help | grep -A999 -e '---' | awk '{print $2}' | sed 's/^[[:space:]]*//' | grep -v '^$' | tr '\n' ' ')

    if [[ ${COMP_CWORD} == 1 ]]; then
        COMPREPLY=( $(compgen -W "${commands}" -- "${cur}") )
    elif [[ ${COMP_CWORD} == 2 ]]; then
        COMPREPLY=( $(compgen -f -- "${cur}") )
    else
        COMPREPLY=()
    fi
}

complete -F _task_completions task
complete -F _task_completions t

Completion for zsh: ~/.oh-my-zsh/completions/_task

#compdef task t

_arguments '1: :->tasks' '*: :_files'

case "$state" in
    tasks)
        args=$(./task help | grep -A999 -e '---' | awk '{print $2}' | sed 's/^[[:space:]]*//' | grep -v '^$' | tr '\n' ' ')
        args="$args help"
        _arguments "1:profiles:($args)"
        ;;
esac

The completion also works for task alias alias t='./task'.

Image

See taskfile.build/image for details.

Integration

The task file is intended to be integrated into the shell setup. Whenever an application uses a domain specific language (DSL) ensure the DSL-implementation calls task file command. Most often you will see DSLs in build pipelines such as the following.

GitHub Actions

Running task file commands in GitHub Actions is highly recommended. This way you can run the same CI/CD procedures in the GitHub runner as you do on your localhost.

The GitHub Actions config is simple: .github/workflows/build.yml

on:
    pull_request:
        branches:
            - 'main'
    push:
        branches:
            - 'main'

jobs:
    build:
	    name: Build
        runs-on: ubuntu-latest
        steps:
	        - name: Checkout
	          uses: actions/checkout@v4
			- name: Clone taskfile
			  run: ./task clone-taskfile
		    - name: Install uv
		      uses: astral-sh/setup-uv@v6
            - name: Install
              run: ./task install
            - name: Lint
              run: ./task lint

Jenkins

Run task file commands in Jenkins: Jenkinsfile

pipeline {

    agent any

    stages {
        stage('version') {
            steps {
                script {
                    currentBuild.description = sh (script: 'git log -1 --pretty=%B', returnStdout: true).trim()
                }
                sh './task version'
            }
        }
        stage('install') {
            steps {
                sh './task install'
            }
        }
        stage('lint') {
            steps {
                sh './task lint'
            }
        }
    }
}%