release-deploy
v1.0 activeRelease engineer fills release notes; automated stamping produces version + build ID; human approves; deploy webhook fires; success is announced.
Start a new run
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
Fill release notes
fill-release-notesformRelease engineer provides a summary of changes, linked PRs, and rollback plan
Inputsservice ←process.inputs.service base_version ←process.inputs.base_version release_engineer ←process.inputs.release_engineerOutputsrelease_notes (string) linked_prs (string[]) rollback_plan (string) breaking_changes (boolean) -
2
Stamp version and build
stamp-releaseautomatedCompute next semver version, build ID, and artifact tag from base version and release notes
Inputsservice ←process.inputs.service release_notes ←steps.fill-release-notes.outputs.release_notes base_version ←process.inputs.base_versionOutputsversion (string) build_id (string) artifact_tag (string)script:./examples/steps/stamp-release.rb -
3
Approve deploy to target environment
approve-deployapprovalRelease engineer or platform lead approves before the deploy webhook fires
Inputsservice ←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_changesOutputsapproved (boolean) approver_notes (string) -
4
Trigger deploy webhook
trigger-deploywebhook if steps.approve-deploy.outputs.approved == trueFire the deploy hook and wait for a synchronous status response
Inputsservice ←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_idOutputsdeploy_status (enum) deploy_url (string)url:${DEPLOY_HOOK_URL}method:POSTmode:sync -
5
Announce successful release
announce-releasenotification if steps.trigger-deploy.outputs.deploy_status == 'success'Inputsservice ←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.