Task Parameters
Task parameters make task interfaces explicit and self-documenting. Instead of burying ad-hoc shell parsing inside commands, declare inputs once and let qp validate and map values consistently.
Why Use Params
Declared params give you:
- consistent CLI UX (
qp help <task>shows usage) - fail-fast validation for required inputs
- env mapping via
env: - interpolation in commands using
{{params.<name>}}
Named Params
tasks:
build-image:
desc: Build a container image for one service
cmd: docker build -t ghcr.io/acme/{{params.service}}:{{params.tag}} .
params:
service:
desc: Service folder under cmd/
required: true
tag:
desc: Container tag
default: latestThree equivalent invocation styles:
qp build-image --service payments --tag 1.8.2
qp build-image --service=payments --tag=1.8.2
qp build-image --param service=payments --param tag=1.8.2Positional Params
Use position for args that feel natural as ordered inputs:
tasks:
deploy:
desc: Deploy one service to one environment
cmd: ./scripts/deploy.sh {{params.service}} {{params.env}}
params:
service:
required: true
position: 1
env:
required: true
position: 2qp deploy payments prodqp help deploy will show the positional contract directly in the usage line.
Variadic Positional Params
The final positional param can be variadic:
tasks:
pack:
desc: Bundle one target plus many files
cmd: ./scripts/pack.sh {{params.target}} {{params.files}}
params:
target:
required: true
position: 1
files:
required: true
position: 2
variadic: trueqp pack release dist/app.tar.gz dist/docs.tar.gz dist/sbom.jsonRules:
- Only positional params can be variadic.
- Only one variadic param is allowed.
- The variadic param must be the last positional param.
Required, Optional, and Defaults
tasks:
rollout:
desc: Trigger rollout
cmd: ./scripts/rollout.sh {{params.region}} {{params.strategy}}
params:
region:
required: true
strategy:
default: rollingqp rollout --region eu-west-1
# strategy resolves to "rolling"If a required value is missing, qp fails before executing the command.
Env Injection
env: maps a param into the command process environment:
tasks:
e2e:
desc: Run Playwright suite for one feature area
cmd: npm run test:e2e
params:
feature:
required: true
env: FEATUREqp e2e --feature billingInside the command, $FEATURE is available as billing.
Interpolation In Commands
Params can be interpolated directly:
tasks:
bench:
desc: Benchmark package
cmd: go test -bench . ./{{params.package}}
params:
package:
required: trueqp bench --package internal/features/queryParsing And Precedence
For declared params, qp resolves in this order:
- Direct flags (
--name valueor--name=value) - Repeated
--param name=value - Positional assignment by
position - Param
default
Required params with no resolved value fail fast.
Complete Worked Example
vars:
default_tag:
sh: git rev-parse --short HEAD
tasks:
deploy:
desc: Deploy selected components
cmd: ./scripts/deploy.sh {{params.region}} {{params.tag}} {{params.targets}}
params:
region:
desc: AWS region
required: true
position: 1
tag:
desc: Release tag
default: "{{vars.default_tag}}"
targets:
desc: One or more services
required: true
position: 2
variadic: true# positional region + variadic targets, tag defaults from vars
qp deploy eu-west-1 api worker
# explicit named tag override
qp deploy eu-west-1 api worker --tag v2.3.0
# fully explicit via --param form
qp deploy --param region=eu-west-1 --param tag=v2.3.0 --param targets="api worker"Next Step
Once task interfaces are clear, use DAGs and Run Expressions to compose tasks into branch-aware workflows.