Skip to content

assert

Validate conditions using Go template expressions or JavaScript. Fails the step when the condition evaluates to false.

ParameterTypeRequiredDescription
funcstringyesMust be assert
args.conditionstringyesExpression to evaluate. Supports Go templates ({{ }}) and JavaScript syntax.
args.messagestringnoError message displayed when assertion fails

OrchStep detects the syntax automatically:

PatternSyntaxExample
{{ ... }}Go Template'{{ eq vars.env "prod" }}'
No {{ }}JavaScript'vars.env === "prod"'
FieldTypeDescription
result.passedboolWhether the assertion passed
result.valueanyThe evaluated condition value
steps:
- name: verify_build
func: assert
args:
condition: '{{ eq steps.build.exit_code 0 }}'
message: "Build must succeed before deployment"
steps:
- name: check_version
func: assert
args:
condition: '{{ ne vars.version "" }}'
message: "Version must not be empty"
- name: check_count
func: assert
args:
condition: '{{ gt vars.replicas 0 }}'
message: "Must have at least 1 replica"
- name: check_combined
func: assert
args:
condition: '{{ and (eq vars.env "prod") (gt vars.replicas 2) }}'
message: "Production requires 3+ replicas"
steps:
- name: check_output
func: assert
args:
condition: '{{ contains steps.build.output "SUCCESS" }}'
message: "Build output must contain SUCCESS"
- name: check_prefix
func: assert
args:
condition: '{{ hasPrefix vars.version "v" }}'
message: "Version must start with v"
- name: check_regex
func: assert
args:
condition: '{{ regexMatch "v[0-9]+\\.[0-9]+" vars.version }}'
message: "Version must match semver pattern"
steps:
- name: check_status
func: assert
args:
condition: 'steps.api_call.status_code >= 200 && steps.api_call.status_code < 300'
message: "API call must return 2xx status"
- name: check_string
func: assert
args:
condition: 'steps.build.output.includes("SUCCESS")'
message: "Build must succeed"

For loop outputs that produce arrays, use built-in aggregation helpers:

steps:
- name: all_succeeded
func: assert
args:
condition: 'all(steps.batch_requests.outputs, "status_code", 200)'
message: "All batch requests must return 200"
- name: check_count
func: assert
args:
condition: 'count(steps.results.outputs) === 5'
message: "Should have exactly 5 results"
- name: check_average
func: assert
args:
condition: 'avg(steps.perf_tests.outputs, "response_time") < 500'
message: "Average response time must be under 500ms"

Available helpers:

HelperPurposeExample
first(array)First elementfirst(steps.items.outputs).id
last(array)Last elementlast(steps.batch.outputs).status
at(array, index)Safe index accessat(steps.results.outputs, 2).score
all(array, field, value)All items matchall(steps.tests.outputs, "passed", true)
any(array, field, value)Any item matchesany(steps.checks.outputs, "failed", true)
count(array [, field, value])Count itemscount(steps.items.outputs, "valid", true)
pluck(array, field)Extract field valuespluck(steps.users.outputs, "email")
sum(array, field)Sum numeric fieldsum(steps.sales.outputs, "amount")
avg(array, field)Average numeric fieldavg(steps.times.outputs, "duration")
tasks:
verify_deploy:
steps:
- name: health_check
func: http
args:
url: "https://{{ vars.env }}.example.com/health"
method: GET
- name: assert_healthy
func: assert
args:
condition: '{{ eq steps.health_check.status_code 200 }}'
message: "Service must be healthy after deployment"
- name: assert_version
func: assert
args:
condition: 'steps.health_check.data.version === vars.expected_version'
message: "Deployed version must match expected version"