Expression Language
The expression language allows you to use dynamic values in your pipeline definitions using the ${{ }} syntax.
Syntax
Expressions are enclosed in ${{ }} delimiters:
# Simple property access
role_name: MyRole-${{ stage.name }}
# Function calls
api_key: ${{ secret("API_KEY") }}
# Bracket notation for dynamic keys
image: ${{ stage.artifacts["Docker Build"].image_url }}
Available Objects
| Object | Description |
|---|---|
stage | Information about the current deployment stage |
pipeline | Information about the current pipeline |
organization | Information about the organization |
trigger | Information about the deployment trigger, including git commit and branch context |
vars | Stage-level variables defined in the pipeline |
steps | Reference outputs from other steps in the same stage |
Available Functions
| Function | Description | Resolves At |
|---|---|---|
secret() | Reference an organization-level secret that will be resolved at runtime by the build-plane | build-plane |
stage_secret() | Reference a stage-specific secret that will be resolved at runtime by the build-plane | build-plane |
Resolution Phases
Expressions are resolved at different phases:
- api-plane: Resolved when the deployment is requested. Values are visible in the UI.
- orchestrator: Resolved during stage execution. Used for same-stage output references.
- build-plane: Resolved at runtime just before step execution. Used for secrets to avoid exposing them.
Marker Format
When a value cannot be resolved immediately, it becomes a marker that is resolved later:
| Type | Marker Format | Example |
|---|---|---|
| Secret | [SECRET:name] | [SECRET:API_KEY] |
| Stage Secret | [STAGE_SECRET:name] | [STAGE_SECRET:DB_PASS] |
| Same-stage Output | [OUTPUT:step/field] | [OUTPUT:Deploy/service_arn] |
Migration from Legacy Syntax
The original YAML tag syntax (!output, !global_secret, etc.) has been replaced by the expression language.
| Legacy Syntax | New Expression Syntax |
|---|---|
!image_url "Docker Build" | ${{ stage.artifacts["Docker Build"].image_url }} |
!global_secret API_KEY | ${{ secret("API_KEY") }} |
!stage_secret DB_PASS | ${{ stage_secret("DB_PASS") }} |
!output step-name/field | ${{ output("step-name", "field") }} |