Public demo. Data resets daily at 3:00 UTC. Don't store anything sensitive.

release-deploy

v1.0 active

Release engineer fills release notes; automated stamping produces version + build ID; human approves; deploy webhook fires; success is announced.

View instances
Owner
platform-team
SLA
2h
Trigger
api
Tags
devopsreleasedeploymentcicd

Inputs

service
string · required

Service name being released (e.g. api-gateway)

base_version
string · required

Current semver version to increment from (e.g. 1.4.2)

release_engineer
string · required
target_environment
enum · required
staging production

Outputs

version
string
artifact_tag
string
deploy_status
string

Steps

  1. 1

    Fill release notes

    fill-release-notes form

    Release engineer provides a summary of changes, linked PRs, and rollback plan

    Inputs
    service process.inputs.service base_version process.inputs.base_version release_engineer process.inputs.release_engineer
    Outputs
    release_notes (string) linked_prs (string[]) rollback_plan (string) breaking_changes (boolean)
  2. 2

    Stamp version and build

    stamp-release automated

    Compute next semver version, build ID, and artifact tag from base version and release notes

    Inputs
    service process.inputs.service release_notes steps.fill-release-notes.outputs.release_notes base_version process.inputs.base_version
    Outputs
    version (string) build_id (string) artifact_tag (string)
    script: ./examples/steps/stamp-release.rb
  3. 3

    Approve deploy to target environment

    approve-deploy approval

    Release engineer or platform lead approves before the deploy webhook fires

    Inputs
    service process.inputs.service version steps.stamp-release.outputs.version artifact_tag steps.stamp-release.outputs.artifact_tag target_environment process.inputs.target_environment release_notes steps.fill-release-notes.outputs.release_notes breaking_changes steps.fill-release-notes.outputs.breaking_changes
    Outputs
    approved (boolean) approver_notes (string)
  4. 4

    Trigger deploy webhook

    trigger-deploy webhook if steps.approve-deploy.outputs.approved == true

    Fire the deploy hook and wait for a synchronous status response

    Inputs
    service process.inputs.service artifact_tag steps.stamp-release.outputs.artifact_tag version steps.stamp-release.outputs.version target_environment process.inputs.target_environment build_id steps.stamp-release.outputs.build_id
    Outputs
    deploy_status (enum) deploy_url (string)
    url: ${DEPLOY_HOOK_URL}
    method: POST mode: sync
  5. 5

    Announce successful release

    announce-release notification if steps.trigger-deploy.outputs.deploy_status == 'success'
    Inputs
    service process.inputs.service version steps.stamp-release.outputs.version artifact_tag steps.stamp-release.outputs.artifact_tag target_environment process.inputs.target_environment release_engineer process.inputs.release_engineer
Raw definition
---
opensop: '0.1'
process:
  sla:
    target: 2h
    warning: 1h
  name: release-deploy
  tags:
  - devops
  - release
  - deployment
  - cicd
  owner: platform-team
  steps:
  - id: fill-release-notes
    name: Fill release notes
    type: form
    inputs:
    - from: process.inputs.service
      name: service
    - from: process.inputs.base_version
      name: base_version
    - from: process.inputs.release_engineer
      name: release_engineer
    outputs:
    - name: release_notes
      type: string
    - name: linked_prs
      type: string[]
    - name: rollback_plan
      type: string
    - name: breaking_changes
      type: boolean
    timeout: 4h
    on_timeout: notify-and-wait
    description: Release engineer provides a summary of changes, linked PRs, and rollback
      plan
  - id: stamp-release
    run: "./examples/steps/stamp-release.rb"
    name: Stamp version and build
    type: automated
    retry:
      max: 2
      backoff: exponential
    inputs:
    - from: process.inputs.service
      name: service
    - from: steps.fill-release-notes.outputs.release_notes
      name: release_notes
    - from: process.inputs.base_version
      name: base_version
    outputs:
    - name: version
      type: string
    - name: build_id
      type: string
    - name: artifact_tag
      type: string
    validation: lenient
    description: Compute next semver version, build ID, and artifact tag from base
      version and release notes
  - id: approve-deploy
    name: Approve deploy to target environment
    type: approval
    inputs:
    - from: process.inputs.service
      name: service
    - from: steps.stamp-release.outputs.version
      name: version
    - from: steps.stamp-release.outputs.artifact_tag
      name: artifact_tag
    - from: process.inputs.target_environment
      name: target_environment
    - from: steps.fill-release-notes.outputs.release_notes
      name: release_notes
    - from: steps.fill-release-notes.outputs.breaking_changes
      name: breaking_changes
    outputs:
    - name: approved
      type: boolean
    - name: approver_notes
      type: string
    timeout: 2h
    on_timeout: escalate
    description: Release engineer or platform lead approves before the deploy webhook
      fires
  - id: trigger-deploy
    name: Trigger deploy webhook
    type: webhook
    inputs:
    - from: process.inputs.service
      name: service
    - from: steps.stamp-release.outputs.artifact_tag
      name: artifact_tag
    - from: steps.stamp-release.outputs.version
      name: version
    - from: process.inputs.target_environment
      name: target_environment
    - from: steps.stamp-release.outputs.build_id
      name: build_id
    outputs:
    - name: deploy_status
      type: enum
      values:
      - success
      - failed
      - rollback
    - name: deploy_url
      type: string
    webhook:
      url: "${DEPLOY_HOOK_URL}"
      method: POST
      headers:
        Content-Type: application/json
        Authorization: Bearer ${DEPLOY_HOOK_SECRET}
      response_mode: sync
    condition: steps.approve-deploy.outputs.approved == true
    description: Fire the deploy hook and wait for a synchronous status response
  - id: announce-release
    name: Announce successful release
    type: notification
    inputs:
    - from: process.inputs.service
      name: service
    - from: steps.stamp-release.outputs.version
      name: version
    - from: steps.stamp-release.outputs.artifact_tag
      name: artifact_tag
    - from: process.inputs.target_environment
      name: target_environment
    - from: process.inputs.release_engineer
      name: release_engineer
    condition: steps.trigger-deploy.outputs.deploy_status == 'success'
  inputs:
  - name: service
    type: string
    required: true
    description: Service name being released (e.g. api-gateway)
  - name: base_version
    type: string
    required: true
    description: Current semver version to increment from (e.g. 1.4.2)
  - name: release_engineer
    type: string
    required: true
  - name: target_environment
    type: enum
    values:
    - staging
    - production
    required: true
  outputs:
  - from: steps.stamp-release.outputs.version
    name: version
    type: string
  - from: steps.stamp-release.outputs.artifact_tag
    name: artifact_tag
    type: string
  - from: steps.trigger-deploy.outputs.deploy_status
    name: deploy_status
    type: string
  trigger:
    type: api
  version: '1.0'
  on_error:
    notify:
      target: "#platform-alerts"
      channel: slack
  description: Release engineer fills release notes; automated stamping produces version
    + build ID; human approves; deploy webhook fires; success is announced.