Airlock
Guides

Custom Workflows

Create workflow files with branch filtering, parallel jobs, and approval gates.

Airlock reads workflow files from .airlock/workflows/*.yml. You can create multiple workflow files — each one matches pushes based on branch patterns.

Creating a Workflow File

Create a new file in .airlock/workflows/:

# .airlock/workflows/feature.yml
name: Feature Branch Pipeline

on:
  push:
    branches:
      - 'feature/**'
      - 'fix/**'

jobs:
  default:
    name: Validate & Ship
    steps:
      - name: lint
        uses: airlock-hq/airlock/defaults/lint@main
      - name: freeze
        run: airlock exec freeze
      - name: test
        uses: airlock-hq/airlock/defaults/test@main
      - name: review
        run: 'true'
        require-approval: true
      - name: push
        uses: airlock-hq/airlock/defaults/push@main
      - name: create-pr
        uses: airlock-hq/airlock/defaults/create-pr@main

Branch Filtering

The on.push.branches field accepts glob patterns to control which pushes trigger this workflow. If multiple workflow files match a branch, all of them run. See the Workflow YAML Schema for all supported patterns.

Parallel Jobs

Split your workflow into parallel jobs using the needs keyword:

jobs:
  lint:
    name: Lint
    steps:
      - name: lint
        uses: airlock-hq/airlock/defaults/lint@main
      - name: freeze
        run: airlock exec freeze

  test:
    name: Test
    needs: [lint]
    steps:
      - name: test
        uses: airlock-hq/airlock/defaults/test@main

  describe:
    name: Describe
    needs: [lint]
    steps:
      - name: describe
        uses: airlock-hq/airlock/defaults/describe@main

  ship:
    name: Ship
    needs: [test, describe]
    steps:
      - name: review
        run: 'true'
        require-approval: true
      - name: push
        uses: airlock-hq/airlock/defaults/push@main
      - name: create-pr
        uses: airlock-hq/airlock/defaults/create-pr@main

In this example, test and describe run in parallel after lint completes. ship waits for both to finish.

Approval Gates

Add require-approval: true to any step to pause the workflow for human review:

- name: review
  run: 'true'
  require-approval: true

The Push Request moves to Awaiting Approval status. You review the results in the desktop app and click Approve to continue.

Continue on Error

Allow a step to fail without stopping the workflow:

- name: optional-check
  run: npm run typecheck
  continue-on-error: true

The step is marked as failed in the Activity tab, but the workflow continues.

Shell Selection

By default, steps use sh. Specify a different shell with the shell property:

- name: build
  run: |
    source ~/.zshrc
    nvm use
    npm run build
  shell: zsh

Available shells: sh, bash, zsh.