arazzo: 1.0.1
info:
title: GitHub Check Mergeability and Merge a Pull Request
summary: Fetch a pull request, confirm it is mergeable, then merge it.
description: >-
A guarded merge pattern that avoids attempting to merge a pull request that
GitHub has flagged as not mergeable. The workflow fetches the pull request,
branches on its mergeable flag, and only proceeds to merge when the pull
request reports as mergeable. 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
x-realizes-capability-ids:
- BC-4200.40
x-capability-derivation:
method: 'deterministic join: sourceDescriptions -> per-tag OpenAPI -> tag/capability edge. No classification at this step.'
min_confidence: 0.7
sources:
- capability_id: BC-4200.40
capability_name: Software Construction Management
spec: github-pulls-api-openapi.yml
confidence: 0.9
model: Turbo EA Capabilities by Vincent Verdet — Turbo EA, https://github.com/vincentmakes/turbo-ea-capabilities, CC BY 4.0
sourceDescriptions:
- name: pullsApi
url: ../openapi/github-pulls-api-openapi.yml
type: openapi
workflows:
- workflowId: review-and-merge-pull-request
summary: Get a pull request, branch on its mergeable flag, and merge when ready.
description: >-
Reads the pull request, and when the mergeable flag is true performs the
merge using the configured merge method.
inputs:
type: object
required:
- githubToken
- owner
- repo
- pullNumber
properties:
githubToken:
type: string
description: A GitHub token with repo scope, passed as a Bearer credential.
owner:
type: string
description: The account owner of the repository.
repo:
type: string
description: The name of the repository.
pullNumber:
type: integer
description: The number that identifies the pull request.
mergeMethod:
type: string
description: The merge method to use (merge, squash, or rebase).
steps:
- stepId: getPull
description: >-
Fetch the pull request to read its mergeable flag before attempting a
merge.
operationId: pulls/get
parameters:
- name: Authorization
in: header
value: Bearer $inputs.githubToken
- name: owner
in: path
value: $inputs.owner
- name: repo
in: path
value: $inputs.repo
- name: pull_number
in: path
value: $inputs.pullNumber
successCriteria:
- condition: $statusCode == 200
outputs:
mergeable: $response.body#/mergeable
headSha: $response.body#/head/sha
onSuccess:
- name: isMergeable
type: goto
stepId: mergePull
criteria:
- context: $response.body
condition: $.mergeable == true
type: jsonpath
- name: notMergeable
type: end
criteria:
- context: $response.body
condition: $.mergeable != true
type: jsonpath
- stepId: mergePull
description: >-
Merge the pull request using the supplied merge method now that it has
been confirmed mergeable.
operationId: pulls/merge
parameters:
- name: Authorization
in: header
value: Bearer $inputs.githubToken
- name: owner
in: path
value: $inputs.owner
- name: repo
in: path
value: $inputs.repo
- name: pull_number
in: path
value: $inputs.pullNumber
requestBody:
contentType: application/json
payload:
merge_method: $inputs.mergeMethod
sha: $steps.getPull.outputs.headSha
successCriteria:
- condition: $statusCode == 200
outputs:
merged: $response.body#/merged
mergeSha: $response.body#/sha
outputs:
merged: $steps.mergePull.outputs.merged
mergeSha: $steps.mergePull.outputs.mergeSha
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.