Skip to main content

pace run

Execute a task defined in your config.pace file.

Usage​

pace run [task-name] [flags] [arguments]

Arguments​

  • task-name - Name of the task to run (optional if default task is set)

Examples​

Run the default task​

pace run

This runs the task specified with default task_name in your config.

Run a specific task​

pace run build

Run a task with arguments​

pace run greet --name=World

For a task defined as:

task greet {
args {
required ["name"]
}
command "echo 'Hello, $name!'"
}

Run with positional arguments​

pace run echo hello world

For a task defined as:

task echo {
command "echo $1 $2"
}

Run a task using an alias​

# In config.pace
alias b build
pace run b  # Same as: pace run build

Task Execution Flow​

When you run a task, Pace executes in this order:

  1. Before hooks/tasks - Tasks or hooks listed in before
  2. Main task - The task itself
  3. After hooks/tasks - Tasks or hooks listed in after
  4. Success/Failure hooks - Based on task result

Example:

task deploy {
before ["test", "build"]
command "./scripts/deploy.sh"
after ["cleanup"]
on_success ["notify_success"]
on_failure ["rollback"]
}

Execution order:

  1. test
  2. build
  3. deploy command
  4. cleanup
  5. notify_success (if succeeded) OR rollback (if failed)

Caching​

If a task has cache true:

task build {
cache true
inputs ["**/*.go"]
outputs ["bin/app"]
}

Pace will:

  1. Check if inputs have changed since last run
  2. Check if outputs exist
  3. Skip execution if nothing changed
  4. Display "Task up to date" message

To force execution even with cache:

pace run build --force

Dependencies​

Tasks automatically execute their dependencies:

task deploy {
before ["build"]
}

task build {
before ["test"]
}

Running pace run deploy will execute: test → build → deploy

Parallel Execution​

Enable parallel execution of dependencies:

task all {
before ["backend", "frontend"]
parallel true
}

Running pace run all will run backend and frontend simultaneously.

Environment Variables​

Tasks can define environment variables:

task build {
env {
"CGO_ENABLED" "0"
"GOOS" "linux"
}
command "go build"
}

These variables are available to the command and override system environment variables.

Working Directory​

Change the working directory for a task:

task frontend {
working_dir "frontend"
command "npm run build"
}

Timeout and Retries​

Configure timeouts and automatic retries:

task deploy {
command "./scripts/deploy.sh"
timeout "10m"
retry 3
retry_delay "5s"
}

If the task exceeds 10 minutes, it will be terminated. If it fails, it will retry up to 3 times with a 5-second delay between attempts.

Silent Mode​

Suppress command output:

task quiet {
silent true
command "echo 'This will not be displayed'"
}

Continue on Error​

Allow execution to continue even if a task fails:

task optional {
continue_on_error true
command "might_fail.sh"
}

Watch Mode​

If a task has watch true, it automatically runs in watch mode:

task dev {
watch true
inputs ["**/*.go"]
command "go run main.go"
}

Running pace run dev will watch the inputs and re-run on changes.

Alternatively, use the pace watch command:

pace watch build

Notes​

  • If no task name is provided, the default task runs (if configured)
  • Task names are case-sensitive
  • Arguments can be positional or named (using --name=value)
  • Dependencies are executed in order, and only once per run
  • Circular dependencies are detected and reported as errors

See Also​