Skip to main content

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

ObjectDescription
stageInformation about the current deployment stage
pipelineInformation about the current pipeline
organizationInformation about the organization
triggerInformation about the deployment trigger, including git commit and branch context
varsStage-level variables defined in the pipeline
stepsReference outputs from other steps in the same stage

Available Functions

FunctionDescriptionResolves At
secret()Reference an organization-level secret that will be resolved at runtime by the build-planebuild-plane
stage_secret()Reference a stage-specific secret that will be resolved at runtime by the build-planebuild-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:

TypeMarker FormatExample
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 SyntaxNew 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") }}