Conditions
Conditions limit pipeline step execution at runtime. Harness Open Source sets variables that can be used in conditions.
Harness Open Source supports multiple pipelines per repository. Creating a pipeline per trigger (push, pull request, tag) can reduce the need for conditions.
The following operators are supported:
| Type | Operator | 
|---|---|
| Comparison | ==,!= | 
| Logical | not,and,or | 
| Regex | matches | 
| String | contains,startsWith,endsWith | 
The following functions are supported:
| Type | Syntax | 
|---|---|
| Always | always() | 
| Failure | failure() | 
This pipeline runs the test step only for pull request events where the target branch is main.
kind: pipeline
spec:
  stages:
  - type: ci
    spec:
      steps:
      - name: test
        type: run
        when: |
          build.event == "pull_request"
          and
          build.target == "main"
        spec:
          container: ruby
          script: |-
            bundle install --jobs=3 --retry=3
            rake
This condition runs the step for pull request events where the target branch is not main.
        when: |
          build.event == "pull_request"
          and
          build.target != "main"
This condition runs the step only when a pull request is created based on the action.
        when: build.action == "pullreq_created"
Branch
Limit execution based on the target branch.
This pipeline runs the build step when the target branch is main, or starts with feature/.
kind: pipeline
spec:
  stages:
  - type: ci
    spec:
      steps:
      - name: build
        type: run
        when: |
          build.target == "main"
          or
          build.target startsWith "feature/"
        spec:
          container: golang
          script: |-
            go build
            go test
This condition uses a regular expression to achieve the same behavior.
        when: build.target matches "main|feature/.*"
Event
Limit execution based on the event.
This pipeline runs the clean cache step only for manually triggered pipelines.
kind: pipeline
spec:
  stages:
  - type: ci
    spec:
      steps:
      - name: clean cache
        type: run
        when: build.event == "manual"
        spec:
          container: node:18
          script: |-
            npm cache clean --force
Reference
Limit execution based on the git reference.
This pipeline runs the build step for branch names that start with feature-, or for tags.
kind: pipeline
spec:
  stages:
  - type: ci
    spec:
      steps:
      - name: build
        type: run
        when: |
          build.ref startsWith "refs/heads/feature-"
          or
          build.ref startsWith "refs/tags/"
        spec:
          container: golang
          script: |-
            go build
            go test
Status
Limit execution based on the pipeline status.
This pipeline runs the notify step only when the test step fails.
kind: pipeline
spec:
  stages:
  - type: ci
    spec:
      steps:
      - name: test
        type: run
        spec:
          container: gradle:jdk10
          script: |-
            gradle assemble
            gradle check
      - name: notify
        type: plugin
        when: failure()
        spec:
          name: slack
          inputs:
            webhook: ${{ secrets.get("slack_webhook") }}
This condition will always run the step.
        when: always()