arazzo: 1.0.1 info: title: Azure DevOps Provision a Release Definition and Cut a Release summary: Create a release definition, confirm it, and create a first release from it. description: >- Stands up a new classic release pipeline and cuts an initial release. The workflow creates a release definition from a supplied definition body, fetches it by the returned ID to confirm the environments and artifact sources, and then creates a first release from that definition bound to a build artifact. Every step spells out its request inline so the flow can be read and executed without opening the underlying OpenAPI description. version: 1.0.0 sourceDescriptions: - name: releasesApi url: ../openapi/azure-devops-releases-api-openapi.yml type: openapi workflows: - workflowId: provision-release-definition summary: Create a release definition, confirm it, and cut a first release. description: >- Creates a release definition, retrieves it to confirm creation, and creates an initial release from it. inputs: type: object required: - apiVersion - definition - artifactAlias - artifactInstanceId - artifactInstanceName properties: apiVersion: type: string description: Azure DevOps REST API version (e.g. 7.1). definition: type: object description: >- Release definition body matching the ReleaseDefinition schema (name, environments, artifacts, etc.). artifactAlias: type: string description: Artifact alias as defined in the release definition. artifactInstanceId: type: string description: Build ID or artifact version ID to deploy in the first release. artifactInstanceName: type: string description: Build number or version string for the artifact. accessToken: type: string description: Azure DevOps bearer (OAuth 2.0) access token. steps: - stepId: createDefinition description: >- Create the release definition from the supplied definition body. operationId: releaseDefinitions_create parameters: - name: api-version in: query value: $inputs.apiVersion requestBody: contentType: application/json payload: $inputs.definition successCriteria: - condition: $statusCode == 200 outputs: definitionId: $response.body#/id definitionName: $response.body#/name - stepId: confirmDefinition description: >- Fetch the release definition by ID to confirm it was created and capture its revision. operationId: releaseDefinitions_get parameters: - name: api-version in: query value: $inputs.apiVersion - name: definitionId in: path value: $steps.createDefinition.outputs.definitionId successCriteria: - condition: $statusCode == 200 outputs: revision: $response.body#/revision - stepId: createFirstRelease description: >- Create a first release from the newly provisioned definition, binding the named artifact to the requested build instance. operationId: releases_create parameters: - name: api-version in: query value: $inputs.apiVersion requestBody: contentType: application/json payload: definitionId: $steps.createDefinition.outputs.definitionId artifacts: - alias: $inputs.artifactAlias instanceReference: id: $inputs.artifactInstanceId name: $inputs.artifactInstanceName isDraft: false successCriteria: - condition: $statusCode == 200 outputs: releaseId: $response.body#/id outputs: definitionId: $steps.createDefinition.outputs.definitionId releaseId: $steps.createFirstRelease.outputs.releaseId