diff --git a/descriptions/api.github.com/api.github.com.2022-11-28.json b/descriptions/api.github.com/api.github.com.2022-11-28.json index a545ddaf3f..1cce2eb0b3 100644 --- a/descriptions/api.github.com/api.github.com.2022-11-28.json +++ b/descriptions/api.github.com/api.github.com.2022-11-28.json @@ -35066,6 +35066,139 @@ } } }, + "/repos/{owner}/{repo}/actions/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a repository", + "description": "Lists the active concurrency groups for a repository.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/per-page" + }, + { + "$ref": "#/components/parameters/pagination-after" + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group-list" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group-list" + } + } + } + }, + "headers": { + "Link": { + "$ref": "#/components/headers/link" + } + } + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": { + "get": { + "summary": "Get a concurrency group for a repository", + "description": "Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.\n\nOptionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.\n\nWhen using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/get-concurrency-group-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/concurrency-group-name" + }, + { + "name": "ahead_of_run", + "description": "Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with `ahead_of_job`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + }, + { + "name": "ahead_of_job", + "description": "Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with `ahead_of_run`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group" + } + } + } + } + }, + "404": { + "$ref": "#/components/responses/not_found" + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/jobs/{job_id}": { "get": { "summary": "Get a job for a workflow run", @@ -37477,6 +37610,74 @@ } } }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a workflow run", + "description": "Lists all concurrency groups associated with a workflow run or its jobs.\n\nThe set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the `group_members` array will be empty.\n`total_count` reflects the number of groups the run participates in by\nconfiguration, not the number with active items.\n\nThis differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`,\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.\n\nResults are sorted by group name and support cursor-based pagination via\n`before` and `after`. The `after` cursor paginates forward only and does\nnot emit a `rel=\"prev\"` Link; use `before` to page backward from a\nforward page's `next` cursor.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-workflow-run", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/run-id" + }, + { + "$ref": "#/components/parameters/per-page" + }, + { + "$ref": "#/components/parameters/pagination-before" + }, + { + "$ref": "#/components/parameters/pagination-after" + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group-run-list" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group-run-list" + } + } + } + }, + "headers": { + "Link": { + "$ref": "#/components/headers/link" + } + } + }, + "404": { + "$ref": "#/components/responses/not_found" + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": { "post": { "summary": "Review custom deployment protection rules for a workflow run", @@ -128912,6 +129113,134 @@ "actions_caches" ] }, + "concurrency-group-list": { + "title": "Concurrency Group List", + "description": "A list of active concurrency groups for a repository.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "last_acquired_at" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "last_acquired_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + } + } + } + } + }, + "concurrency-group": { + "title": "Concurrency Group", + "description": "A concurrency group with the workflow runs and jobs that are either currently holding\nor waiting for the concurrency group lease.", + "type": "object", + "required": [ + "group_name", + "group_url", + "total_count", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "total_count": { + "type": "integer" + }, + "group_members": { + "type": "array", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + }, "job": { "title": "Job", "description": "Information of a job execution in a workflow run", @@ -129646,6 +129975,119 @@ "comment" ] }, + "concurrency-group-run-list": { + "title": "Concurrency Group Run List", + "description": "A list of concurrency groups associated with a workflow run.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer", + "description": "The total number of concurrency groups this workflow run participates in,\nderived from the run's configuration. This count is not filtered by\nwhether the run currently holds or is waiting in each group, so it can\ninclude groups whose `group_members` array is empty (for example, when\nthe run has already released its lease in that group)." + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group. May return 404 if the group\nhas no active items at the time it is requested, since the\nget-by-name endpoint reports the live repo-wide state of a group\nwhile this endpoint lists groups associated with a run by\nconfiguration." + }, + "group_members": { + "type": "array", + "description": "Items belonging to this workflow run that are either currently holding or\nwaiting for the concurrency group lease. May be empty if the run no\nlonger has any active or queued items in this group.", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status", + "position", + "position_url" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "position": { + "type": "integer", + "description": "Queue position. 0 means the item holds the concurrency lease (in_progress), 1 or higher means queued (pending)." + }, + "position_url": { + "type": "string", + "format": "uri", + "description": "API URL to get items ahead of this item in the concurrency group." + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + } + } + } + }, "review-custom-gates-comment-required": { "type": "object", "properties": { @@ -303317,6 +303759,57 @@ ] } }, + "concurrency-group-list": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "last_acquired_at": "2026-01-15T16:14:23Z" + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "last_acquired_at": "2026-01-15T16:13:55Z" + } + ] + } + }, + "concurrency-group": { + "value": { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "total_count": 3, + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress" + }, + { + "run_id": 30433643, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433643", + "status": "pending" + }, + { + "run_id": 30433644, + "run_name": "Deploy hotfix", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644", + "job_id": 798245260, + "job_name": "deploy", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260", + "status": "pending" + } + ] + } + }, "job": { "value": { "id": 399444496, @@ -304105,6 +304598,47 @@ ] } }, + "concurrency-group-run-list": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress", + "position": 0, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642" + } + ] + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "pending", + "position": 2, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260", + "job_id": 798245260, + "job_name": "build", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260" + } + ] + } + ] + } + }, "pending-deployment-items": { "value": [ { @@ -324239,6 +324773,15 @@ "type": "integer" } }, + "concurrency-group-name": { + "name": "concurrency_group_name", + "description": "The name of the concurrency group.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, "job-id": { "name": "job_id", "description": "The unique identifier of the job.", diff --git a/descriptions/api.github.com/api.github.com.2022-11-28.yaml b/descriptions/api.github.com/api.github.com.2022-11-28.yaml index c1277e1dbb..2b6df4ee16 100644 --- a/descriptions/api.github.com/api.github.com.2022-11-28.yaml +++ b/descriptions/api.github.com/api.github.com.2022-11-28.yaml @@ -25646,6 +25646,111 @@ paths: enabledForGitHubApps: true category: actions subcategory: cache + "/repos/{owner}/{repo}/actions/concurrency_groups": + get: + summary: List concurrency groups for a repository + description: |- + Lists the active concurrency groups for a repository. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/per-page" + - "$ref": "#/components/parameters/pagination-after" + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group-list" + examples: + default: + "$ref": "#/components/examples/concurrency-group-list" + headers: + Link: + "$ref": "#/components/headers/link" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": + get: + summary: Get a concurrency group for a repository + description: |- + Gets a specific concurrency group for a repository, including all instances in the group's queue. + Returns 404 if the group is inactive or does not exist. + + Optionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items + ahead of the specified workflow run or job in the queue, plus the specified item itself + (returned as the last element). This is useful for determining what is blocking a particular + run or job. Returns 422 if the specified run or job is not in this concurrency group. + + When using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow + leases held on behalf of that run. Job-level leases within the run are not considered to + block the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow + leases on the job's ancestor paths. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/get-concurrency-group-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/concurrency-group-name" + - name: ahead_of_run + description: |- + Filter to items ahead of this workflow run ID in the queue, plus the run itself. + Matches workflow-level concurrency and reusable-workflow leases held on behalf of + the run. Mutually exclusive with `ahead_of_job`. + in: query + required: false + schema: + type: integer + minimum: 1 + - name: ahead_of_job + description: |- + Filter to items ahead of this job ID in the queue, plus the job itself. + Matches job-level concurrency and reusable-workflow leases on the job's + ancestor paths. Mutually exclusive with `ahead_of_run`. + in: query + required: false + schema: + type: integer + minimum: 1 + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group" + examples: + default: + "$ref": "#/components/examples/concurrency-group" + '404': + "$ref": "#/components/responses/not_found" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/jobs/{job_id}": get: summary: Get a job for a workflow run @@ -27347,6 +27452,64 @@ paths: enabledForGitHubApps: true category: actions subcategory: workflow-runs + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": + get: + summary: List concurrency groups for a workflow run + description: |- + Lists all concurrency groups associated with a workflow run or its jobs. + + The set of groups is derived from the run's configuration, so a group is + included even when the run no longer has any items currently holding or + waiting in it. In that case the `group_members` array will be empty. + `total_count` reflects the number of groups the run participates in by + configuration, not the number with active items. + + This differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`, + which returns 404 when a group has no active items. That endpoint reports + the live state of a group repo-wide, while this endpoint reports the + groups associated with a specific run by configuration. + + Results are sorted by group name and support cursor-based pagination via + `before` and `after`. The `after` cursor paginates forward only and does + not emit a `rel="prev"` Link; use `before` to page backward from a + forward page's `next` cursor. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-workflow-run + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/run-id" + - "$ref": "#/components/parameters/per-page" + - "$ref": "#/components/parameters/pagination-before" + - "$ref": "#/components/parameters/pagination-after" + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group-run-list" + examples: + default: + "$ref": "#/components/examples/concurrency-group-run-list" + headers: + Link: + "$ref": "#/components/headers/link" + '404': + "$ref": "#/components/responses/not_found" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": post: summary: Review custom deployment protection rules for a workflow run @@ -94838,6 +95001,107 @@ components: required: - total_count - actions_caches + concurrency-group-list: + title: Concurrency Group List + description: A list of active concurrency groups for a repository. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - last_acquired_at + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + last_acquired_at: + type: string + format: date-time + nullable: true + concurrency-group: + title: Concurrency Group + description: |- + A concurrency group with the workflow runs and jobs that are either currently holding + or waiting for the concurrency group lease. + type: object + required: + - group_name + - group_url + - total_count + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + total_count: + type: integer + group_members: + type: array + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + job_id: + type: integer + description: The ID of the job, when the item represents a job-level + or reusable-workflow-level lease. + job_name: + type: string + description: The display name of the job, when the item represents + a job-level or reusable-workflow-level lease. + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending job: title: Job description: Information of a job execution in a workflow run @@ -95444,6 +95708,110 @@ components: - state - user - comment + concurrency-group-run-list: + title: Concurrency Group Run List + description: A list of concurrency groups associated with a workflow run. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + description: |- + The total number of concurrency groups this workflow run participates in, + derived from the run's configuration. This count is not filtered by + whether the run currently holds or is waiting in each group, so it can + include groups whose `group_members` array is empty (for example, when + the run has already released its lease in that group). + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: |- + API URL for this concurrency group. May return 404 if the group + has no active items at the time it is requested, since the + get-by-name endpoint reports the live repo-wide state of a group + while this endpoint lists groups associated with a run by + configuration. + group_members: + type: array + description: |- + Items belonging to this workflow run that are either currently holding or + waiting for the concurrency group lease. May be empty if the run no + longer has any active or queued items in this group. + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + - position + - position_url + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + position: + type: integer + description: Queue position. 0 means the item holds the concurrency + lease (in_progress), 1 or higher means queued (pending). + position_url: + type: string + format: uri + description: API URL to get items ahead of this item in the + concurrency group. + job_id: + type: integer + description: The ID of the job, when the item represents a job-level + or reusable-workflow-level lease. + nullable: true + job_name: + type: string + description: The display name of the job, when the item represents + a job-level or reusable-workflow-level lease. + nullable: true + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending review-custom-gates-comment-required: type: object properties: @@ -228091,6 +228459,41 @@ components: last_accessed_at: '2019-01-24T22:45:36.000Z' created_at: '2019-01-24T22:45:36.000Z' size_in_bytes: 1024 + concurrency-group-list: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + last_acquired_at: '2026-01-15T16:14:23Z' + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + last_acquired_at: '2026-01-15T16:13:55Z' + concurrency-group: + value: + group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + total_count: 3 + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + - run_id: 30433643 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433643 + status: pending + - run_id: 30433644 + run_name: Deploy hotfix + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644 + job_id: 798245260 + job_name: deploy + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260 + status: pending job: value: id: 399444496 @@ -228767,6 +229170,34 @@ components: runner_group_name: my runner group workflow_name: CI head_branch: main + concurrency-group-run-list: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + position: 0 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642 + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: pending + position: 2 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260 + job_id: 798245260 + job_name: build + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260 pending-deployment-items: value: - environment: @@ -246186,6 +246617,13 @@ components: required: true schema: type: integer + concurrency-group-name: + name: concurrency_group_name + description: The name of the concurrency group. + in: path + required: true + schema: + type: string job-id: name: job_id description: The unique identifier of the job. diff --git a/descriptions/api.github.com/api.github.com.2026-03-10.json b/descriptions/api.github.com/api.github.com.2026-03-10.json index eff49dadc2..e3d259f54d 100644 --- a/descriptions/api.github.com/api.github.com.2026-03-10.json +++ b/descriptions/api.github.com/api.github.com.2026-03-10.json @@ -35019,6 +35019,139 @@ } } }, + "/repos/{owner}/{repo}/actions/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a repository", + "description": "Lists the active concurrency groups for a repository.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/per-page" + }, + { + "$ref": "#/components/parameters/pagination-after" + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group-list" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group-list" + } + } + } + }, + "headers": { + "Link": { + "$ref": "#/components/headers/link" + } + } + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": { + "get": { + "summary": "Get a concurrency group for a repository", + "description": "Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.\n\nOptionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.\n\nWhen using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/get-concurrency-group-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/concurrency-group-name" + }, + { + "name": "ahead_of_run", + "description": "Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with `ahead_of_job`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + }, + { + "name": "ahead_of_job", + "description": "Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with `ahead_of_run`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group" + } + } + } + } + }, + "404": { + "$ref": "#/components/responses/not_found" + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/jobs/{job_id}": { "get": { "summary": "Get a job for a workflow run", @@ -37430,6 +37563,74 @@ } } }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a workflow run", + "description": "Lists all concurrency groups associated with a workflow run or its jobs.\n\nThe set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the `group_members` array will be empty.\n`total_count` reflects the number of groups the run participates in by\nconfiguration, not the number with active items.\n\nThis differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`,\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.\n\nResults are sorted by group name and support cursor-based pagination via\n`before` and `after`. The `after` cursor paginates forward only and does\nnot emit a `rel=\"prev\"` Link; use `before` to page backward from a\nforward page's `next` cursor.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-workflow-run", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/run-id" + }, + { + "$ref": "#/components/parameters/per-page" + }, + { + "$ref": "#/components/parameters/pagination-before" + }, + { + "$ref": "#/components/parameters/pagination-after" + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group-run-list" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group-run-list" + } + } + } + }, + "headers": { + "Link": { + "$ref": "#/components/headers/link" + } + } + }, + "404": { + "$ref": "#/components/responses/not_found" + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": { "post": { "summary": "Review custom deployment protection rules for a workflow run", @@ -128343,6 +128544,134 @@ "actions_caches" ] }, + "concurrency-group-list": { + "title": "Concurrency Group List", + "description": "A list of active concurrency groups for a repository.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "last_acquired_at" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "last_acquired_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + } + } + } + } + }, + "concurrency-group": { + "title": "Concurrency Group", + "description": "A concurrency group with the workflow runs and jobs that are either currently holding\nor waiting for the concurrency group lease.", + "type": "object", + "required": [ + "group_name", + "group_url", + "total_count", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "total_count": { + "type": "integer" + }, + "group_members": { + "type": "array", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + }, "job": { "title": "Job", "description": "Information of a job execution in a workflow run", @@ -129077,6 +129406,119 @@ "comment" ] }, + "concurrency-group-run-list": { + "title": "Concurrency Group Run List", + "description": "A list of concurrency groups associated with a workflow run.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer", + "description": "The total number of concurrency groups this workflow run participates in,\nderived from the run's configuration. This count is not filtered by\nwhether the run currently holds or is waiting in each group, so it can\ninclude groups whose `group_members` array is empty (for example, when\nthe run has already released its lease in that group)." + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group. May return 404 if the group\nhas no active items at the time it is requested, since the\nget-by-name endpoint reports the live repo-wide state of a group\nwhile this endpoint lists groups associated with a run by\nconfiguration." + }, + "group_members": { + "type": "array", + "description": "Items belonging to this workflow run that are either currently holding or\nwaiting for the concurrency group lease. May be empty if the run no\nlonger has any active or queued items in this group.", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status", + "position", + "position_url" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "position": { + "type": "integer", + "description": "Queue position. 0 means the item holds the concurrency lease (in_progress), 1 or higher means queued (pending)." + }, + "position_url": { + "type": "string", + "format": "uri", + "description": "API URL to get items ahead of this item in the concurrency group." + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + } + } + } + }, "review-custom-gates-comment-required": { "type": "object", "properties": { @@ -302562,6 +303004,57 @@ ] } }, + "concurrency-group-list": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "last_acquired_at": "2026-01-15T16:14:23Z" + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "last_acquired_at": "2026-01-15T16:13:55Z" + } + ] + } + }, + "concurrency-group": { + "value": { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "total_count": 3, + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress" + }, + { + "run_id": 30433643, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433643", + "status": "pending" + }, + { + "run_id": 30433644, + "run_name": "Deploy hotfix", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644", + "job_id": 798245260, + "job_name": "deploy", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260", + "status": "pending" + } + ] + } + }, "job": { "value": { "id": 399444496, @@ -303350,6 +303843,47 @@ ] } }, + "concurrency-group-run-list": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress", + "position": 0, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642" + } + ] + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "pending", + "position": 2, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260", + "job_id": 798245260, + "job_name": "build", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260" + } + ] + } + ] + } + }, "pending-deployment-items": { "value": [ { @@ -323394,6 +323928,15 @@ "type": "integer" } }, + "concurrency-group-name": { + "name": "concurrency_group_name", + "description": "The name of the concurrency group.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, "job-id": { "name": "job_id", "description": "The unique identifier of the job.", diff --git a/descriptions/api.github.com/api.github.com.2026-03-10.yaml b/descriptions/api.github.com/api.github.com.2026-03-10.yaml index 93cb1e7c86..c8d3ccae65 100644 --- a/descriptions/api.github.com/api.github.com.2026-03-10.yaml +++ b/descriptions/api.github.com/api.github.com.2026-03-10.yaml @@ -25609,6 +25609,111 @@ paths: enabledForGitHubApps: true category: actions subcategory: cache + "/repos/{owner}/{repo}/actions/concurrency_groups": + get: + summary: List concurrency groups for a repository + description: |- + Lists the active concurrency groups for a repository. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/per-page" + - "$ref": "#/components/parameters/pagination-after" + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group-list" + examples: + default: + "$ref": "#/components/examples/concurrency-group-list" + headers: + Link: + "$ref": "#/components/headers/link" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": + get: + summary: Get a concurrency group for a repository + description: |- + Gets a specific concurrency group for a repository, including all instances in the group's queue. + Returns 404 if the group is inactive or does not exist. + + Optionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items + ahead of the specified workflow run or job in the queue, plus the specified item itself + (returned as the last element). This is useful for determining what is blocking a particular + run or job. Returns 422 if the specified run or job is not in this concurrency group. + + When using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow + leases held on behalf of that run. Job-level leases within the run are not considered to + block the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow + leases on the job's ancestor paths. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/get-concurrency-group-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/concurrency-group-name" + - name: ahead_of_run + description: |- + Filter to items ahead of this workflow run ID in the queue, plus the run itself. + Matches workflow-level concurrency and reusable-workflow leases held on behalf of + the run. Mutually exclusive with `ahead_of_job`. + in: query + required: false + schema: + type: integer + minimum: 1 + - name: ahead_of_job + description: |- + Filter to items ahead of this job ID in the queue, plus the job itself. + Matches job-level concurrency and reusable-workflow leases on the job's + ancestor paths. Mutually exclusive with `ahead_of_run`. + in: query + required: false + schema: + type: integer + minimum: 1 + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group" + examples: + default: + "$ref": "#/components/examples/concurrency-group" + '404': + "$ref": "#/components/responses/not_found" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/jobs/{job_id}": get: summary: Get a job for a workflow run @@ -27310,6 +27415,64 @@ paths: enabledForGitHubApps: true category: actions subcategory: workflow-runs + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": + get: + summary: List concurrency groups for a workflow run + description: |- + Lists all concurrency groups associated with a workflow run or its jobs. + + The set of groups is derived from the run's configuration, so a group is + included even when the run no longer has any items currently holding or + waiting in it. In that case the `group_members` array will be empty. + `total_count` reflects the number of groups the run participates in by + configuration, not the number with active items. + + This differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`, + which returns 404 when a group has no active items. That endpoint reports + the live state of a group repo-wide, while this endpoint reports the + groups associated with a specific run by configuration. + + Results are sorted by group name and support cursor-based pagination via + `before` and `after`. The `after` cursor paginates forward only and does + not emit a `rel="prev"` Link; use `before` to page backward from a + forward page's `next` cursor. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-workflow-run + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/run-id" + - "$ref": "#/components/parameters/per-page" + - "$ref": "#/components/parameters/pagination-before" + - "$ref": "#/components/parameters/pagination-after" + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group-run-list" + examples: + default: + "$ref": "#/components/examples/concurrency-group-run-list" + headers: + Link: + "$ref": "#/components/headers/link" + '404': + "$ref": "#/components/responses/not_found" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": post: summary: Review custom deployment protection rules for a workflow run @@ -94386,6 +94549,107 @@ components: required: - total_count - actions_caches + concurrency-group-list: + title: Concurrency Group List + description: A list of active concurrency groups for a repository. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - last_acquired_at + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + last_acquired_at: + type: string + format: date-time + nullable: true + concurrency-group: + title: Concurrency Group + description: |- + A concurrency group with the workflow runs and jobs that are either currently holding + or waiting for the concurrency group lease. + type: object + required: + - group_name + - group_url + - total_count + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + total_count: + type: integer + group_members: + type: array + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + job_id: + type: integer + description: The ID of the job, when the item represents a job-level + or reusable-workflow-level lease. + job_name: + type: string + description: The display name of the job, when the item represents + a job-level or reusable-workflow-level lease. + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending job: title: Job description: Information of a job execution in a workflow run @@ -94992,6 +95256,110 @@ components: - state - user - comment + concurrency-group-run-list: + title: Concurrency Group Run List + description: A list of concurrency groups associated with a workflow run. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + description: |- + The total number of concurrency groups this workflow run participates in, + derived from the run's configuration. This count is not filtered by + whether the run currently holds or is waiting in each group, so it can + include groups whose `group_members` array is empty (for example, when + the run has already released its lease in that group). + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: |- + API URL for this concurrency group. May return 404 if the group + has no active items at the time it is requested, since the + get-by-name endpoint reports the live repo-wide state of a group + while this endpoint lists groups associated with a run by + configuration. + group_members: + type: array + description: |- + Items belonging to this workflow run that are either currently holding or + waiting for the concurrency group lease. May be empty if the run no + longer has any active or queued items in this group. + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + - position + - position_url + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + position: + type: integer + description: Queue position. 0 means the item holds the concurrency + lease (in_progress), 1 or higher means queued (pending). + position_url: + type: string + format: uri + description: API URL to get items ahead of this item in the + concurrency group. + job_id: + type: integer + description: The ID of the job, when the item represents a job-level + or reusable-workflow-level lease. + nullable: true + job_name: + type: string + description: The display name of the job, when the item represents + a job-level or reusable-workflow-level lease. + nullable: true + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending review-custom-gates-comment-required: type: object properties: @@ -227410,6 +227778,41 @@ components: last_accessed_at: '2019-01-24T22:45:36.000Z' created_at: '2019-01-24T22:45:36.000Z' size_in_bytes: 1024 + concurrency-group-list: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + last_acquired_at: '2026-01-15T16:14:23Z' + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + last_acquired_at: '2026-01-15T16:13:55Z' + concurrency-group: + value: + group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + total_count: 3 + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + - run_id: 30433643 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433643 + status: pending + - run_id: 30433644 + run_name: Deploy hotfix + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644 + job_id: 798245260 + job_name: deploy + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260 + status: pending job: value: id: 399444496 @@ -228086,6 +228489,34 @@ components: runner_group_name: my runner group workflow_name: CI head_branch: main + concurrency-group-run-list: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + position: 0 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642 + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: pending + position: 2 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260 + job_id: 798245260 + job_name: build + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260 pending-deployment-items: value: - environment: @@ -245420,6 +245851,13 @@ components: required: true schema: type: integer + concurrency-group-name: + name: concurrency_group_name + description: The name of the concurrency group. + in: path + required: true + schema: + type: string job-id: name: job_id description: The unique identifier of the job. diff --git a/descriptions/api.github.com/api.github.com.json b/descriptions/api.github.com/api.github.com.json index 805b21cf42..0d4b9afeaa 100644 --- a/descriptions/api.github.com/api.github.com.json +++ b/descriptions/api.github.com/api.github.com.json @@ -35278,6 +35278,139 @@ } } }, + "/repos/{owner}/{repo}/actions/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a repository", + "description": "Lists the active concurrency groups for a repository.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/per-page" + }, + { + "$ref": "#/components/parameters/pagination-after" + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group-list" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group-list" + } + } + } + }, + "headers": { + "Link": { + "$ref": "#/components/headers/link" + } + } + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": { + "get": { + "summary": "Get a concurrency group for a repository", + "description": "Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.\n\nOptionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.\n\nWhen using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/get-concurrency-group-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/concurrency-group-name" + }, + { + "name": "ahead_of_run", + "description": "Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with `ahead_of_job`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + }, + { + "name": "ahead_of_job", + "description": "Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with `ahead_of_run`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group" + } + } + } + } + }, + "404": { + "$ref": "#/components/responses/not_found" + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/jobs/{job_id}": { "get": { "summary": "Get a job for a workflow run", @@ -37689,6 +37822,74 @@ } } }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a workflow run", + "description": "Lists all concurrency groups associated with a workflow run or its jobs.\n\nThe set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the `group_members` array will be empty.\n`total_count` reflects the number of groups the run participates in by\nconfiguration, not the number with active items.\n\nThis differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`,\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.\n\nResults are sorted by group name and support cursor-based pagination via\n`before` and `after`. The `after` cursor paginates forward only and does\nnot emit a `rel=\"prev\"` Link; use `before` to page backward from a\nforward page's `next` cursor.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-workflow-run", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/run-id" + }, + { + "$ref": "#/components/parameters/per-page" + }, + { + "$ref": "#/components/parameters/pagination-before" + }, + { + "$ref": "#/components/parameters/pagination-after" + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group-run-list" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group-run-list" + } + } + } + }, + "headers": { + "Link": { + "$ref": "#/components/headers/link" + } + } + }, + "404": { + "$ref": "#/components/responses/not_found" + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": { "post": { "summary": "Review custom deployment protection rules for a workflow run", @@ -130037,6 +130238,134 @@ "actions_caches" ] }, + "concurrency-group-list": { + "title": "Concurrency Group List", + "description": "A list of active concurrency groups for a repository.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "last_acquired_at" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "last_acquired_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + } + } + } + } + }, + "concurrency-group": { + "title": "Concurrency Group", + "description": "A concurrency group with the workflow runs and jobs that are either currently holding\nor waiting for the concurrency group lease.", + "type": "object", + "required": [ + "group_name", + "group_url", + "total_count", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "total_count": { + "type": "integer" + }, + "group_members": { + "type": "array", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + }, "job": { "title": "Job", "description": "Information of a job execution in a workflow run", @@ -130771,6 +131100,119 @@ "comment" ] }, + "concurrency-group-run-list": { + "title": "Concurrency Group Run List", + "description": "A list of concurrency groups associated with a workflow run.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer", + "description": "The total number of concurrency groups this workflow run participates in,\nderived from the run's configuration. This count is not filtered by\nwhether the run currently holds or is waiting in each group, so it can\ninclude groups whose `group_members` array is empty (for example, when\nthe run has already released its lease in that group)." + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group. May return 404 if the group\nhas no active items at the time it is requested, since the\nget-by-name endpoint reports the live repo-wide state of a group\nwhile this endpoint lists groups associated with a run by\nconfiguration." + }, + "group_members": { + "type": "array", + "description": "Items belonging to this workflow run that are either currently holding or\nwaiting for the concurrency group lease. May be empty if the run no\nlonger has any active or queued items in this group.", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status", + "position", + "position_url" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "position": { + "type": "integer", + "description": "Queue position. 0 means the item holds the concurrency lease (in_progress), 1 or higher means queued (pending)." + }, + "position_url": { + "type": "string", + "format": "uri", + "description": "API URL to get items ahead of this item in the concurrency group." + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + } + } + } + }, "review-custom-gates-comment-required": { "type": "object", "properties": { @@ -305500,6 +305942,57 @@ ] } }, + "concurrency-group-list": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "last_acquired_at": "2026-01-15T16:14:23Z" + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "last_acquired_at": "2026-01-15T16:13:55Z" + } + ] + } + }, + "concurrency-group": { + "value": { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "total_count": 3, + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress" + }, + { + "run_id": 30433643, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433643", + "status": "pending" + }, + { + "run_id": 30433644, + "run_name": "Deploy hotfix", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644", + "job_id": 798245260, + "job_name": "deploy", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260", + "status": "pending" + } + ] + } + }, "job": { "value": { "id": 399444496, @@ -306288,6 +306781,47 @@ ] } }, + "concurrency-group-run-list": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress", + "position": 0, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642" + } + ] + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "pending", + "position": 2, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260", + "job_id": 798245260, + "job_name": "build", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260" + } + ] + } + ] + } + }, "pending-deployment-items": { "value": [ { @@ -326550,6 +327084,15 @@ "type": "integer" } }, + "concurrency-group-name": { + "name": "concurrency_group_name", + "description": "The name of the concurrency group.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, "job-id": { "name": "job_id", "description": "The unique identifier of the job.", diff --git a/descriptions/api.github.com/api.github.com.yaml b/descriptions/api.github.com/api.github.com.yaml index e056574f08..dcf811ce3e 100644 --- a/descriptions/api.github.com/api.github.com.yaml +++ b/descriptions/api.github.com/api.github.com.yaml @@ -25759,6 +25759,111 @@ paths: enabledForGitHubApps: true category: actions subcategory: cache + "/repos/{owner}/{repo}/actions/concurrency_groups": + get: + summary: List concurrency groups for a repository + description: |- + Lists the active concurrency groups for a repository. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/per-page" + - "$ref": "#/components/parameters/pagination-after" + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group-list" + examples: + default: + "$ref": "#/components/examples/concurrency-group-list" + headers: + Link: + "$ref": "#/components/headers/link" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": + get: + summary: Get a concurrency group for a repository + description: |- + Gets a specific concurrency group for a repository, including all instances in the group's queue. + Returns 404 if the group is inactive or does not exist. + + Optionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items + ahead of the specified workflow run or job in the queue, plus the specified item itself + (returned as the last element). This is useful for determining what is blocking a particular + run or job. Returns 422 if the specified run or job is not in this concurrency group. + + When using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow + leases held on behalf of that run. Job-level leases within the run are not considered to + block the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow + leases on the job's ancestor paths. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/get-concurrency-group-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/concurrency-group-name" + - name: ahead_of_run + description: |- + Filter to items ahead of this workflow run ID in the queue, plus the run itself. + Matches workflow-level concurrency and reusable-workflow leases held on behalf of + the run. Mutually exclusive with `ahead_of_job`. + in: query + required: false + schema: + type: integer + minimum: 1 + - name: ahead_of_job + description: |- + Filter to items ahead of this job ID in the queue, plus the job itself. + Matches job-level concurrency and reusable-workflow leases on the job's + ancestor paths. Mutually exclusive with `ahead_of_run`. + in: query + required: false + schema: + type: integer + minimum: 1 + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group" + examples: + default: + "$ref": "#/components/examples/concurrency-group" + '404': + "$ref": "#/components/responses/not_found" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/jobs/{job_id}": get: summary: Get a job for a workflow run @@ -27460,6 +27565,64 @@ paths: enabledForGitHubApps: true category: actions subcategory: workflow-runs + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": + get: + summary: List concurrency groups for a workflow run + description: |- + Lists all concurrency groups associated with a workflow run or its jobs. + + The set of groups is derived from the run's configuration, so a group is + included even when the run no longer has any items currently holding or + waiting in it. In that case the `group_members` array will be empty. + `total_count` reflects the number of groups the run participates in by + configuration, not the number with active items. + + This differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`, + which returns 404 when a group has no active items. That endpoint reports + the live state of a group repo-wide, while this endpoint reports the + groups associated with a specific run by configuration. + + Results are sorted by group name and support cursor-based pagination via + `before` and `after`. The `after` cursor paginates forward only and does + not emit a `rel="prev"` Link; use `before` to page backward from a + forward page's `next` cursor. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-workflow-run + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/run-id" + - "$ref": "#/components/parameters/per-page" + - "$ref": "#/components/parameters/pagination-before" + - "$ref": "#/components/parameters/pagination-after" + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group-run-list" + examples: + default: + "$ref": "#/components/examples/concurrency-group-run-list" + headers: + Link: + "$ref": "#/components/headers/link" + '404': + "$ref": "#/components/responses/not_found" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": post: summary: Review custom deployment protection rules for a workflow run @@ -95637,6 +95800,107 @@ components: required: - total_count - actions_caches + concurrency-group-list: + title: Concurrency Group List + description: A list of active concurrency groups for a repository. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - last_acquired_at + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + last_acquired_at: + type: string + format: date-time + nullable: true + concurrency-group: + title: Concurrency Group + description: |- + A concurrency group with the workflow runs and jobs that are either currently holding + or waiting for the concurrency group lease. + type: object + required: + - group_name + - group_url + - total_count + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + total_count: + type: integer + group_members: + type: array + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + job_id: + type: integer + description: The ID of the job, when the item represents a job-level + or reusable-workflow-level lease. + job_name: + type: string + description: The display name of the job, when the item represents + a job-level or reusable-workflow-level lease. + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending job: title: Job description: Information of a job execution in a workflow run @@ -96243,6 +96507,110 @@ components: - state - user - comment + concurrency-group-run-list: + title: Concurrency Group Run List + description: A list of concurrency groups associated with a workflow run. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + description: |- + The total number of concurrency groups this workflow run participates in, + derived from the run's configuration. This count is not filtered by + whether the run currently holds or is waiting in each group, so it can + include groups whose `group_members` array is empty (for example, when + the run has already released its lease in that group). + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: |- + API URL for this concurrency group. May return 404 if the group + has no active items at the time it is requested, since the + get-by-name endpoint reports the live repo-wide state of a group + while this endpoint lists groups associated with a run by + configuration. + group_members: + type: array + description: |- + Items belonging to this workflow run that are either currently holding or + waiting for the concurrency group lease. May be empty if the run no + longer has any active or queued items in this group. + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + - position + - position_url + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + position: + type: integer + description: Queue position. 0 means the item holds the concurrency + lease (in_progress), 1 or higher means queued (pending). + position_url: + type: string + format: uri + description: API URL to get items ahead of this item in the + concurrency group. + job_id: + type: integer + description: The ID of the job, when the item represents a job-level + or reusable-workflow-level lease. + nullable: true + job_name: + type: string + description: The display name of the job, when the item represents + a job-level or reusable-workflow-level lease. + nullable: true + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending review-custom-gates-comment-required: type: object properties: @@ -229517,6 +229885,41 @@ components: last_accessed_at: '2019-01-24T22:45:36.000Z' created_at: '2019-01-24T22:45:36.000Z' size_in_bytes: 1024 + concurrency-group-list: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + last_acquired_at: '2026-01-15T16:14:23Z' + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + last_acquired_at: '2026-01-15T16:13:55Z' + concurrency-group: + value: + group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + total_count: 3 + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + - run_id: 30433643 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433643 + status: pending + - run_id: 30433644 + run_name: Deploy hotfix + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644 + job_id: 798245260 + job_name: deploy + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260 + status: pending job: value: id: 399444496 @@ -230193,6 +230596,34 @@ components: runner_group_name: my runner group workflow_name: CI head_branch: main + concurrency-group-run-list: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + position: 0 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642 + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: pending + position: 2 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260 + job_id: 798245260 + job_name: build + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260 pending-deployment-items: value: - environment: @@ -247676,6 +248107,13 @@ components: required: true schema: type: integer + concurrency-group-name: + name: concurrency_group_name + description: The name of the concurrency group. + in: path + required: true + schema: + type: string job-id: name: job_id description: The unique identifier of the job. diff --git a/descriptions/api.github.com/dereferenced/api.github.com.2022-11-28.deref.json b/descriptions/api.github.com/dereferenced/api.github.com.2022-11-28.deref.json index ac2c32de8a..019174ae8f 100644 --- a/descriptions/api.github.com/dereferenced/api.github.com.2022-11-28.deref.json +++ b/descriptions/api.github.com/dereferenced/api.github.com.2022-11-28.deref.json @@ -237628,6 +237628,506 @@ } } }, + "/repos/{owner}/{repo}/actions/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a repository", + "description": "Lists the active concurrency groups for a repository.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "description": "The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "after", + "description": "A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Concurrency Group List", + "description": "A list of active concurrency groups for a repository.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "last_acquired_at" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "last_acquired_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + } + } + } + } + }, + "examples": { + "default": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "last_acquired_at": "2026-01-15T16:14:23Z" + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "last_acquired_at": "2026-01-15T16:13:55Z" + } + ] + } + } + } + } + }, + "headers": { + "Link": { + "example": "; rel=\"next\", ; rel=\"last\"", + "schema": { + "type": "string" + } + } + } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": { + "get": { + "summary": "Get a concurrency group for a repository", + "description": "Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.\n\nOptionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.\n\nWhen using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/get-concurrency-group-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "concurrency_group_name", + "description": "The name of the concurrency group.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ahead_of_run", + "description": "Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with `ahead_of_job`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + }, + { + "name": "ahead_of_job", + "description": "Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with `ahead_of_run`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Concurrency Group", + "description": "A concurrency group with the workflow runs and jobs that are either currently holding\nor waiting for the concurrency group lease.", + "type": "object", + "required": [ + "group_name", + "group_url", + "total_count", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "total_count": { + "type": "integer" + }, + "group_members": { + "type": "array", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + }, + "examples": { + "default": { + "value": { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "total_count": 3, + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress" + }, + { + "run_id": 30433643, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433643", + "status": "pending" + }, + { + "run_id": 30433644, + "run_name": "Deploy hotfix", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644", + "job_id": 798245260, + "job_name": "deploy", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260", + "status": "pending" + } + ] + } + } + } + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "title": "Basic Error", + "description": "Basic Error", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/jobs/{job_id}": { "get": { "summary": "Get a job for a workflow run", @@ -252557,21 +253057,188 @@ "githubCloudOnly": false, "enabledForGitHubApps": true, "category": "actions", - "subcategory": "workflow-jobs" + "subcategory": "workflow-jobs" + } + } + }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs": { + "get": { + "summary": "Download workflow run attempt logs", + "description": "Gets a redirect URL to download an archive of log files for a specific workflow run attempt. This link expires after\n1 minute. Look for `Location:` in the response header to find the URL for the download.\n\nAnyone with read access to the repository can use this endpoint.\n\nIf the repository is private, OAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "tags": [ + "actions" + ], + "operationId": "actions/download-workflow-run-attempt-logs", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/workflow-runs#download-workflow-run-attempt-logs" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "run_id", + "description": "The unique identifier of the workflow run.", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "attempt_number", + "description": "The attempt number of the workflow run.", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "302": { + "description": "Response", + "headers": { + "Location": { + "example": "https://pipelines.actions.githubusercontent.com/ab1f3cCFPB34Nd6imvFxpGZH5hNlDp2wijMwl2gDoO0bcrrlJj/_apis/pipelines/1/runs/19/signedlogcontent?urlExpires=2020-01-22T22%3A44%3A54.1389777Z&urlSigningMethod=HMACV1&urlSignature=2TUDfIg4fm36OJmfPy6km5QD5DLCOkBVzvhWZM8B%2BUY%3D", + "schema": { + "type": "string" + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "workflow-runs" + } + } + }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel": { + "post": { + "summary": "Cancel a workflow run", + "description": "Cancels a workflow run using its `id`.\n\nOAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "tags": [ + "actions" + ], + "operationId": "actions/cancel-workflow-run", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/workflow-runs#cancel-a-workflow-run" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "run_id", + "description": "The unique identifier of the workflow run.", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "202": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Empty Object", + "description": "An object without any properties.", + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "examples": { + "default": { + "value": null + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "title": "Basic Error", + "description": "Basic Error", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "workflow-runs" } } }, - "/repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs": { + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": { "get": { - "summary": "Download workflow run attempt logs", - "description": "Gets a redirect URL to download an archive of log files for a specific workflow run attempt. This link expires after\n1 minute. Look for `Location:` in the response header to find the URL for the download.\n\nAnyone with read access to the repository can use this endpoint.\n\nIf the repository is private, OAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "summary": "List concurrency groups for a workflow run", + "description": "Lists all concurrency groups associated with a workflow run or its jobs.\n\nThe set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the `group_members` array will be empty.\n`total_count` reflects the number of groups the run participates in by\nconfiguration, not the number with active items.\n\nThis differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`,\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.\n\nResults are sorted by group name and support cursor-based pagination via\n`before` and `after`. The `after` cursor paginates forward only and does\nnot emit a `rel=\"prev\"` Link; use `before` to page backward from a\nforward page's `next` cursor.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", "tags": [ "actions" ], - "operationId": "actions/download-workflow-run-attempt-logs", + "operationId": "actions/list-concurrency-groups-for-workflow-run", "externalDocs": { "description": "API method documentation", - "url": "https://docs.github.com/rest/actions/workflow-runs#download-workflow-run-attempt-logs" + "url": "https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run" }, "parameters": [ { @@ -252602,99 +253269,207 @@ } }, { - "name": "attempt_number", - "description": "The attempt number of the workflow run.", - "in": "path", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "responses": { - "302": { - "description": "Response", - "headers": { - "Location": { - "example": "https://pipelines.actions.githubusercontent.com/ab1f3cCFPB34Nd6imvFxpGZH5hNlDp2wijMwl2gDoO0bcrrlJj/_apis/pipelines/1/runs/19/signedlogcontent?urlExpires=2020-01-22T22%3A44%3A54.1389777Z&urlSigningMethod=HMACV1&urlSignature=2TUDfIg4fm36OJmfPy6km5QD5DLCOkBVzvhWZM8B%2BUY%3D", - "schema": { - "type": "string" - } - } - } - } - }, - "x-github": { - "githubCloudOnly": false, - "enabledForGitHubApps": true, - "category": "actions", - "subcategory": "workflow-runs" - } - } - }, - "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel": { - "post": { - "summary": "Cancel a workflow run", - "description": "Cancels a workflow run using its `id`.\n\nOAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", - "tags": [ - "actions" - ], - "operationId": "actions/cancel-workflow-run", - "externalDocs": { - "description": "API method documentation", - "url": "https://docs.github.com/rest/actions/workflow-runs#cancel-a-workflow-run" - }, - "parameters": [ - { - "name": "owner", - "description": "The account owner of the repository. The name is not case sensitive.", - "in": "path", - "required": true, + "name": "per_page", + "description": "The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", "schema": { - "type": "string" + "type": "integer", + "default": 30 } }, { - "name": "repo", - "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", - "in": "path", - "required": true, + "name": "before", + "description": "A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results before this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, "schema": { "type": "string" } }, { - "name": "run_id", - "description": "The unique identifier of the workflow run.", - "in": "path", - "required": true, + "name": "after", + "description": "A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, "schema": { - "type": "integer" + "type": "string" } } ], "responses": { - "202": { + "200": { "description": "Response", "content": { "application/json": { "schema": { - "title": "Empty Object", - "description": "An object without any properties.", + "title": "Concurrency Group Run List", + "description": "A list of concurrency groups associated with a workflow run.", "type": "object", - "properties": {}, - "additionalProperties": false + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer", + "description": "The total number of concurrency groups this workflow run participates in,\nderived from the run's configuration. This count is not filtered by\nwhether the run currently holds or is waiting in each group, so it can\ninclude groups whose `group_members` array is empty (for example, when\nthe run has already released its lease in that group)." + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group. May return 404 if the group\nhas no active items at the time it is requested, since the\nget-by-name endpoint reports the live repo-wide state of a group\nwhile this endpoint lists groups associated with a run by\nconfiguration." + }, + "group_members": { + "type": "array", + "description": "Items belonging to this workflow run that are either currently holding or\nwaiting for the concurrency group lease. May be empty if the run no\nlonger has any active or queued items in this group.", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status", + "position", + "position_url" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "position": { + "type": "integer", + "description": "Queue position. 0 means the item holds the concurrency lease (in_progress), 1 or higher means queued (pending)." + }, + "position_url": { + "type": "string", + "format": "uri", + "description": "API URL to get items ahead of this item in the concurrency group." + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + } + } + } }, "examples": { "default": { - "value": null + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress", + "position": 0, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642" + } + ] + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "pending", + "position": 2, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260", + "job_id": 798245260, + "job_name": "build", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260" + } + ] + } + ] + } } } } + }, + "headers": { + "Link": { + "example": "; rel=\"next\", ; rel=\"last\"", + "schema": { + "type": "string" + } + } } }, - "409": { - "description": "Conflict", + "404": { + "description": "Resource not found", "content": { "application/json": { "schema": { @@ -252718,13 +253493,82 @@ } } } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } } }, "x-github": { "githubCloudOnly": false, "enabledForGitHubApps": true, "category": "actions", - "subcategory": "workflow-runs" + "subcategory": "concurrency-groups" } } }, diff --git a/descriptions/api.github.com/dereferenced/api.github.com.2022-11-28.deref.yaml b/descriptions/api.github.com/dereferenced/api.github.com.2022-11-28.deref.yaml index ec9996952a..190dec4b19 100644 --- a/descriptions/api.github.com/dereferenced/api.github.com.2022-11-28.deref.yaml +++ b/descriptions/api.github.com/dereferenced/api.github.com.2022-11-28.deref.yaml @@ -54200,6 +54200,240 @@ paths: enabledForGitHubApps: true category: actions subcategory: cache + "/repos/{owner}/{repo}/actions/concurrency_groups": + get: + summary: List concurrency groups for a repository + description: |- + Lists the active concurrency groups for a repository. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository + parameters: + - *348 + - *349 + - *17 + - *48 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group List + description: A list of active concurrency groups for a repository. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - last_acquired_at + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + last_acquired_at: + type: string + format: date-time + nullable: true + examples: + default: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + last_acquired_at: '2026-01-15T16:14:23Z' + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + last_acquired_at: '2026-01-15T16:13:55Z' + headers: + Link: *70 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": + get: + summary: Get a concurrency group for a repository + description: |- + Gets a specific concurrency group for a repository, including all instances in the group's queue. + Returns 404 if the group is inactive or does not exist. + + Optionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items + ahead of the specified workflow run or job in the queue, plus the specified item itself + (returned as the last element). This is useful for determining what is blocking a particular + run or job. Returns 422 if the specified run or job is not in this concurrency group. + + When using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow + leases held on behalf of that run. Job-level leases within the run are not considered to + block the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow + leases on the job's ancestor paths. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/get-concurrency-group-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository + parameters: + - *348 + - *349 + - name: concurrency_group_name + description: The name of the concurrency group. + in: path + required: true + schema: + type: string + - name: ahead_of_run + description: |- + Filter to items ahead of this workflow run ID in the queue, plus the run itself. + Matches workflow-level concurrency and reusable-workflow leases held on behalf of + the run. Mutually exclusive with `ahead_of_job`. + in: query + required: false + schema: + type: integer + minimum: 1 + - name: ahead_of_job + description: |- + Filter to items ahead of this job ID in the queue, plus the job itself. + Matches job-level concurrency and reusable-workflow leases on the job's + ancestor paths. Mutually exclusive with `ahead_of_run`. + in: query + required: false + schema: + type: integer + minimum: 1 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group + description: |- + A concurrency group with the workflow runs and jobs that are either currently holding + or waiting for the concurrency group lease. + type: object + required: + - group_name + - group_url + - total_count + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + total_count: + type: integer + group_members: + type: array + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + job_id: + type: integer + description: The ID of the job, when the item represents + a job-level or reusable-workflow-level lease. + job_name: + type: string + description: The display name of the job, when the item + represents a job-level or reusable-workflow-level lease. + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending + examples: + default: + value: + group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + total_count: 3 + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + - run_id: 30433643 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433643 + status: pending + - run_id: 30433644 + run_name: Deploy hotfix + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644 + job_id: 798245260 + job_name: deploy + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260 + status: pending + '404': *6 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/jobs/{job_id}": get: summary: Get a job for a workflow run @@ -57151,6 +57385,192 @@ paths: enabledForGitHubApps: true category: actions subcategory: workflow-runs + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": + get: + summary: List concurrency groups for a workflow run + description: |- + Lists all concurrency groups associated with a workflow run or its jobs. + + The set of groups is derived from the run's configuration, so a group is + included even when the run no longer has any items currently holding or + waiting in it. In that case the `group_members` array will be empty. + `total_count` reflects the number of groups the run participates in by + configuration, not the number with active items. + + This differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`, + which returns 404 when a group has no active items. That endpoint reports + the live state of a group repo-wide, while this endpoint reports the + groups associated with a specific run by configuration. + + Results are sorted by group name and support cursor-based pagination via + `before` and `after`. The `after` cursor paginates forward only and does + not emit a `rel="prev"` Link; use `before` to page backward from a + forward page's `next` cursor. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-workflow-run + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run + parameters: + - *348 + - *349 + - *386 + - *17 + - *47 + - *48 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group Run List + description: A list of concurrency groups associated with a workflow + run. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + description: |- + The total number of concurrency groups this workflow run participates in, + derived from the run's configuration. This count is not filtered by + whether the run currently holds or is waiting in each group, so it can + include groups whose `group_members` array is empty (for example, when + the run has already released its lease in that group). + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: |- + API URL for this concurrency group. May return 404 if the group + has no active items at the time it is requested, since the + get-by-name endpoint reports the live repo-wide state of a group + while this endpoint lists groups associated with a run by + configuration. + group_members: + type: array + description: |- + Items belonging to this workflow run that are either currently holding or + waiting for the concurrency group lease. May be empty if the run no + longer has any active or queued items in this group. + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + - position + - position_url + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + position: + type: integer + description: Queue position. 0 means the item holds + the concurrency lease (in_progress), 1 or higher + means queued (pending). + position_url: + type: string + format: uri + description: API URL to get items ahead of this item + in the concurrency group. + job_id: + type: integer + description: The ID of the job, when the item represents + a job-level or reusable-workflow-level lease. + nullable: true + job_name: + type: string + description: The display name of the job, when the + item represents a job-level or reusable-workflow-level + lease. + nullable: true + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending + examples: + default: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + position: 0 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642 + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: pending + position: 2 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260 + job_id: 798245260 + job_name: build + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260 + headers: + Link: *70 + '404': *6 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": post: summary: Review custom deployment protection rules for a workflow run diff --git a/descriptions/api.github.com/dereferenced/api.github.com.2026-03-10.deref.json b/descriptions/api.github.com/dereferenced/api.github.com.2026-03-10.deref.json index 1442e11dfc..fab6dd8f43 100644 --- a/descriptions/api.github.com/dereferenced/api.github.com.2026-03-10.deref.json +++ b/descriptions/api.github.com/dereferenced/api.github.com.2026-03-10.deref.json @@ -231598,6 +231598,506 @@ } } }, + "/repos/{owner}/{repo}/actions/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a repository", + "description": "Lists the active concurrency groups for a repository.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "description": "The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "after", + "description": "A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Concurrency Group List", + "description": "A list of active concurrency groups for a repository.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "last_acquired_at" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "last_acquired_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + } + } + } + } + }, + "examples": { + "default": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "last_acquired_at": "2026-01-15T16:14:23Z" + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "last_acquired_at": "2026-01-15T16:13:55Z" + } + ] + } + } + } + } + }, + "headers": { + "Link": { + "example": "; rel=\"next\", ; rel=\"last\"", + "schema": { + "type": "string" + } + } + } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": { + "get": { + "summary": "Get a concurrency group for a repository", + "description": "Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.\n\nOptionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.\n\nWhen using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/get-concurrency-group-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "concurrency_group_name", + "description": "The name of the concurrency group.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ahead_of_run", + "description": "Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with `ahead_of_job`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + }, + { + "name": "ahead_of_job", + "description": "Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with `ahead_of_run`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Concurrency Group", + "description": "A concurrency group with the workflow runs and jobs that are either currently holding\nor waiting for the concurrency group lease.", + "type": "object", + "required": [ + "group_name", + "group_url", + "total_count", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "total_count": { + "type": "integer" + }, + "group_members": { + "type": "array", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + }, + "examples": { + "default": { + "value": { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "total_count": 3, + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress" + }, + { + "run_id": 30433643, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433643", + "status": "pending" + }, + { + "run_id": 30433644, + "run_name": "Deploy hotfix", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644", + "job_id": 798245260, + "job_name": "deploy", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260", + "status": "pending" + } + ] + } + } + } + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "title": "Basic Error", + "description": "Basic Error", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/jobs/{job_id}": { "get": { "summary": "Get a job for a workflow run", @@ -246475,21 +246975,188 @@ "githubCloudOnly": false, "enabledForGitHubApps": true, "category": "actions", - "subcategory": "workflow-jobs" + "subcategory": "workflow-jobs" + } + } + }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs": { + "get": { + "summary": "Download workflow run attempt logs", + "description": "Gets a redirect URL to download an archive of log files for a specific workflow run attempt. This link expires after\n1 minute. Look for `Location:` in the response header to find the URL for the download.\n\nAnyone with read access to the repository can use this endpoint.\n\nIf the repository is private, OAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "tags": [ + "actions" + ], + "operationId": "actions/download-workflow-run-attempt-logs", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/workflow-runs#download-workflow-run-attempt-logs" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "run_id", + "description": "The unique identifier of the workflow run.", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "attempt_number", + "description": "The attempt number of the workflow run.", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "302": { + "description": "Response", + "headers": { + "Location": { + "example": "https://pipelines.actions.githubusercontent.com/ab1f3cCFPB34Nd6imvFxpGZH5hNlDp2wijMwl2gDoO0bcrrlJj/_apis/pipelines/1/runs/19/signedlogcontent?urlExpires=2020-01-22T22%3A44%3A54.1389777Z&urlSigningMethod=HMACV1&urlSignature=2TUDfIg4fm36OJmfPy6km5QD5DLCOkBVzvhWZM8B%2BUY%3D", + "schema": { + "type": "string" + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "workflow-runs" + } + } + }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel": { + "post": { + "summary": "Cancel a workflow run", + "description": "Cancels a workflow run using its `id`.\n\nOAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "tags": [ + "actions" + ], + "operationId": "actions/cancel-workflow-run", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/workflow-runs#cancel-a-workflow-run" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "run_id", + "description": "The unique identifier of the workflow run.", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "202": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Empty Object", + "description": "An object without any properties.", + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "examples": { + "default": { + "value": null + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "title": "Basic Error", + "description": "Basic Error", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "workflow-runs" } } }, - "/repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs": { + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": { "get": { - "summary": "Download workflow run attempt logs", - "description": "Gets a redirect URL to download an archive of log files for a specific workflow run attempt. This link expires after\n1 minute. Look for `Location:` in the response header to find the URL for the download.\n\nAnyone with read access to the repository can use this endpoint.\n\nIf the repository is private, OAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "summary": "List concurrency groups for a workflow run", + "description": "Lists all concurrency groups associated with a workflow run or its jobs.\n\nThe set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the `group_members` array will be empty.\n`total_count` reflects the number of groups the run participates in by\nconfiguration, not the number with active items.\n\nThis differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`,\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.\n\nResults are sorted by group name and support cursor-based pagination via\n`before` and `after`. The `after` cursor paginates forward only and does\nnot emit a `rel=\"prev\"` Link; use `before` to page backward from a\nforward page's `next` cursor.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", "tags": [ "actions" ], - "operationId": "actions/download-workflow-run-attempt-logs", + "operationId": "actions/list-concurrency-groups-for-workflow-run", "externalDocs": { "description": "API method documentation", - "url": "https://docs.github.com/rest/actions/workflow-runs#download-workflow-run-attempt-logs" + "url": "https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run" }, "parameters": [ { @@ -246520,99 +247187,207 @@ } }, { - "name": "attempt_number", - "description": "The attempt number of the workflow run.", - "in": "path", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "responses": { - "302": { - "description": "Response", - "headers": { - "Location": { - "example": "https://pipelines.actions.githubusercontent.com/ab1f3cCFPB34Nd6imvFxpGZH5hNlDp2wijMwl2gDoO0bcrrlJj/_apis/pipelines/1/runs/19/signedlogcontent?urlExpires=2020-01-22T22%3A44%3A54.1389777Z&urlSigningMethod=HMACV1&urlSignature=2TUDfIg4fm36OJmfPy6km5QD5DLCOkBVzvhWZM8B%2BUY%3D", - "schema": { - "type": "string" - } - } - } - } - }, - "x-github": { - "githubCloudOnly": false, - "enabledForGitHubApps": true, - "category": "actions", - "subcategory": "workflow-runs" - } - } - }, - "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel": { - "post": { - "summary": "Cancel a workflow run", - "description": "Cancels a workflow run using its `id`.\n\nOAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", - "tags": [ - "actions" - ], - "operationId": "actions/cancel-workflow-run", - "externalDocs": { - "description": "API method documentation", - "url": "https://docs.github.com/rest/actions/workflow-runs#cancel-a-workflow-run" - }, - "parameters": [ - { - "name": "owner", - "description": "The account owner of the repository. The name is not case sensitive.", - "in": "path", - "required": true, + "name": "per_page", + "description": "The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", "schema": { - "type": "string" + "type": "integer", + "default": 30 } }, { - "name": "repo", - "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", - "in": "path", - "required": true, + "name": "before", + "description": "A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results before this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, "schema": { "type": "string" } }, { - "name": "run_id", - "description": "The unique identifier of the workflow run.", - "in": "path", - "required": true, + "name": "after", + "description": "A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, "schema": { - "type": "integer" + "type": "string" } } ], "responses": { - "202": { + "200": { "description": "Response", "content": { "application/json": { "schema": { - "title": "Empty Object", - "description": "An object without any properties.", + "title": "Concurrency Group Run List", + "description": "A list of concurrency groups associated with a workflow run.", "type": "object", - "properties": {}, - "additionalProperties": false + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer", + "description": "The total number of concurrency groups this workflow run participates in,\nderived from the run's configuration. This count is not filtered by\nwhether the run currently holds or is waiting in each group, so it can\ninclude groups whose `group_members` array is empty (for example, when\nthe run has already released its lease in that group)." + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group. May return 404 if the group\nhas no active items at the time it is requested, since the\nget-by-name endpoint reports the live repo-wide state of a group\nwhile this endpoint lists groups associated with a run by\nconfiguration." + }, + "group_members": { + "type": "array", + "description": "Items belonging to this workflow run that are either currently holding or\nwaiting for the concurrency group lease. May be empty if the run no\nlonger has any active or queued items in this group.", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status", + "position", + "position_url" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "position": { + "type": "integer", + "description": "Queue position. 0 means the item holds the concurrency lease (in_progress), 1 or higher means queued (pending)." + }, + "position_url": { + "type": "string", + "format": "uri", + "description": "API URL to get items ahead of this item in the concurrency group." + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + } + } + } }, "examples": { "default": { - "value": null + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress", + "position": 0, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642" + } + ] + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "pending", + "position": 2, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260", + "job_id": 798245260, + "job_name": "build", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260" + } + ] + } + ] + } } } } + }, + "headers": { + "Link": { + "example": "; rel=\"next\", ; rel=\"last\"", + "schema": { + "type": "string" + } + } } }, - "409": { - "description": "Conflict", + "404": { + "description": "Resource not found", "content": { "application/json": { "schema": { @@ -246636,13 +247411,82 @@ } } } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } } }, "x-github": { "githubCloudOnly": false, "enabledForGitHubApps": true, "category": "actions", - "subcategory": "workflow-runs" + "subcategory": "concurrency-groups" } } }, diff --git a/descriptions/api.github.com/dereferenced/api.github.com.2026-03-10.deref.yaml b/descriptions/api.github.com/dereferenced/api.github.com.2026-03-10.deref.yaml index ef0e28ddf9..247d578671 100644 --- a/descriptions/api.github.com/dereferenced/api.github.com.2026-03-10.deref.yaml +++ b/descriptions/api.github.com/dereferenced/api.github.com.2026-03-10.deref.yaml @@ -53791,6 +53791,240 @@ paths: enabledForGitHubApps: true category: actions subcategory: cache + "/repos/{owner}/{repo}/actions/concurrency_groups": + get: + summary: List concurrency groups for a repository + description: |- + Lists the active concurrency groups for a repository. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository + parameters: + - *348 + - *349 + - *17 + - *48 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group List + description: A list of active concurrency groups for a repository. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - last_acquired_at + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + last_acquired_at: + type: string + format: date-time + nullable: true + examples: + default: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + last_acquired_at: '2026-01-15T16:14:23Z' + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + last_acquired_at: '2026-01-15T16:13:55Z' + headers: + Link: *70 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": + get: + summary: Get a concurrency group for a repository + description: |- + Gets a specific concurrency group for a repository, including all instances in the group's queue. + Returns 404 if the group is inactive or does not exist. + + Optionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items + ahead of the specified workflow run or job in the queue, plus the specified item itself + (returned as the last element). This is useful for determining what is blocking a particular + run or job. Returns 422 if the specified run or job is not in this concurrency group. + + When using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow + leases held on behalf of that run. Job-level leases within the run are not considered to + block the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow + leases on the job's ancestor paths. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/get-concurrency-group-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository + parameters: + - *348 + - *349 + - name: concurrency_group_name + description: The name of the concurrency group. + in: path + required: true + schema: + type: string + - name: ahead_of_run + description: |- + Filter to items ahead of this workflow run ID in the queue, plus the run itself. + Matches workflow-level concurrency and reusable-workflow leases held on behalf of + the run. Mutually exclusive with `ahead_of_job`. + in: query + required: false + schema: + type: integer + minimum: 1 + - name: ahead_of_job + description: |- + Filter to items ahead of this job ID in the queue, plus the job itself. + Matches job-level concurrency and reusable-workflow leases on the job's + ancestor paths. Mutually exclusive with `ahead_of_run`. + in: query + required: false + schema: + type: integer + minimum: 1 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group + description: |- + A concurrency group with the workflow runs and jobs that are either currently holding + or waiting for the concurrency group lease. + type: object + required: + - group_name + - group_url + - total_count + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + total_count: + type: integer + group_members: + type: array + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + job_id: + type: integer + description: The ID of the job, when the item represents + a job-level or reusable-workflow-level lease. + job_name: + type: string + description: The display name of the job, when the item + represents a job-level or reusable-workflow-level lease. + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending + examples: + default: + value: + group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + total_count: 3 + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + - run_id: 30433643 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433643 + status: pending + - run_id: 30433644 + run_name: Deploy hotfix + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644 + job_id: 798245260 + job_name: deploy + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260 + status: pending + '404': *6 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/jobs/{job_id}": get: summary: Get a job for a workflow run @@ -56742,6 +56976,192 @@ paths: enabledForGitHubApps: true category: actions subcategory: workflow-runs + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": + get: + summary: List concurrency groups for a workflow run + description: |- + Lists all concurrency groups associated with a workflow run or its jobs. + + The set of groups is derived from the run's configuration, so a group is + included even when the run no longer has any items currently holding or + waiting in it. In that case the `group_members` array will be empty. + `total_count` reflects the number of groups the run participates in by + configuration, not the number with active items. + + This differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`, + which returns 404 when a group has no active items. That endpoint reports + the live state of a group repo-wide, while this endpoint reports the + groups associated with a specific run by configuration. + + Results are sorted by group name and support cursor-based pagination via + `before` and `after`. The `after` cursor paginates forward only and does + not emit a `rel="prev"` Link; use `before` to page backward from a + forward page's `next` cursor. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-workflow-run + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run + parameters: + - *348 + - *349 + - *386 + - *17 + - *47 + - *48 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group Run List + description: A list of concurrency groups associated with a workflow + run. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + description: |- + The total number of concurrency groups this workflow run participates in, + derived from the run's configuration. This count is not filtered by + whether the run currently holds or is waiting in each group, so it can + include groups whose `group_members` array is empty (for example, when + the run has already released its lease in that group). + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: |- + API URL for this concurrency group. May return 404 if the group + has no active items at the time it is requested, since the + get-by-name endpoint reports the live repo-wide state of a group + while this endpoint lists groups associated with a run by + configuration. + group_members: + type: array + description: |- + Items belonging to this workflow run that are either currently holding or + waiting for the concurrency group lease. May be empty if the run no + longer has any active or queued items in this group. + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + - position + - position_url + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + position: + type: integer + description: Queue position. 0 means the item holds + the concurrency lease (in_progress), 1 or higher + means queued (pending). + position_url: + type: string + format: uri + description: API URL to get items ahead of this item + in the concurrency group. + job_id: + type: integer + description: The ID of the job, when the item represents + a job-level or reusable-workflow-level lease. + nullable: true + job_name: + type: string + description: The display name of the job, when the + item represents a job-level or reusable-workflow-level + lease. + nullable: true + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending + examples: + default: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + position: 0 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642 + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: pending + position: 2 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260 + job_id: 798245260 + job_name: build + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260 + headers: + Link: *70 + '404': *6 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": post: summary: Review custom deployment protection rules for a workflow run diff --git a/descriptions/api.github.com/dereferenced/api.github.com.deref.json b/descriptions/api.github.com/dereferenced/api.github.com.deref.json index 5119ba920e..cad330b465 100644 --- a/descriptions/api.github.com/dereferenced/api.github.com.deref.json +++ b/descriptions/api.github.com/dereferenced/api.github.com.deref.json @@ -244845,6 +244845,506 @@ } } }, + "/repos/{owner}/{repo}/actions/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a repository", + "description": "Lists the active concurrency groups for a repository.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "description": "The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "after", + "description": "A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Concurrency Group List", + "description": "A list of active concurrency groups for a repository.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "last_acquired_at" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "last_acquired_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + } + } + } + } + }, + "examples": { + "default": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "last_acquired_at": "2026-01-15T16:14:23Z" + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "last_acquired_at": "2026-01-15T16:13:55Z" + } + ] + } + } + } + } + }, + "headers": { + "Link": { + "example": "; rel=\"next\", ; rel=\"last\"", + "schema": { + "type": "string" + } + } + } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": { + "get": { + "summary": "Get a concurrency group for a repository", + "description": "Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.\n\nOptionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.\n\nWhen using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/get-concurrency-group-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "concurrency_group_name", + "description": "The name of the concurrency group.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ahead_of_run", + "description": "Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with `ahead_of_job`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + }, + { + "name": "ahead_of_job", + "description": "Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with `ahead_of_run`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Concurrency Group", + "description": "A concurrency group with the workflow runs and jobs that are either currently holding\nor waiting for the concurrency group lease.", + "type": "object", + "required": [ + "group_name", + "group_url", + "total_count", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "total_count": { + "type": "integer" + }, + "group_members": { + "type": "array", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + }, + "examples": { + "default": { + "value": { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "total_count": 3, + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress" + }, + { + "run_id": 30433643, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433643", + "status": "pending" + }, + { + "run_id": 30433644, + "run_name": "Deploy hotfix", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644", + "job_id": 798245260, + "job_name": "deploy", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260", + "status": "pending" + } + ] + } + } + } + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "title": "Basic Error", + "description": "Basic Error", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/jobs/{job_id}": { "get": { "summary": "Get a job for a workflow run", @@ -260046,21 +260546,188 @@ "githubCloudOnly": false, "enabledForGitHubApps": true, "category": "actions", - "subcategory": "workflow-jobs" + "subcategory": "workflow-jobs" + } + } + }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs": { + "get": { + "summary": "Download workflow run attempt logs", + "description": "Gets a redirect URL to download an archive of log files for a specific workflow run attempt. This link expires after\n1 minute. Look for `Location:` in the response header to find the URL for the download.\n\nAnyone with read access to the repository can use this endpoint.\n\nIf the repository is private, OAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "tags": [ + "actions" + ], + "operationId": "actions/download-workflow-run-attempt-logs", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/workflow-runs#download-workflow-run-attempt-logs" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "run_id", + "description": "The unique identifier of the workflow run.", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "name": "attempt_number", + "description": "The attempt number of the workflow run.", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "302": { + "description": "Response", + "headers": { + "Location": { + "example": "https://pipelines.actions.githubusercontent.com/ab1f3cCFPB34Nd6imvFxpGZH5hNlDp2wijMwl2gDoO0bcrrlJj/_apis/pipelines/1/runs/19/signedlogcontent?urlExpires=2020-01-22T22%3A44%3A54.1389777Z&urlSigningMethod=HMACV1&urlSignature=2TUDfIg4fm36OJmfPy6km5QD5DLCOkBVzvhWZM8B%2BUY%3D", + "schema": { + "type": "string" + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "workflow-runs" + } + } + }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel": { + "post": { + "summary": "Cancel a workflow run", + "description": "Cancels a workflow run using its `id`.\n\nOAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "tags": [ + "actions" + ], + "operationId": "actions/cancel-workflow-run", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/rest/actions/workflow-runs#cancel-a-workflow-run" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "run_id", + "description": "The unique identifier of the workflow run.", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "202": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Empty Object", + "description": "An object without any properties.", + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "examples": { + "default": { + "value": null + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "title": "Basic Error", + "description": "Basic Error", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "workflow-runs" } } }, - "/repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs": { + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": { "get": { - "summary": "Download workflow run attempt logs", - "description": "Gets a redirect URL to download an archive of log files for a specific workflow run attempt. This link expires after\n1 minute. Look for `Location:` in the response header to find the URL for the download.\n\nAnyone with read access to the repository can use this endpoint.\n\nIf the repository is private, OAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "summary": "List concurrency groups for a workflow run", + "description": "Lists all concurrency groups associated with a workflow run or its jobs.\n\nThe set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the `group_members` array will be empty.\n`total_count` reflects the number of groups the run participates in by\nconfiguration, not the number with active items.\n\nThis differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`,\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.\n\nResults are sorted by group name and support cursor-based pagination via\n`before` and `after`. The `after` cursor paginates forward only and does\nnot emit a `rel=\"prev\"` Link; use `before` to page backward from a\nforward page's `next` cursor.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", "tags": [ "actions" ], - "operationId": "actions/download-workflow-run-attempt-logs", + "operationId": "actions/list-concurrency-groups-for-workflow-run", "externalDocs": { "description": "API method documentation", - "url": "https://docs.github.com/rest/actions/workflow-runs#download-workflow-run-attempt-logs" + "url": "https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run" }, "parameters": [ { @@ -260091,99 +260758,207 @@ } }, { - "name": "attempt_number", - "description": "The attempt number of the workflow run.", - "in": "path", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "responses": { - "302": { - "description": "Response", - "headers": { - "Location": { - "example": "https://pipelines.actions.githubusercontent.com/ab1f3cCFPB34Nd6imvFxpGZH5hNlDp2wijMwl2gDoO0bcrrlJj/_apis/pipelines/1/runs/19/signedlogcontent?urlExpires=2020-01-22T22%3A44%3A54.1389777Z&urlSigningMethod=HMACV1&urlSignature=2TUDfIg4fm36OJmfPy6km5QD5DLCOkBVzvhWZM8B%2BUY%3D", - "schema": { - "type": "string" - } - } - } - } - }, - "x-github": { - "githubCloudOnly": false, - "enabledForGitHubApps": true, - "category": "actions", - "subcategory": "workflow-runs" - } - } - }, - "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel": { - "post": { - "summary": "Cancel a workflow run", - "description": "Cancels a workflow run using its `id`.\n\nOAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", - "tags": [ - "actions" - ], - "operationId": "actions/cancel-workflow-run", - "externalDocs": { - "description": "API method documentation", - "url": "https://docs.github.com/rest/actions/workflow-runs#cancel-a-workflow-run" - }, - "parameters": [ - { - "name": "owner", - "description": "The account owner of the repository. The name is not case sensitive.", - "in": "path", - "required": true, + "name": "per_page", + "description": "The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", "schema": { - "type": "string" + "type": "integer", + "default": 30 } }, { - "name": "repo", - "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", - "in": "path", - "required": true, + "name": "before", + "description": "A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results before this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, "schema": { "type": "string" } }, { - "name": "run_id", - "description": "The unique identifier of the workflow run.", - "in": "path", - "required": true, + "name": "after", + "description": "A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, "schema": { - "type": "integer" + "type": "string" } } ], "responses": { - "202": { + "200": { "description": "Response", "content": { "application/json": { "schema": { - "title": "Empty Object", - "description": "An object without any properties.", + "title": "Concurrency Group Run List", + "description": "A list of concurrency groups associated with a workflow run.", "type": "object", - "properties": {}, - "additionalProperties": false + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer", + "description": "The total number of concurrency groups this workflow run participates in,\nderived from the run's configuration. This count is not filtered by\nwhether the run currently holds or is waiting in each group, so it can\ninclude groups whose `group_members` array is empty (for example, when\nthe run has already released its lease in that group)." + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group. May return 404 if the group\nhas no active items at the time it is requested, since the\nget-by-name endpoint reports the live repo-wide state of a group\nwhile this endpoint lists groups associated with a run by\nconfiguration." + }, + "group_members": { + "type": "array", + "description": "Items belonging to this workflow run that are either currently holding or\nwaiting for the concurrency group lease. May be empty if the run no\nlonger has any active or queued items in this group.", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status", + "position", + "position_url" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "position": { + "type": "integer", + "description": "Queue position. 0 means the item holds the concurrency lease (in_progress), 1 or higher means queued (pending)." + }, + "position_url": { + "type": "string", + "format": "uri", + "description": "API URL to get items ahead of this item in the concurrency group." + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + } + } + } }, "examples": { "default": { - "value": null + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress", + "position": 0, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642" + } + ] + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "pending", + "position": 2, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260", + "job_id": 798245260, + "job_name": "build", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260" + } + ] + } + ] + } } } } + }, + "headers": { + "Link": { + "example": "; rel=\"next\", ; rel=\"last\"", + "schema": { + "type": "string" + } + } } }, - "409": { - "description": "Conflict", + "404": { + "description": "Resource not found", "content": { "application/json": { "schema": { @@ -260207,13 +260982,82 @@ } } } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } } }, "x-github": { "githubCloudOnly": false, "enabledForGitHubApps": true, "category": "actions", - "subcategory": "workflow-runs" + "subcategory": "concurrency-groups" } } }, diff --git a/descriptions/api.github.com/dereferenced/api.github.com.deref.yaml b/descriptions/api.github.com/dereferenced/api.github.com.deref.yaml index c5b6a3f961..1b78505554 100644 --- a/descriptions/api.github.com/dereferenced/api.github.com.deref.yaml +++ b/descriptions/api.github.com/dereferenced/api.github.com.deref.yaml @@ -54816,6 +54816,240 @@ paths: enabledForGitHubApps: true category: actions subcategory: cache + "/repos/{owner}/{repo}/actions/concurrency_groups": + get: + summary: List concurrency groups for a repository + description: |- + Lists the active concurrency groups for a repository. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository + parameters: + - *350 + - *351 + - *17 + - *48 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group List + description: A list of active concurrency groups for a repository. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - last_acquired_at + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + last_acquired_at: + type: string + format: date-time + nullable: true + examples: + default: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + last_acquired_at: '2026-01-15T16:14:23Z' + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + last_acquired_at: '2026-01-15T16:13:55Z' + headers: + Link: *70 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": + get: + summary: Get a concurrency group for a repository + description: |- + Gets a specific concurrency group for a repository, including all instances in the group's queue. + Returns 404 if the group is inactive or does not exist. + + Optionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items + ahead of the specified workflow run or job in the queue, plus the specified item itself + (returned as the last element). This is useful for determining what is blocking a particular + run or job. Returns 422 if the specified run or job is not in this concurrency group. + + When using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow + leases held on behalf of that run. Job-level leases within the run are not considered to + block the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow + leases on the job's ancestor paths. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/get-concurrency-group-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository + parameters: + - *350 + - *351 + - name: concurrency_group_name + description: The name of the concurrency group. + in: path + required: true + schema: + type: string + - name: ahead_of_run + description: |- + Filter to items ahead of this workflow run ID in the queue, plus the run itself. + Matches workflow-level concurrency and reusable-workflow leases held on behalf of + the run. Mutually exclusive with `ahead_of_job`. + in: query + required: false + schema: + type: integer + minimum: 1 + - name: ahead_of_job + description: |- + Filter to items ahead of this job ID in the queue, plus the job itself. + Matches job-level concurrency and reusable-workflow leases on the job's + ancestor paths. Mutually exclusive with `ahead_of_run`. + in: query + required: false + schema: + type: integer + minimum: 1 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group + description: |- + A concurrency group with the workflow runs and jobs that are either currently holding + or waiting for the concurrency group lease. + type: object + required: + - group_name + - group_url + - total_count + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + total_count: + type: integer + group_members: + type: array + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + job_id: + type: integer + description: The ID of the job, when the item represents + a job-level or reusable-workflow-level lease. + job_name: + type: string + description: The display name of the job, when the item + represents a job-level or reusable-workflow-level lease. + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending + examples: + default: + value: + group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + total_count: 3 + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + - run_id: 30433643 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433643 + status: pending + - run_id: 30433644 + run_name: Deploy hotfix + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644 + job_id: 798245260 + job_name: deploy + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260 + status: pending + '404': *6 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/jobs/{job_id}": get: summary: Get a job for a workflow run @@ -57767,6 +58001,192 @@ paths: enabledForGitHubApps: true category: actions subcategory: workflow-runs + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": + get: + summary: List concurrency groups for a workflow run + description: |- + Lists all concurrency groups associated with a workflow run or its jobs. + + The set of groups is derived from the run's configuration, so a group is + included even when the run no longer has any items currently holding or + waiting in it. In that case the `group_members` array will be empty. + `total_count` reflects the number of groups the run participates in by + configuration, not the number with active items. + + This differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`, + which returns 404 when a group has no active items. That endpoint reports + the live state of a group repo-wide, while this endpoint reports the + groups associated with a specific run by configuration. + + Results are sorted by group name and support cursor-based pagination via + `before` and `after`. The `after` cursor paginates forward only and does + not emit a `rel="prev"` Link; use `before` to page backward from a + forward page's `next` cursor. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-workflow-run + externalDocs: + description: API method documentation + url: https://docs.github.com/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run + parameters: + - *350 + - *351 + - *388 + - *17 + - *47 + - *48 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group Run List + description: A list of concurrency groups associated with a workflow + run. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + description: |- + The total number of concurrency groups this workflow run participates in, + derived from the run's configuration. This count is not filtered by + whether the run currently holds or is waiting in each group, so it can + include groups whose `group_members` array is empty (for example, when + the run has already released its lease in that group). + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: |- + API URL for this concurrency group. May return 404 if the group + has no active items at the time it is requested, since the + get-by-name endpoint reports the live repo-wide state of a group + while this endpoint lists groups associated with a run by + configuration. + group_members: + type: array + description: |- + Items belonging to this workflow run that are either currently holding or + waiting for the concurrency group lease. May be empty if the run no + longer has any active or queued items in this group. + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + - position + - position_url + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + position: + type: integer + description: Queue position. 0 means the item holds + the concurrency lease (in_progress), 1 or higher + means queued (pending). + position_url: + type: string + format: uri + description: API URL to get items ahead of this item + in the concurrency group. + job_id: + type: integer + description: The ID of the job, when the item represents + a job-level or reusable-workflow-level lease. + nullable: true + job_name: + type: string + description: The display name of the job, when the + item represents a job-level or reusable-workflow-level + lease. + nullable: true + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending + examples: + default: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + position: 0 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642 + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: pending + position: 2 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260 + job_id: 798245260 + job_name: build + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260 + headers: + Link: *70 + '404': *6 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": post: summary: Review custom deployment protection rules for a workflow run diff --git a/descriptions/ghec/dereferenced/ghec.2022-11-28.deref.json b/descriptions/ghec/dereferenced/ghec.2022-11-28.deref.json index 6123a941d4..ee395b348e 100644 --- a/descriptions/ghec/dereferenced/ghec.2022-11-28.deref.json +++ b/descriptions/ghec/dereferenced/ghec.2022-11-28.deref.json @@ -293067,6 +293067,506 @@ } } }, + "/repos/{owner}/{repo}/actions/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a repository", + "description": "Lists the active concurrency groups for a repository.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "description": "The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "after", + "description": "A cursor, as given in the [Link header](https://docs.github.com/enterprise-cloud@latest/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Concurrency Group List", + "description": "A list of active concurrency groups for a repository.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "last_acquired_at" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "last_acquired_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + } + } + } + } + }, + "examples": { + "default": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "last_acquired_at": "2026-01-15T16:14:23Z" + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "last_acquired_at": "2026-01-15T16:13:55Z" + } + ] + } + } + } + } + }, + "headers": { + "Link": { + "example": "; rel=\"next\", ; rel=\"last\"", + "schema": { + "type": "string" + } + } + } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": { + "get": { + "summary": "Get a concurrency group for a repository", + "description": "Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.\n\nOptionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.\n\nWhen using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/get-concurrency-group-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "concurrency_group_name", + "description": "The name of the concurrency group.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ahead_of_run", + "description": "Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with `ahead_of_job`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + }, + { + "name": "ahead_of_job", + "description": "Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with `ahead_of_run`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Concurrency Group", + "description": "A concurrency group with the workflow runs and jobs that are either currently holding\nor waiting for the concurrency group lease.", + "type": "object", + "required": [ + "group_name", + "group_url", + "total_count", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "total_count": { + "type": "integer" + }, + "group_members": { + "type": "array", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + }, + "examples": { + "default": { + "value": { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "total_count": 3, + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress" + }, + { + "run_id": 30433643, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433643", + "status": "pending" + }, + { + "run_id": 30433644, + "run_name": "Deploy hotfix", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644", + "job_id": 798245260, + "job_name": "deploy", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260", + "status": "pending" + } + ] + } + } + } + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "title": "Basic Error", + "description": "Basic Error", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/jobs/{job_id}": { "get": { "summary": "Get a job for a workflow run", @@ -308125,13 +308625,109 @@ } ], "responses": { - "302": { + "302": { + "description": "Response", + "headers": { + "Location": { + "example": "https://pipelines.actions.githubusercontent.com/ab1f3cCFPB34Nd6imvFxpGZH5hNlDp2wijMwl2gDoO0bcrrlJj/_apis/pipelines/1/runs/19/signedlogcontent?urlExpires=2020-01-22T22%3A44%3A54.1389777Z&urlSigningMethod=HMACV1&urlSignature=2TUDfIg4fm36OJmfPy6km5QD5DLCOkBVzvhWZM8B%2BUY%3D", + "schema": { + "type": "string" + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "workflow-runs" + } + } + }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel": { + "post": { + "summary": "Cancel a workflow run", + "description": "Cancels a workflow run using its `id`.\n\nOAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "tags": [ + "actions" + ], + "operationId": "actions/cancel-workflow-run", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/workflow-runs#cancel-a-workflow-run" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "run_id", + "description": "The unique identifier of the workflow run.", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "202": { "description": "Response", - "headers": { - "Location": { - "example": "https://pipelines.actions.githubusercontent.com/ab1f3cCFPB34Nd6imvFxpGZH5hNlDp2wijMwl2gDoO0bcrrlJj/_apis/pipelines/1/runs/19/signedlogcontent?urlExpires=2020-01-22T22%3A44%3A54.1389777Z&urlSigningMethod=HMACV1&urlSignature=2TUDfIg4fm36OJmfPy6km5QD5DLCOkBVzvhWZM8B%2BUY%3D", + "content": { + "application/json": { "schema": { - "type": "string" + "title": "Empty Object", + "description": "An object without any properties.", + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "examples": { + "default": { + "value": null + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "title": "Basic Error", + "description": "Basic Error", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "status": { + "type": "string" + } + } } } } @@ -308145,17 +308741,17 @@ } } }, - "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel": { - "post": { - "summary": "Cancel a workflow run", - "description": "Cancels a workflow run using its `id`.\n\nOAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a workflow run", + "description": "Lists all concurrency groups associated with a workflow run or its jobs.\n\nThe set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the `group_members` array will be empty.\n`total_count` reflects the number of groups the run participates in by\nconfiguration, not the number with active items.\n\nThis differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`,\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.\n\nResults are sorted by group name and support cursor-based pagination via\n`before` and `after`. The `after` cursor paginates forward only and does\nnot emit a `rel=\"prev\"` Link; use `before` to page backward from a\nforward page's `next` cursor.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", "tags": [ "actions" ], - "operationId": "actions/cancel-workflow-run", + "operationId": "actions/list-concurrency-groups-for-workflow-run", "externalDocs": { "description": "API method documentation", - "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/workflow-runs#cancel-a-workflow-run" + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run" }, "parameters": [ { @@ -308184,30 +308780,209 @@ "schema": { "type": "integer" } + }, + { + "name": "per_page", + "description": "The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "before", + "description": "A cursor, as given in the [Link header](https://docs.github.com/enterprise-cloud@latest/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results before this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "after", + "description": "A cursor, as given in the [Link header](https://docs.github.com/enterprise-cloud@latest/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "202": { + "200": { "description": "Response", "content": { "application/json": { "schema": { - "title": "Empty Object", - "description": "An object without any properties.", + "title": "Concurrency Group Run List", + "description": "A list of concurrency groups associated with a workflow run.", "type": "object", - "properties": {}, - "additionalProperties": false + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer", + "description": "The total number of concurrency groups this workflow run participates in,\nderived from the run's configuration. This count is not filtered by\nwhether the run currently holds or is waiting in each group, so it can\ninclude groups whose `group_members` array is empty (for example, when\nthe run has already released its lease in that group)." + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group. May return 404 if the group\nhas no active items at the time it is requested, since the\nget-by-name endpoint reports the live repo-wide state of a group\nwhile this endpoint lists groups associated with a run by\nconfiguration." + }, + "group_members": { + "type": "array", + "description": "Items belonging to this workflow run that are either currently holding or\nwaiting for the concurrency group lease. May be empty if the run no\nlonger has any active or queued items in this group.", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status", + "position", + "position_url" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "position": { + "type": "integer", + "description": "Queue position. 0 means the item holds the concurrency lease (in_progress), 1 or higher means queued (pending)." + }, + "position_url": { + "type": "string", + "format": "uri", + "description": "API URL to get items ahead of this item in the concurrency group." + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + } + } + } }, "examples": { "default": { - "value": null + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress", + "position": 0, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642" + } + ] + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "pending", + "position": 2, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260", + "job_id": 798245260, + "job_name": "build", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260" + } + ] + } + ] + } } } } + }, + "headers": { + "Link": { + "example": "; rel=\"next\", ; rel=\"last\"", + "schema": { + "type": "string" + } + } } }, - "409": { - "description": "Conflict", + "404": { + "description": "Resource not found", "content": { "application/json": { "schema": { @@ -308231,13 +309006,82 @@ } } } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } } }, "x-github": { "githubCloudOnly": false, "enabledForGitHubApps": true, "category": "actions", - "subcategory": "workflow-runs" + "subcategory": "concurrency-groups" } } }, diff --git a/descriptions/ghec/dereferenced/ghec.2022-11-28.deref.yaml b/descriptions/ghec/dereferenced/ghec.2022-11-28.deref.yaml index d3dbf4d4a0..e1842f2e8e 100644 --- a/descriptions/ghec/dereferenced/ghec.2022-11-28.deref.yaml +++ b/descriptions/ghec/dereferenced/ghec.2022-11-28.deref.yaml @@ -67082,6 +67082,240 @@ paths: enabledForGitHubApps: true category: actions subcategory: cache + "/repos/{owner}/{repo}/actions/concurrency_groups": + get: + summary: List concurrency groups for a repository + description: |- + Lists the active concurrency groups for a repository. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository + parameters: + - *484 + - *485 + - *17 + - *111 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group List + description: A list of active concurrency groups for a repository. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - last_acquired_at + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + last_acquired_at: + type: string + format: date-time + nullable: true + examples: + default: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + last_acquired_at: '2026-01-15T16:14:23Z' + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + last_acquired_at: '2026-01-15T16:13:55Z' + headers: + Link: *47 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": + get: + summary: Get a concurrency group for a repository + description: |- + Gets a specific concurrency group for a repository, including all instances in the group's queue. + Returns 404 if the group is inactive or does not exist. + + Optionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items + ahead of the specified workflow run or job in the queue, plus the specified item itself + (returned as the last element). This is useful for determining what is blocking a particular + run or job. Returns 422 if the specified run or job is not in this concurrency group. + + When using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow + leases held on behalf of that run. Job-level leases within the run are not considered to + block the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow + leases on the job's ancestor paths. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/get-concurrency-group-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository + parameters: + - *484 + - *485 + - name: concurrency_group_name + description: The name of the concurrency group. + in: path + required: true + schema: + type: string + - name: ahead_of_run + description: |- + Filter to items ahead of this workflow run ID in the queue, plus the run itself. + Matches workflow-level concurrency and reusable-workflow leases held on behalf of + the run. Mutually exclusive with `ahead_of_job`. + in: query + required: false + schema: + type: integer + minimum: 1 + - name: ahead_of_job + description: |- + Filter to items ahead of this job ID in the queue, plus the job itself. + Matches job-level concurrency and reusable-workflow leases on the job's + ancestor paths. Mutually exclusive with `ahead_of_run`. + in: query + required: false + schema: + type: integer + minimum: 1 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group + description: |- + A concurrency group with the workflow runs and jobs that are either currently holding + or waiting for the concurrency group lease. + type: object + required: + - group_name + - group_url + - total_count + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + total_count: + type: integer + group_members: + type: array + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + job_id: + type: integer + description: The ID of the job, when the item represents + a job-level or reusable-workflow-level lease. + job_name: + type: string + description: The display name of the job, when the item + represents a job-level or reusable-workflow-level lease. + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending + examples: + default: + value: + group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + total_count: 3 + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + - run_id: 30433643 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433643 + status: pending + - run_id: 30433644 + run_name: Deploy hotfix + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644 + job_id: 798245260 + job_name: deploy + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260 + status: pending + '404': *6 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/jobs/{job_id}": get: summary: Get a job for a workflow run @@ -70042,6 +70276,192 @@ paths: enabledForGitHubApps: true category: actions subcategory: workflow-runs + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": + get: + summary: List concurrency groups for a workflow run + description: |- + Lists all concurrency groups associated with a workflow run or its jobs. + + The set of groups is derived from the run's configuration, so a group is + included even when the run no longer has any items currently holding or + waiting in it. In that case the `group_members` array will be empty. + `total_count` reflects the number of groups the run participates in by + configuration, not the number with active items. + + This differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`, + which returns 404 when a group has no active items. That endpoint reports + the live state of a group repo-wide, while this endpoint reports the + groups associated with a specific run by configuration. + + Results are sorted by group name and support cursor-based pagination via + `before` and `after`. The `after` cursor paginates forward only and does + not emit a `rel="prev"` Link; use `before` to page backward from a + forward page's `next` cursor. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-workflow-run + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run + parameters: + - *484 + - *485 + - *508 + - *17 + - *110 + - *111 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group Run List + description: A list of concurrency groups associated with a workflow + run. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + description: |- + The total number of concurrency groups this workflow run participates in, + derived from the run's configuration. This count is not filtered by + whether the run currently holds or is waiting in each group, so it can + include groups whose `group_members` array is empty (for example, when + the run has already released its lease in that group). + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: |- + API URL for this concurrency group. May return 404 if the group + has no active items at the time it is requested, since the + get-by-name endpoint reports the live repo-wide state of a group + while this endpoint lists groups associated with a run by + configuration. + group_members: + type: array + description: |- + Items belonging to this workflow run that are either currently holding or + waiting for the concurrency group lease. May be empty if the run no + longer has any active or queued items in this group. + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + - position + - position_url + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + position: + type: integer + description: Queue position. 0 means the item holds + the concurrency lease (in_progress), 1 or higher + means queued (pending). + position_url: + type: string + format: uri + description: API URL to get items ahead of this item + in the concurrency group. + job_id: + type: integer + description: The ID of the job, when the item represents + a job-level or reusable-workflow-level lease. + nullable: true + job_name: + type: string + description: The display name of the job, when the + item represents a job-level or reusable-workflow-level + lease. + nullable: true + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending + examples: + default: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + position: 0 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642 + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: pending + position: 2 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260 + job_id: 798245260 + job_name: build + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260 + headers: + Link: *47 + '404': *6 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": post: summary: Review custom deployment protection rules for a workflow run diff --git a/descriptions/ghec/dereferenced/ghec.2026-03-10.deref.json b/descriptions/ghec/dereferenced/ghec.2026-03-10.deref.json index 5c6ef7444b..97c7fbe082 100644 --- a/descriptions/ghec/dereferenced/ghec.2026-03-10.deref.json +++ b/descriptions/ghec/dereferenced/ghec.2026-03-10.deref.json @@ -286790,6 +286790,506 @@ } } }, + "/repos/{owner}/{repo}/actions/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a repository", + "description": "Lists the active concurrency groups for a repository.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "description": "The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "after", + "description": "A cursor, as given in the [Link header](https://docs.github.com/enterprise-cloud@latest/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Concurrency Group List", + "description": "A list of active concurrency groups for a repository.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "last_acquired_at" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "last_acquired_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + } + } + } + } + }, + "examples": { + "default": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "last_acquired_at": "2026-01-15T16:14:23Z" + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "last_acquired_at": "2026-01-15T16:13:55Z" + } + ] + } + } + } + } + }, + "headers": { + "Link": { + "example": "; rel=\"next\", ; rel=\"last\"", + "schema": { + "type": "string" + } + } + } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": { + "get": { + "summary": "Get a concurrency group for a repository", + "description": "Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.\n\nOptionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.\n\nWhen using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/get-concurrency-group-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "concurrency_group_name", + "description": "The name of the concurrency group.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ahead_of_run", + "description": "Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with `ahead_of_job`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + }, + { + "name": "ahead_of_job", + "description": "Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with `ahead_of_run`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Concurrency Group", + "description": "A concurrency group with the workflow runs and jobs that are either currently holding\nor waiting for the concurrency group lease.", + "type": "object", + "required": [ + "group_name", + "group_url", + "total_count", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "total_count": { + "type": "integer" + }, + "group_members": { + "type": "array", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + }, + "examples": { + "default": { + "value": { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "total_count": 3, + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress" + }, + { + "run_id": 30433643, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433643", + "status": "pending" + }, + { + "run_id": 30433644, + "run_name": "Deploy hotfix", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644", + "job_id": 798245260, + "job_name": "deploy", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260", + "status": "pending" + } + ] + } + } + } + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "title": "Basic Error", + "description": "Basic Error", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/jobs/{job_id}": { "get": { "summary": "Get a job for a workflow run", @@ -301796,13 +302296,109 @@ } ], "responses": { - "302": { + "302": { + "description": "Response", + "headers": { + "Location": { + "example": "https://pipelines.actions.githubusercontent.com/ab1f3cCFPB34Nd6imvFxpGZH5hNlDp2wijMwl2gDoO0bcrrlJj/_apis/pipelines/1/runs/19/signedlogcontent?urlExpires=2020-01-22T22%3A44%3A54.1389777Z&urlSigningMethod=HMACV1&urlSignature=2TUDfIg4fm36OJmfPy6km5QD5DLCOkBVzvhWZM8B%2BUY%3D", + "schema": { + "type": "string" + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "workflow-runs" + } + } + }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel": { + "post": { + "summary": "Cancel a workflow run", + "description": "Cancels a workflow run using its `id`.\n\nOAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "tags": [ + "actions" + ], + "operationId": "actions/cancel-workflow-run", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/workflow-runs#cancel-a-workflow-run" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "run_id", + "description": "The unique identifier of the workflow run.", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "202": { "description": "Response", - "headers": { - "Location": { - "example": "https://pipelines.actions.githubusercontent.com/ab1f3cCFPB34Nd6imvFxpGZH5hNlDp2wijMwl2gDoO0bcrrlJj/_apis/pipelines/1/runs/19/signedlogcontent?urlExpires=2020-01-22T22%3A44%3A54.1389777Z&urlSigningMethod=HMACV1&urlSignature=2TUDfIg4fm36OJmfPy6km5QD5DLCOkBVzvhWZM8B%2BUY%3D", + "content": { + "application/json": { "schema": { - "type": "string" + "title": "Empty Object", + "description": "An object without any properties.", + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "examples": { + "default": { + "value": null + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "title": "Basic Error", + "description": "Basic Error", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "status": { + "type": "string" + } + } } } } @@ -301816,17 +302412,17 @@ } } }, - "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel": { - "post": { - "summary": "Cancel a workflow run", - "description": "Cancels a workflow run using its `id`.\n\nOAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a workflow run", + "description": "Lists all concurrency groups associated with a workflow run or its jobs.\n\nThe set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the `group_members` array will be empty.\n`total_count` reflects the number of groups the run participates in by\nconfiguration, not the number with active items.\n\nThis differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`,\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.\n\nResults are sorted by group name and support cursor-based pagination via\n`before` and `after`. The `after` cursor paginates forward only and does\nnot emit a `rel=\"prev\"` Link; use `before` to page backward from a\nforward page's `next` cursor.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", "tags": [ "actions" ], - "operationId": "actions/cancel-workflow-run", + "operationId": "actions/list-concurrency-groups-for-workflow-run", "externalDocs": { "description": "API method documentation", - "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/workflow-runs#cancel-a-workflow-run" + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run" }, "parameters": [ { @@ -301855,30 +302451,209 @@ "schema": { "type": "integer" } + }, + { + "name": "per_page", + "description": "The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "before", + "description": "A cursor, as given in the [Link header](https://docs.github.com/enterprise-cloud@latest/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results before this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "after", + "description": "A cursor, as given in the [Link header](https://docs.github.com/enterprise-cloud@latest/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "202": { + "200": { "description": "Response", "content": { "application/json": { "schema": { - "title": "Empty Object", - "description": "An object without any properties.", + "title": "Concurrency Group Run List", + "description": "A list of concurrency groups associated with a workflow run.", "type": "object", - "properties": {}, - "additionalProperties": false + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer", + "description": "The total number of concurrency groups this workflow run participates in,\nderived from the run's configuration. This count is not filtered by\nwhether the run currently holds or is waiting in each group, so it can\ninclude groups whose `group_members` array is empty (for example, when\nthe run has already released its lease in that group)." + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group. May return 404 if the group\nhas no active items at the time it is requested, since the\nget-by-name endpoint reports the live repo-wide state of a group\nwhile this endpoint lists groups associated with a run by\nconfiguration." + }, + "group_members": { + "type": "array", + "description": "Items belonging to this workflow run that are either currently holding or\nwaiting for the concurrency group lease. May be empty if the run no\nlonger has any active or queued items in this group.", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status", + "position", + "position_url" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "position": { + "type": "integer", + "description": "Queue position. 0 means the item holds the concurrency lease (in_progress), 1 or higher means queued (pending)." + }, + "position_url": { + "type": "string", + "format": "uri", + "description": "API URL to get items ahead of this item in the concurrency group." + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + } + } + } }, "examples": { "default": { - "value": null + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress", + "position": 0, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642" + } + ] + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "pending", + "position": 2, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260", + "job_id": 798245260, + "job_name": "build", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260" + } + ] + } + ] + } } } } + }, + "headers": { + "Link": { + "example": "; rel=\"next\", ; rel=\"last\"", + "schema": { + "type": "string" + } + } } }, - "409": { - "description": "Conflict", + "404": { + "description": "Resource not found", "content": { "application/json": { "schema": { @@ -301902,13 +302677,82 @@ } } } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } } }, "x-github": { "githubCloudOnly": false, "enabledForGitHubApps": true, "category": "actions", - "subcategory": "workflow-runs" + "subcategory": "concurrency-groups" } } }, diff --git a/descriptions/ghec/dereferenced/ghec.2026-03-10.deref.yaml b/descriptions/ghec/dereferenced/ghec.2026-03-10.deref.yaml index 31d527135d..79b22119b0 100644 --- a/descriptions/ghec/dereferenced/ghec.2026-03-10.deref.yaml +++ b/descriptions/ghec/dereferenced/ghec.2026-03-10.deref.yaml @@ -66662,6 +66662,240 @@ paths: enabledForGitHubApps: true category: actions subcategory: cache + "/repos/{owner}/{repo}/actions/concurrency_groups": + get: + summary: List concurrency groups for a repository + description: |- + Lists the active concurrency groups for a repository. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository + parameters: + - *484 + - *485 + - *17 + - *111 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group List + description: A list of active concurrency groups for a repository. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - last_acquired_at + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + last_acquired_at: + type: string + format: date-time + nullable: true + examples: + default: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + last_acquired_at: '2026-01-15T16:14:23Z' + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + last_acquired_at: '2026-01-15T16:13:55Z' + headers: + Link: *47 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": + get: + summary: Get a concurrency group for a repository + description: |- + Gets a specific concurrency group for a repository, including all instances in the group's queue. + Returns 404 if the group is inactive or does not exist. + + Optionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items + ahead of the specified workflow run or job in the queue, plus the specified item itself + (returned as the last element). This is useful for determining what is blocking a particular + run or job. Returns 422 if the specified run or job is not in this concurrency group. + + When using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow + leases held on behalf of that run. Job-level leases within the run are not considered to + block the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow + leases on the job's ancestor paths. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/get-concurrency-group-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository + parameters: + - *484 + - *485 + - name: concurrency_group_name + description: The name of the concurrency group. + in: path + required: true + schema: + type: string + - name: ahead_of_run + description: |- + Filter to items ahead of this workflow run ID in the queue, plus the run itself. + Matches workflow-level concurrency and reusable-workflow leases held on behalf of + the run. Mutually exclusive with `ahead_of_job`. + in: query + required: false + schema: + type: integer + minimum: 1 + - name: ahead_of_job + description: |- + Filter to items ahead of this job ID in the queue, plus the job itself. + Matches job-level concurrency and reusable-workflow leases on the job's + ancestor paths. Mutually exclusive with `ahead_of_run`. + in: query + required: false + schema: + type: integer + minimum: 1 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group + description: |- + A concurrency group with the workflow runs and jobs that are either currently holding + or waiting for the concurrency group lease. + type: object + required: + - group_name + - group_url + - total_count + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + total_count: + type: integer + group_members: + type: array + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + job_id: + type: integer + description: The ID of the job, when the item represents + a job-level or reusable-workflow-level lease. + job_name: + type: string + description: The display name of the job, when the item + represents a job-level or reusable-workflow-level lease. + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending + examples: + default: + value: + group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + total_count: 3 + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + - run_id: 30433643 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433643 + status: pending + - run_id: 30433644 + run_name: Deploy hotfix + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644 + job_id: 798245260 + job_name: deploy + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260 + status: pending + '404': *6 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/jobs/{job_id}": get: summary: Get a job for a workflow run @@ -69622,6 +69856,192 @@ paths: enabledForGitHubApps: true category: actions subcategory: workflow-runs + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": + get: + summary: List concurrency groups for a workflow run + description: |- + Lists all concurrency groups associated with a workflow run or its jobs. + + The set of groups is derived from the run's configuration, so a group is + included even when the run no longer has any items currently holding or + waiting in it. In that case the `group_members` array will be empty. + `total_count` reflects the number of groups the run participates in by + configuration, not the number with active items. + + This differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`, + which returns 404 when a group has no active items. That endpoint reports + the live state of a group repo-wide, while this endpoint reports the + groups associated with a specific run by configuration. + + Results are sorted by group name and support cursor-based pagination via + `before` and `after`. The `after` cursor paginates forward only and does + not emit a `rel="prev"` Link; use `before` to page backward from a + forward page's `next` cursor. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-workflow-run + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run + parameters: + - *484 + - *485 + - *508 + - *17 + - *110 + - *111 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group Run List + description: A list of concurrency groups associated with a workflow + run. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + description: |- + The total number of concurrency groups this workflow run participates in, + derived from the run's configuration. This count is not filtered by + whether the run currently holds or is waiting in each group, so it can + include groups whose `group_members` array is empty (for example, when + the run has already released its lease in that group). + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: |- + API URL for this concurrency group. May return 404 if the group + has no active items at the time it is requested, since the + get-by-name endpoint reports the live repo-wide state of a group + while this endpoint lists groups associated with a run by + configuration. + group_members: + type: array + description: |- + Items belonging to this workflow run that are either currently holding or + waiting for the concurrency group lease. May be empty if the run no + longer has any active or queued items in this group. + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + - position + - position_url + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + position: + type: integer + description: Queue position. 0 means the item holds + the concurrency lease (in_progress), 1 or higher + means queued (pending). + position_url: + type: string + format: uri + description: API URL to get items ahead of this item + in the concurrency group. + job_id: + type: integer + description: The ID of the job, when the item represents + a job-level or reusable-workflow-level lease. + nullable: true + job_name: + type: string + description: The display name of the job, when the + item represents a job-level or reusable-workflow-level + lease. + nullable: true + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending + examples: + default: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + position: 0 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642 + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: pending + position: 2 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260 + job_id: 798245260 + job_name: build + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260 + headers: + Link: *47 + '404': *6 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": post: summary: Review custom deployment protection rules for a workflow run diff --git a/descriptions/ghec/dereferenced/ghec.deref.json b/descriptions/ghec/dereferenced/ghec.deref.json index bf75dc684f..29b46f09f4 100644 --- a/descriptions/ghec/dereferenced/ghec.deref.json +++ b/descriptions/ghec/dereferenced/ghec.deref.json @@ -300532,6 +300532,506 @@ } } }, + "/repos/{owner}/{repo}/actions/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a repository", + "description": "Lists the active concurrency groups for a repository.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "description": "The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "after", + "description": "A cursor, as given in the [Link header](https://docs.github.com/enterprise-cloud@latest/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Concurrency Group List", + "description": "A list of active concurrency groups for a repository.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "last_acquired_at" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "last_acquired_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + } + } + } + } + }, + "examples": { + "default": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "last_acquired_at": "2026-01-15T16:14:23Z" + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "last_acquired_at": "2026-01-15T16:13:55Z" + } + ] + } + } + } + } + }, + "headers": { + "Link": { + "example": "; rel=\"next\", ; rel=\"last\"", + "schema": { + "type": "string" + } + } + } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": { + "get": { + "summary": "Get a concurrency group for a repository", + "description": "Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.\n\nOptionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.\n\nWhen using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/get-concurrency-group-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "concurrency_group_name", + "description": "The name of the concurrency group.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ahead_of_run", + "description": "Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with `ahead_of_job`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + }, + { + "name": "ahead_of_job", + "description": "Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with `ahead_of_run`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "title": "Concurrency Group", + "description": "A concurrency group with the workflow runs and jobs that are either currently holding\nor waiting for the concurrency group lease.", + "type": "object", + "required": [ + "group_name", + "group_url", + "total_count", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "total_count": { + "type": "integer" + }, + "group_members": { + "type": "array", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + }, + "examples": { + "default": { + "value": { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "total_count": 3, + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress" + }, + { + "run_id": 30433643, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433643", + "status": "pending" + }, + { + "run_id": 30433644, + "run_name": "Deploy hotfix", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644", + "job_id": 798245260, + "job_name": "deploy", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260", + "status": "pending" + } + ] + } + } + } + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "title": "Basic Error", + "description": "Basic Error", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/jobs/{job_id}": { "get": { "summary": "Get a job for a workflow run", @@ -315862,13 +316362,109 @@ } ], "responses": { - "302": { + "302": { + "description": "Response", + "headers": { + "Location": { + "example": "https://pipelines.actions.githubusercontent.com/ab1f3cCFPB34Nd6imvFxpGZH5hNlDp2wijMwl2gDoO0bcrrlJj/_apis/pipelines/1/runs/19/signedlogcontent?urlExpires=2020-01-22T22%3A44%3A54.1389777Z&urlSigningMethod=HMACV1&urlSignature=2TUDfIg4fm36OJmfPy6km5QD5DLCOkBVzvhWZM8B%2BUY%3D", + "schema": { + "type": "string" + } + } + } + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "workflow-runs" + } + } + }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel": { + "post": { + "summary": "Cancel a workflow run", + "description": "Cancels a workflow run using its `id`.\n\nOAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "tags": [ + "actions" + ], + "operationId": "actions/cancel-workflow-run", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/workflow-runs#cancel-a-workflow-run" + }, + "parameters": [ + { + "name": "owner", + "description": "The account owner of the repository. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo", + "description": "The name of the repository without the `.git` extension. The name is not case sensitive.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "run_id", + "description": "The unique identifier of the workflow run.", + "in": "path", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "202": { "description": "Response", - "headers": { - "Location": { - "example": "https://pipelines.actions.githubusercontent.com/ab1f3cCFPB34Nd6imvFxpGZH5hNlDp2wijMwl2gDoO0bcrrlJj/_apis/pipelines/1/runs/19/signedlogcontent?urlExpires=2020-01-22T22%3A44%3A54.1389777Z&urlSigningMethod=HMACV1&urlSignature=2TUDfIg4fm36OJmfPy6km5QD5DLCOkBVzvhWZM8B%2BUY%3D", + "content": { + "application/json": { "schema": { - "type": "string" + "title": "Empty Object", + "description": "An object without any properties.", + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "examples": { + "default": { + "value": null + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "title": "Basic Error", + "description": "Basic Error", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "status": { + "type": "string" + } + } } } } @@ -315882,17 +316478,17 @@ } } }, - "/repos/{owner}/{repo}/actions/runs/{run_id}/cancel": { - "post": { - "summary": "Cancel a workflow run", - "description": "Cancels a workflow run using its `id`.\n\nOAuth tokens and personal access tokens (classic) need the `repo` scope to use this endpoint.", + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a workflow run", + "description": "Lists all concurrency groups associated with a workflow run or its jobs.\n\nThe set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the `group_members` array will be empty.\n`total_count` reflects the number of groups the run participates in by\nconfiguration, not the number with active items.\n\nThis differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`,\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.\n\nResults are sorted by group name and support cursor-based pagination via\n`before` and `after`. The `after` cursor paginates forward only and does\nnot emit a `rel=\"prev\"` Link; use `before` to page backward from a\nforward page's `next` cursor.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", "tags": [ "actions" ], - "operationId": "actions/cancel-workflow-run", + "operationId": "actions/list-concurrency-groups-for-workflow-run", "externalDocs": { "description": "API method documentation", - "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/workflow-runs#cancel-a-workflow-run" + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run" }, "parameters": [ { @@ -315921,30 +316517,209 @@ "schema": { "type": "integer" } + }, + { + "name": "per_page", + "description": "The number of results per page (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "schema": { + "type": "integer", + "default": 30 + } + }, + { + "name": "before", + "description": "A cursor, as given in the [Link header](https://docs.github.com/enterprise-cloud@latest/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results before this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "after", + "description": "A cursor, as given in the [Link header](https://docs.github.com/enterprise-cloud@latest/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor. For more information, see \"[Using pagination in the REST API](https://docs.github.com/enterprise-cloud@latest/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"", + "in": "query", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "202": { + "200": { "description": "Response", "content": { "application/json": { "schema": { - "title": "Empty Object", - "description": "An object without any properties.", + "title": "Concurrency Group Run List", + "description": "A list of concurrency groups associated with a workflow run.", "type": "object", - "properties": {}, - "additionalProperties": false + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer", + "description": "The total number of concurrency groups this workflow run participates in,\nderived from the run's configuration. This count is not filtered by\nwhether the run currently holds or is waiting in each group, so it can\ninclude groups whose `group_members` array is empty (for example, when\nthe run has already released its lease in that group)." + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group. May return 404 if the group\nhas no active items at the time it is requested, since the\nget-by-name endpoint reports the live repo-wide state of a group\nwhile this endpoint lists groups associated with a run by\nconfiguration." + }, + "group_members": { + "type": "array", + "description": "Items belonging to this workflow run that are either currently holding or\nwaiting for the concurrency group lease. May be empty if the run no\nlonger has any active or queued items in this group.", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status", + "position", + "position_url" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "position": { + "type": "integer", + "description": "Queue position. 0 means the item holds the concurrency lease (in_progress), 1 or higher means queued (pending)." + }, + "position_url": { + "type": "string", + "format": "uri", + "description": "API URL to get items ahead of this item in the concurrency group." + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + } + } + } }, "examples": { "default": { - "value": null + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress", + "position": 0, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642" + } + ] + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "pending", + "position": 2, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260", + "job_id": 798245260, + "job_name": "build", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260" + } + ] + } + ] + } } } } + }, + "headers": { + "Link": { + "example": "; rel=\"next\", ; rel=\"last\"", + "schema": { + "type": "string" + } + } } }, - "409": { - "description": "Conflict", + "404": { + "description": "Resource not found", "content": { "application/json": { "schema": { @@ -315968,13 +316743,82 @@ } } } + }, + "422": { + "description": "Validation failed, or the endpoint has been spammed.", + "content": { + "application/json": { + "schema": { + "title": "Validation Error", + "description": "Validation Error", + "type": "object", + "required": [ + "message", + "documentation_url" + ], + "properties": { + "message": { + "type": "string" + }, + "documentation_url": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "resource": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "code": { + "type": "string" + }, + "index": { + "type": "integer" + }, + "value": { + "oneOf": [ + { + "type": "string", + "nullable": true + }, + { + "type": "integer", + "nullable": true + }, + { + "type": "array", + "nullable": true, + "items": { + "type": "string" + } + } + ] + } + } + } + } + } + } + } + } } }, "x-github": { "githubCloudOnly": false, "enabledForGitHubApps": true, "category": "actions", - "subcategory": "workflow-runs" + "subcategory": "concurrency-groups" } } }, diff --git a/descriptions/ghec/dereferenced/ghec.deref.yaml b/descriptions/ghec/dereferenced/ghec.deref.yaml index 5fb054a8bf..4e3febc39d 100644 --- a/descriptions/ghec/dereferenced/ghec.deref.yaml +++ b/descriptions/ghec/dereferenced/ghec.deref.yaml @@ -67711,6 +67711,240 @@ paths: enabledForGitHubApps: true category: actions subcategory: cache + "/repos/{owner}/{repo}/actions/concurrency_groups": + get: + summary: List concurrency groups for a repository + description: |- + Lists the active concurrency groups for a repository. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository + parameters: + - *486 + - *487 + - *17 + - *111 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group List + description: A list of active concurrency groups for a repository. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - last_acquired_at + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + last_acquired_at: + type: string + format: date-time + nullable: true + examples: + default: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + last_acquired_at: '2026-01-15T16:14:23Z' + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + last_acquired_at: '2026-01-15T16:13:55Z' + headers: + Link: *47 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": + get: + summary: Get a concurrency group for a repository + description: |- + Gets a specific concurrency group for a repository, including all instances in the group's queue. + Returns 404 if the group is inactive or does not exist. + + Optionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items + ahead of the specified workflow run or job in the queue, plus the specified item itself + (returned as the last element). This is useful for determining what is blocking a particular + run or job. Returns 422 if the specified run or job is not in this concurrency group. + + When using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow + leases held on behalf of that run. Job-level leases within the run are not considered to + block the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow + leases on the job's ancestor paths. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/get-concurrency-group-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository + parameters: + - *486 + - *487 + - name: concurrency_group_name + description: The name of the concurrency group. + in: path + required: true + schema: + type: string + - name: ahead_of_run + description: |- + Filter to items ahead of this workflow run ID in the queue, plus the run itself. + Matches workflow-level concurrency and reusable-workflow leases held on behalf of + the run. Mutually exclusive with `ahead_of_job`. + in: query + required: false + schema: + type: integer + minimum: 1 + - name: ahead_of_job + description: |- + Filter to items ahead of this job ID in the queue, plus the job itself. + Matches job-level concurrency and reusable-workflow leases on the job's + ancestor paths. Mutually exclusive with `ahead_of_run`. + in: query + required: false + schema: + type: integer + minimum: 1 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group + description: |- + A concurrency group with the workflow runs and jobs that are either currently holding + or waiting for the concurrency group lease. + type: object + required: + - group_name + - group_url + - total_count + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + total_count: + type: integer + group_members: + type: array + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + job_id: + type: integer + description: The ID of the job, when the item represents + a job-level or reusable-workflow-level lease. + job_name: + type: string + description: The display name of the job, when the item + represents a job-level or reusable-workflow-level lease. + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending + examples: + default: + value: + group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + total_count: 3 + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + - run_id: 30433643 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433643 + status: pending + - run_id: 30433644 + run_name: Deploy hotfix + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644 + job_id: 798245260 + job_name: deploy + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260 + status: pending + '404': *6 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/jobs/{job_id}": get: summary: Get a job for a workflow run @@ -70671,6 +70905,192 @@ paths: enabledForGitHubApps: true category: actions subcategory: workflow-runs + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": + get: + summary: List concurrency groups for a workflow run + description: |- + Lists all concurrency groups associated with a workflow run or its jobs. + + The set of groups is derived from the run's configuration, so a group is + included even when the run no longer has any items currently holding or + waiting in it. In that case the `group_members` array will be empty. + `total_count` reflects the number of groups the run participates in by + configuration, not the number with active items. + + This differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`, + which returns 404 when a group has no active items. That endpoint reports + the live state of a group repo-wide, while this endpoint reports the + groups associated with a specific run by configuration. + + Results are sorted by group name and support cursor-based pagination via + `before` and `after`. The `after` cursor paginates forward only and does + not emit a `rel="prev"` Link; use `before` to page backward from a + forward page's `next` cursor. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-workflow-run + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run + parameters: + - *486 + - *487 + - *510 + - *17 + - *110 + - *111 + responses: + '200': + description: Response + content: + application/json: + schema: + title: Concurrency Group Run List + description: A list of concurrency groups associated with a workflow + run. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + description: |- + The total number of concurrency groups this workflow run participates in, + derived from the run's configuration. This count is not filtered by + whether the run currently holds or is waiting in each group, so it can + include groups whose `group_members` array is empty (for example, when + the run has already released its lease in that group). + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: |- + API URL for this concurrency group. May return 404 if the group + has no active items at the time it is requested, since the + get-by-name endpoint reports the live repo-wide state of a group + while this endpoint lists groups associated with a run by + configuration. + group_members: + type: array + description: |- + Items belonging to this workflow run that are either currently holding or + waiting for the concurrency group lease. May be empty if the run no + longer has any active or queued items in this group. + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + - position + - position_url + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + position: + type: integer + description: Queue position. 0 means the item holds + the concurrency lease (in_progress), 1 or higher + means queued (pending). + position_url: + type: string + format: uri + description: API URL to get items ahead of this item + in the concurrency group. + job_id: + type: integer + description: The ID of the job, when the item represents + a job-level or reusable-workflow-level lease. + nullable: true + job_name: + type: string + description: The display name of the job, when the + item represents a job-level or reusable-workflow-level + lease. + nullable: true + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending + examples: + default: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + position: 0 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642 + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: pending + position: 2 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260 + job_id: 798245260 + job_name: build + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260 + headers: + Link: *47 + '404': *6 + '422': *15 + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": post: summary: Review custom deployment protection rules for a workflow run diff --git a/descriptions/ghec/ghec.2022-11-28.json b/descriptions/ghec/ghec.2022-11-28.json index c3f84d7e7f..54ca169ca0 100644 --- a/descriptions/ghec/ghec.2022-11-28.json +++ b/descriptions/ghec/ghec.2022-11-28.json @@ -47722,6 +47722,139 @@ } } }, + "/repos/{owner}/{repo}/actions/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a repository", + "description": "Lists the active concurrency groups for a repository.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/per-page" + }, + { + "$ref": "#/components/parameters/pagination-after" + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group-list" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group-list" + } + } + } + }, + "headers": { + "Link": { + "$ref": "#/components/headers/link" + } + } + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": { + "get": { + "summary": "Get a concurrency group for a repository", + "description": "Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.\n\nOptionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.\n\nWhen using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/get-concurrency-group-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/concurrency-group-name" + }, + { + "name": "ahead_of_run", + "description": "Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with `ahead_of_job`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + }, + { + "name": "ahead_of_job", + "description": "Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with `ahead_of_run`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group" + } + } + } + } + }, + "404": { + "$ref": "#/components/responses/not_found" + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/jobs/{job_id}": { "get": { "summary": "Get a job for a workflow run", @@ -50133,6 +50266,74 @@ } } }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a workflow run", + "description": "Lists all concurrency groups associated with a workflow run or its jobs.\n\nThe set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the `group_members` array will be empty.\n`total_count` reflects the number of groups the run participates in by\nconfiguration, not the number with active items.\n\nThis differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`,\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.\n\nResults are sorted by group name and support cursor-based pagination via\n`before` and `after`. The `after` cursor paginates forward only and does\nnot emit a `rel=\"prev\"` Link; use `before` to page backward from a\nforward page's `next` cursor.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-workflow-run", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/run-id" + }, + { + "$ref": "#/components/parameters/per-page" + }, + { + "$ref": "#/components/parameters/pagination-before" + }, + { + "$ref": "#/components/parameters/pagination-after" + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group-run-list" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group-run-list" + } + } + } + }, + "headers": { + "Link": { + "$ref": "#/components/headers/link" + } + } + }, + "404": { + "$ref": "#/components/responses/not_found" + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": { "post": { "summary": "Review custom deployment protection rules for a workflow run", @@ -150844,6 +151045,134 @@ "actions_caches" ] }, + "concurrency-group-list": { + "title": "Concurrency Group List", + "description": "A list of active concurrency groups for a repository.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "last_acquired_at" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "last_acquired_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + } + } + } + } + }, + "concurrency-group": { + "title": "Concurrency Group", + "description": "A concurrency group with the workflow runs and jobs that are either currently holding\nor waiting for the concurrency group lease.", + "type": "object", + "required": [ + "group_name", + "group_url", + "total_count", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "total_count": { + "type": "integer" + }, + "group_members": { + "type": "array", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + }, "job": { "title": "Job", "description": "Information of a job execution in a workflow run", @@ -151579,6 +151908,119 @@ "comment" ] }, + "concurrency-group-run-list": { + "title": "Concurrency Group Run List", + "description": "A list of concurrency groups associated with a workflow run.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer", + "description": "The total number of concurrency groups this workflow run participates in,\nderived from the run's configuration. This count is not filtered by\nwhether the run currently holds or is waiting in each group, so it can\ninclude groups whose `group_members` array is empty (for example, when\nthe run has already released its lease in that group)." + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group. May return 404 if the group\nhas no active items at the time it is requested, since the\nget-by-name endpoint reports the live repo-wide state of a group\nwhile this endpoint lists groups associated with a run by\nconfiguration." + }, + "group_members": { + "type": "array", + "description": "Items belonging to this workflow run that are either currently holding or\nwaiting for the concurrency group lease. May be empty if the run no\nlonger has any active or queued items in this group.", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status", + "position", + "position_url" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "position": { + "type": "integer", + "description": "Queue position. 0 means the item holds the concurrency lease (in_progress), 1 or higher means queued (pending)." + }, + "position_url": { + "type": "string", + "format": "uri", + "description": "API URL to get items ahead of this item in the concurrency group." + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + } + } + } + }, "review-custom-gates-comment-required": { "type": "object", "properties": { @@ -328279,6 +328721,57 @@ ] } }, + "concurrency-group-list": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "last_acquired_at": "2026-01-15T16:14:23Z" + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "last_acquired_at": "2026-01-15T16:13:55Z" + } + ] + } + }, + "concurrency-group": { + "value": { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "total_count": 3, + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress" + }, + { + "run_id": 30433643, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433643", + "status": "pending" + }, + { + "run_id": 30433644, + "run_name": "Deploy hotfix", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644", + "job_id": 798245260, + "job_name": "deploy", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260", + "status": "pending" + } + ] + } + }, "job": { "value": { "id": 399444496, @@ -329067,6 +329560,47 @@ ] } }, + "concurrency-group-run-list": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress", + "position": 0, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642" + } + ] + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "pending", + "position": 2, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260", + "job_id": 798245260, + "job_name": "build", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260" + } + ] + } + ] + } + }, "pending-deployment-items": { "value": [ { @@ -350020,6 +350554,15 @@ "type": "integer" } }, + "concurrency-group-name": { + "name": "concurrency_group_name", + "description": "The name of the concurrency group.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, "job-id": { "name": "job_id", "description": "The unique identifier of the job.", diff --git a/descriptions/ghec/ghec.2022-11-28.yaml b/descriptions/ghec/ghec.2022-11-28.yaml index 62feb8e3b7..21e6f22417 100644 --- a/descriptions/ghec/ghec.2022-11-28.yaml +++ b/descriptions/ghec/ghec.2022-11-28.yaml @@ -34747,6 +34747,111 @@ paths: enabledForGitHubApps: true category: actions subcategory: cache + "/repos/{owner}/{repo}/actions/concurrency_groups": + get: + summary: List concurrency groups for a repository + description: |- + Lists the active concurrency groups for a repository. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/per-page" + - "$ref": "#/components/parameters/pagination-after" + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group-list" + examples: + default: + "$ref": "#/components/examples/concurrency-group-list" + headers: + Link: + "$ref": "#/components/headers/link" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": + get: + summary: Get a concurrency group for a repository + description: |- + Gets a specific concurrency group for a repository, including all instances in the group's queue. + Returns 404 if the group is inactive or does not exist. + + Optionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items + ahead of the specified workflow run or job in the queue, plus the specified item itself + (returned as the last element). This is useful for determining what is blocking a particular + run or job. Returns 422 if the specified run or job is not in this concurrency group. + + When using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow + leases held on behalf of that run. Job-level leases within the run are not considered to + block the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow + leases on the job's ancestor paths. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/get-concurrency-group-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/concurrency-group-name" + - name: ahead_of_run + description: |- + Filter to items ahead of this workflow run ID in the queue, plus the run itself. + Matches workflow-level concurrency and reusable-workflow leases held on behalf of + the run. Mutually exclusive with `ahead_of_job`. + in: query + required: false + schema: + type: integer + minimum: 1 + - name: ahead_of_job + description: |- + Filter to items ahead of this job ID in the queue, plus the job itself. + Matches job-level concurrency and reusable-workflow leases on the job's + ancestor paths. Mutually exclusive with `ahead_of_run`. + in: query + required: false + schema: + type: integer + minimum: 1 + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group" + examples: + default: + "$ref": "#/components/examples/concurrency-group" + '404': + "$ref": "#/components/responses/not_found" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/jobs/{job_id}": get: summary: Get a job for a workflow run @@ -36456,6 +36561,64 @@ paths: enabledForGitHubApps: true category: actions subcategory: workflow-runs + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": + get: + summary: List concurrency groups for a workflow run + description: |- + Lists all concurrency groups associated with a workflow run or its jobs. + + The set of groups is derived from the run's configuration, so a group is + included even when the run no longer has any items currently holding or + waiting in it. In that case the `group_members` array will be empty. + `total_count` reflects the number of groups the run participates in by + configuration, not the number with active items. + + This differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`, + which returns 404 when a group has no active items. That endpoint reports + the live state of a group repo-wide, while this endpoint reports the + groups associated with a specific run by configuration. + + Results are sorted by group name and support cursor-based pagination via + `before` and `after`. The `after` cursor paginates forward only and does + not emit a `rel="prev"` Link; use `before` to page backward from a + forward page's `next` cursor. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-workflow-run + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/run-id" + - "$ref": "#/components/parameters/per-page" + - "$ref": "#/components/parameters/pagination-before" + - "$ref": "#/components/parameters/pagination-after" + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group-run-list" + examples: + default: + "$ref": "#/components/examples/concurrency-group-run-list" + headers: + Link: + "$ref": "#/components/headers/link" + '404': + "$ref": "#/components/responses/not_found" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": post: summary: Review custom deployment protection rules for a workflow run @@ -110730,6 +110893,107 @@ components: required: - total_count - actions_caches + concurrency-group-list: + title: Concurrency Group List + description: A list of active concurrency groups for a repository. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - last_acquired_at + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + last_acquired_at: + type: string + format: date-time + nullable: true + concurrency-group: + title: Concurrency Group + description: |- + A concurrency group with the workflow runs and jobs that are either currently holding + or waiting for the concurrency group lease. + type: object + required: + - group_name + - group_url + - total_count + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + total_count: + type: integer + group_members: + type: array + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + job_id: + type: integer + description: The ID of the job, when the item represents a job-level + or reusable-workflow-level lease. + job_name: + type: string + description: The display name of the job, when the item represents + a job-level or reusable-workflow-level lease. + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending job: title: Job description: Information of a job execution in a workflow run @@ -111337,6 +111601,110 @@ components: - state - user - comment + concurrency-group-run-list: + title: Concurrency Group Run List + description: A list of concurrency groups associated with a workflow run. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + description: |- + The total number of concurrency groups this workflow run participates in, + derived from the run's configuration. This count is not filtered by + whether the run currently holds or is waiting in each group, so it can + include groups whose `group_members` array is empty (for example, when + the run has already released its lease in that group). + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: |- + API URL for this concurrency group. May return 404 if the group + has no active items at the time it is requested, since the + get-by-name endpoint reports the live repo-wide state of a group + while this endpoint lists groups associated with a run by + configuration. + group_members: + type: array + description: |- + Items belonging to this workflow run that are either currently holding or + waiting for the concurrency group lease. May be empty if the run no + longer has any active or queued items in this group. + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + - position + - position_url + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + position: + type: integer + description: Queue position. 0 means the item holds the concurrency + lease (in_progress), 1 or higher means queued (pending). + position_url: + type: string + format: uri + description: API URL to get items ahead of this item in the + concurrency group. + job_id: + type: integer + description: The ID of the job, when the item represents a job-level + or reusable-workflow-level lease. + nullable: true + job_name: + type: string + description: The display name of the job, when the item represents + a job-level or reusable-workflow-level lease. + nullable: true + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending review-custom-gates-comment-required: type: object properties: @@ -246161,6 +246529,41 @@ components: last_accessed_at: '2019-01-24T22:45:36.000Z' created_at: '2019-01-24T22:45:36.000Z' size_in_bytes: 1024 + concurrency-group-list: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + last_acquired_at: '2026-01-15T16:14:23Z' + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + last_acquired_at: '2026-01-15T16:13:55Z' + concurrency-group: + value: + group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + total_count: 3 + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + - run_id: 30433643 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433643 + status: pending + - run_id: 30433644 + run_name: Deploy hotfix + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644 + job_id: 798245260 + job_name: deploy + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260 + status: pending job: value: id: 399444496 @@ -246837,6 +247240,34 @@ components: runner_group_name: my runner group workflow_name: CI head_branch: main + concurrency-group-run-list: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + position: 0 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642 + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: pending + position: 2 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260 + job_id: 798245260 + job_name: build + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260 pending-deployment-items: value: - environment: @@ -264904,6 +265335,13 @@ components: required: true schema: type: integer + concurrency-group-name: + name: concurrency_group_name + description: The name of the concurrency group. + in: path + required: true + schema: + type: string job-id: name: job_id description: The unique identifier of the job. diff --git a/descriptions/ghec/ghec.2026-03-10.json b/descriptions/ghec/ghec.2026-03-10.json index 14befb4e74..16152316af 100644 --- a/descriptions/ghec/ghec.2026-03-10.json +++ b/descriptions/ghec/ghec.2026-03-10.json @@ -47657,6 +47657,139 @@ } } }, + "/repos/{owner}/{repo}/actions/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a repository", + "description": "Lists the active concurrency groups for a repository.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/per-page" + }, + { + "$ref": "#/components/parameters/pagination-after" + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group-list" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group-list" + } + } + } + }, + "headers": { + "Link": { + "$ref": "#/components/headers/link" + } + } + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": { + "get": { + "summary": "Get a concurrency group for a repository", + "description": "Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.\n\nOptionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.\n\nWhen using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/get-concurrency-group-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/concurrency-group-name" + }, + { + "name": "ahead_of_run", + "description": "Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with `ahead_of_job`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + }, + { + "name": "ahead_of_job", + "description": "Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with `ahead_of_run`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group" + } + } + } + } + }, + "404": { + "$ref": "#/components/responses/not_found" + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/jobs/{job_id}": { "get": { "summary": "Get a job for a workflow run", @@ -50068,6 +50201,74 @@ } } }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a workflow run", + "description": "Lists all concurrency groups associated with a workflow run or its jobs.\n\nThe set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the `group_members` array will be empty.\n`total_count` reflects the number of groups the run participates in by\nconfiguration, not the number with active items.\n\nThis differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`,\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.\n\nResults are sorted by group name and support cursor-based pagination via\n`before` and `after`. The `after` cursor paginates forward only and does\nnot emit a `rel=\"prev\"` Link; use `before` to page backward from a\nforward page's `next` cursor.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-workflow-run", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/run-id" + }, + { + "$ref": "#/components/parameters/per-page" + }, + { + "$ref": "#/components/parameters/pagination-before" + }, + { + "$ref": "#/components/parameters/pagination-after" + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group-run-list" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group-run-list" + } + } + } + }, + "headers": { + "Link": { + "$ref": "#/components/headers/link" + } + } + }, + "404": { + "$ref": "#/components/responses/not_found" + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": { "post": { "summary": "Review custom deployment protection rules for a workflow run", @@ -150257,6 +150458,134 @@ "actions_caches" ] }, + "concurrency-group-list": { + "title": "Concurrency Group List", + "description": "A list of active concurrency groups for a repository.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "last_acquired_at" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "last_acquired_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + } + } + } + } + }, + "concurrency-group": { + "title": "Concurrency Group", + "description": "A concurrency group with the workflow runs and jobs that are either currently holding\nor waiting for the concurrency group lease.", + "type": "object", + "required": [ + "group_name", + "group_url", + "total_count", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "total_count": { + "type": "integer" + }, + "group_members": { + "type": "array", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + }, "job": { "title": "Job", "description": "Information of a job execution in a workflow run", @@ -150992,6 +151321,119 @@ "comment" ] }, + "concurrency-group-run-list": { + "title": "Concurrency Group Run List", + "description": "A list of concurrency groups associated with a workflow run.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer", + "description": "The total number of concurrency groups this workflow run participates in,\nderived from the run's configuration. This count is not filtered by\nwhether the run currently holds or is waiting in each group, so it can\ninclude groups whose `group_members` array is empty (for example, when\nthe run has already released its lease in that group)." + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group. May return 404 if the group\nhas no active items at the time it is requested, since the\nget-by-name endpoint reports the live repo-wide state of a group\nwhile this endpoint lists groups associated with a run by\nconfiguration." + }, + "group_members": { + "type": "array", + "description": "Items belonging to this workflow run that are either currently holding or\nwaiting for the concurrency group lease. May be empty if the run no\nlonger has any active or queued items in this group.", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status", + "position", + "position_url" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "position": { + "type": "integer", + "description": "Queue position. 0 means the item holds the concurrency lease (in_progress), 1 or higher means queued (pending)." + }, + "position_url": { + "type": "string", + "format": "uri", + "description": "API URL to get items ahead of this item in the concurrency group." + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + } + } + } + }, "review-custom-gates-comment-required": { "type": "object", "properties": { @@ -327506,6 +327948,57 @@ ] } }, + "concurrency-group-list": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "last_acquired_at": "2026-01-15T16:14:23Z" + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "last_acquired_at": "2026-01-15T16:13:55Z" + } + ] + } + }, + "concurrency-group": { + "value": { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "total_count": 3, + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress" + }, + { + "run_id": 30433643, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433643", + "status": "pending" + }, + { + "run_id": 30433644, + "run_name": "Deploy hotfix", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644", + "job_id": 798245260, + "job_name": "deploy", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260", + "status": "pending" + } + ] + } + }, "job": { "value": { "id": 399444496, @@ -328294,6 +328787,47 @@ ] } }, + "concurrency-group-run-list": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress", + "position": 0, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642" + } + ] + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "pending", + "position": 2, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260", + "job_id": 798245260, + "job_name": "build", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260" + } + ] + } + ] + } + }, "pending-deployment-items": { "value": [ { @@ -349157,6 +349691,15 @@ "type": "integer" } }, + "concurrency-group-name": { + "name": "concurrency_group_name", + "description": "The name of the concurrency group.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, "job-id": { "name": "job_id", "description": "The unique identifier of the job.", diff --git a/descriptions/ghec/ghec.2026-03-10.yaml b/descriptions/ghec/ghec.2026-03-10.yaml index dbd8931ca6..3176b707d9 100644 --- a/descriptions/ghec/ghec.2026-03-10.yaml +++ b/descriptions/ghec/ghec.2026-03-10.yaml @@ -34698,6 +34698,111 @@ paths: enabledForGitHubApps: true category: actions subcategory: cache + "/repos/{owner}/{repo}/actions/concurrency_groups": + get: + summary: List concurrency groups for a repository + description: |- + Lists the active concurrency groups for a repository. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/per-page" + - "$ref": "#/components/parameters/pagination-after" + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group-list" + examples: + default: + "$ref": "#/components/examples/concurrency-group-list" + headers: + Link: + "$ref": "#/components/headers/link" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": + get: + summary: Get a concurrency group for a repository + description: |- + Gets a specific concurrency group for a repository, including all instances in the group's queue. + Returns 404 if the group is inactive or does not exist. + + Optionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items + ahead of the specified workflow run or job in the queue, plus the specified item itself + (returned as the last element). This is useful for determining what is blocking a particular + run or job. Returns 422 if the specified run or job is not in this concurrency group. + + When using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow + leases held on behalf of that run. Job-level leases within the run are not considered to + block the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow + leases on the job's ancestor paths. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/get-concurrency-group-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/concurrency-group-name" + - name: ahead_of_run + description: |- + Filter to items ahead of this workflow run ID in the queue, plus the run itself. + Matches workflow-level concurrency and reusable-workflow leases held on behalf of + the run. Mutually exclusive with `ahead_of_job`. + in: query + required: false + schema: + type: integer + minimum: 1 + - name: ahead_of_job + description: |- + Filter to items ahead of this job ID in the queue, plus the job itself. + Matches job-level concurrency and reusable-workflow leases on the job's + ancestor paths. Mutually exclusive with `ahead_of_run`. + in: query + required: false + schema: + type: integer + minimum: 1 + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group" + examples: + default: + "$ref": "#/components/examples/concurrency-group" + '404': + "$ref": "#/components/responses/not_found" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/jobs/{job_id}": get: summary: Get a job for a workflow run @@ -36407,6 +36512,64 @@ paths: enabledForGitHubApps: true category: actions subcategory: workflow-runs + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": + get: + summary: List concurrency groups for a workflow run + description: |- + Lists all concurrency groups associated with a workflow run or its jobs. + + The set of groups is derived from the run's configuration, so a group is + included even when the run no longer has any items currently holding or + waiting in it. In that case the `group_members` array will be empty. + `total_count` reflects the number of groups the run participates in by + configuration, not the number with active items. + + This differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`, + which returns 404 when a group has no active items. That endpoint reports + the live state of a group repo-wide, while this endpoint reports the + groups associated with a specific run by configuration. + + Results are sorted by group name and support cursor-based pagination via + `before` and `after`. The `after` cursor paginates forward only and does + not emit a `rel="prev"` Link; use `before` to page backward from a + forward page's `next` cursor. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-workflow-run + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/run-id" + - "$ref": "#/components/parameters/per-page" + - "$ref": "#/components/parameters/pagination-before" + - "$ref": "#/components/parameters/pagination-after" + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group-run-list" + examples: + default: + "$ref": "#/components/examples/concurrency-group-run-list" + headers: + Link: + "$ref": "#/components/headers/link" + '404': + "$ref": "#/components/responses/not_found" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": post: summary: Review custom deployment protection rules for a workflow run @@ -110266,6 +110429,107 @@ components: required: - total_count - actions_caches + concurrency-group-list: + title: Concurrency Group List + description: A list of active concurrency groups for a repository. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - last_acquired_at + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + last_acquired_at: + type: string + format: date-time + nullable: true + concurrency-group: + title: Concurrency Group + description: |- + A concurrency group with the workflow runs and jobs that are either currently holding + or waiting for the concurrency group lease. + type: object + required: + - group_name + - group_url + - total_count + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + total_count: + type: integer + group_members: + type: array + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + job_id: + type: integer + description: The ID of the job, when the item represents a job-level + or reusable-workflow-level lease. + job_name: + type: string + description: The display name of the job, when the item represents + a job-level or reusable-workflow-level lease. + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending job: title: Job description: Information of a job execution in a workflow run @@ -110873,6 +111137,110 @@ components: - state - user - comment + concurrency-group-run-list: + title: Concurrency Group Run List + description: A list of concurrency groups associated with a workflow run. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + description: |- + The total number of concurrency groups this workflow run participates in, + derived from the run's configuration. This count is not filtered by + whether the run currently holds or is waiting in each group, so it can + include groups whose `group_members` array is empty (for example, when + the run has already released its lease in that group). + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: |- + API URL for this concurrency group. May return 404 if the group + has no active items at the time it is requested, since the + get-by-name endpoint reports the live repo-wide state of a group + while this endpoint lists groups associated with a run by + configuration. + group_members: + type: array + description: |- + Items belonging to this workflow run that are either currently holding or + waiting for the concurrency group lease. May be empty if the run no + longer has any active or queued items in this group. + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + - position + - position_url + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + position: + type: integer + description: Queue position. 0 means the item holds the concurrency + lease (in_progress), 1 or higher means queued (pending). + position_url: + type: string + format: uri + description: API URL to get items ahead of this item in the + concurrency group. + job_id: + type: integer + description: The ID of the job, when the item represents a job-level + or reusable-workflow-level lease. + nullable: true + job_name: + type: string + description: The display name of the job, when the item represents + a job-level or reusable-workflow-level lease. + nullable: true + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending review-custom-gates-comment-required: type: object properties: @@ -245468,6 +245836,41 @@ components: last_accessed_at: '2019-01-24T22:45:36.000Z' created_at: '2019-01-24T22:45:36.000Z' size_in_bytes: 1024 + concurrency-group-list: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + last_acquired_at: '2026-01-15T16:14:23Z' + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + last_acquired_at: '2026-01-15T16:13:55Z' + concurrency-group: + value: + group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + total_count: 3 + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + - run_id: 30433643 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433643 + status: pending + - run_id: 30433644 + run_name: Deploy hotfix + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644 + job_id: 798245260 + job_name: deploy + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260 + status: pending job: value: id: 399444496 @@ -246144,6 +246547,34 @@ components: runner_group_name: my runner group workflow_name: CI head_branch: main + concurrency-group-run-list: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + position: 0 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642 + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: pending + position: 2 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260 + job_id: 798245260 + job_name: build + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260 pending-deployment-items: value: - environment: @@ -264126,6 +264557,13 @@ components: required: true schema: type: integer + concurrency-group-name: + name: concurrency_group_name + description: The name of the concurrency group. + in: path + required: true + schema: + type: string job-id: name: job_id description: The unique identifier of the job. diff --git a/descriptions/ghec/ghec.json b/descriptions/ghec/ghec.json index d9b871a39d..fe4edcf19f 100644 --- a/descriptions/ghec/ghec.json +++ b/descriptions/ghec/ghec.json @@ -47960,6 +47960,139 @@ } } }, + "/repos/{owner}/{repo}/actions/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a repository", + "description": "Lists the active concurrency groups for a repository.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/per-page" + }, + { + "$ref": "#/components/parameters/pagination-after" + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group-list" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group-list" + } + } + } + }, + "headers": { + "Link": { + "$ref": "#/components/headers/link" + } + } + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": { + "get": { + "summary": "Get a concurrency group for a repository", + "description": "Gets a specific concurrency group for a repository, including all instances in the group's queue.\nReturns 404 if the group is inactive or does not exist.\n\nOptionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items\nahead of the specified workflow run or job in the queue, plus the specified item itself\n(returned as the last element). This is useful for determining what is blocking a particular\nrun or job. Returns 422 if the specified run or job is not in this concurrency group.\n\nWhen using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow\nleases held on behalf of that run. Job-level leases within the run are not considered to\nblock the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow\nleases on the job's ancestor paths.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/get-concurrency-group-for-repository", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/concurrency-group-name" + }, + { + "name": "ahead_of_run", + "description": "Filter to items ahead of this workflow run ID in the queue, plus the run itself.\nMatches workflow-level concurrency and reusable-workflow leases held on behalf of\nthe run. Mutually exclusive with `ahead_of_job`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + }, + { + "name": "ahead_of_job", + "description": "Filter to items ahead of this job ID in the queue, plus the job itself.\nMatches job-level concurrency and reusable-workflow leases on the job's\nancestor paths. Mutually exclusive with `ahead_of_run`.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group" + } + } + } + } + }, + "404": { + "$ref": "#/components/responses/not_found" + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/jobs/{job_id}": { "get": { "summary": "Get a job for a workflow run", @@ -50371,6 +50504,74 @@ } } }, + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": { + "get": { + "summary": "List concurrency groups for a workflow run", + "description": "Lists all concurrency groups associated with a workflow run or its jobs.\n\nThe set of groups is derived from the run's configuration, so a group is\nincluded even when the run no longer has any items currently holding or\nwaiting in it. In that case the `group_members` array will be empty.\n`total_count` reflects the number of groups the run participates in by\nconfiguration, not the number with active items.\n\nThis differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`,\nwhich returns 404 when a group has no active items. That endpoint reports\nthe live state of a group repo-wide, while this endpoint reports the\ngroups associated with a specific run by configuration.\n\nResults are sorted by group name and support cursor-based pagination via\n`before` and `after`. The `after` cursor paginates forward only and does\nnot emit a `rel=\"prev\"` Link; use `before` to page backward from a\nforward page's `next` cursor.\n\nOAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository.", + "tags": [ + "actions" + ], + "operationId": "actions/list-concurrency-groups-for-workflow-run", + "externalDocs": { + "description": "API method documentation", + "url": "https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run" + }, + "parameters": [ + { + "$ref": "#/components/parameters/owner" + }, + { + "$ref": "#/components/parameters/repo" + }, + { + "$ref": "#/components/parameters/run-id" + }, + { + "$ref": "#/components/parameters/per-page" + }, + { + "$ref": "#/components/parameters/pagination-before" + }, + { + "$ref": "#/components/parameters/pagination-after" + } + ], + "responses": { + "200": { + "description": "Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/concurrency-group-run-list" + }, + "examples": { + "default": { + "$ref": "#/components/examples/concurrency-group-run-list" + } + } + } + }, + "headers": { + "Link": { + "$ref": "#/components/headers/link" + } + } + }, + "404": { + "$ref": "#/components/responses/not_found" + }, + "422": { + "$ref": "#/components/responses/validation_failed" + } + }, + "x-github": { + "githubCloudOnly": false, + "enabledForGitHubApps": true, + "category": "actions", + "subcategory": "concurrency-groups" + } + } + }, "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": { "post": { "summary": "Review custom deployment protection rules for a workflow run", @@ -151995,6 +152196,134 @@ "actions_caches" ] }, + "concurrency-group-list": { + "title": "Concurrency Group List", + "description": "A list of active concurrency groups for a repository.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer" + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "last_acquired_at" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "last_acquired_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + } + } + } + } + }, + "concurrency-group": { + "title": "Concurrency Group", + "description": "A concurrency group with the workflow runs and jobs that are either currently holding\nor waiting for the concurrency group lease.", + "type": "object", + "required": [ + "group_name", + "group_url", + "total_count", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group." + }, + "total_count": { + "type": "integer" + }, + "group_members": { + "type": "array", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease." + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + }, "job": { "title": "Job", "description": "Information of a job execution in a workflow run", @@ -152730,6 +153059,119 @@ "comment" ] }, + "concurrency-group-run-list": { + "title": "Concurrency Group Run List", + "description": "A list of concurrency groups associated with a workflow run.", + "type": "object", + "required": [ + "total_count", + "concurrency_groups" + ], + "properties": { + "total_count": { + "type": "integer", + "description": "The total number of concurrency groups this workflow run participates in,\nderived from the run's configuration. This count is not filtered by\nwhether the run currently holds or is waiting in each group, so it can\ninclude groups whose `group_members` array is empty (for example, when\nthe run has already released its lease in that group)." + }, + "concurrency_groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "group_name", + "group_url", + "group_members" + ], + "properties": { + "group_name": { + "type": "string", + "description": "The name of the concurrency group." + }, + "group_url": { + "type": "string", + "format": "uri", + "description": "API URL for this concurrency group. May return 404 if the group\nhas no active items at the time it is requested, since the\nget-by-name endpoint reports the live repo-wide state of a group\nwhile this endpoint lists groups associated with a run by\nconfiguration." + }, + "group_members": { + "type": "array", + "description": "Items belonging to this workflow run that are either currently holding or\nwaiting for the concurrency group lease. May be empty if the run no\nlonger has any active or queued items in this group.", + "items": { + "type": "object", + "required": [ + "run_id", + "run_name", + "run_url", + "run_html_url", + "status", + "position", + "position_url" + ], + "properties": { + "run_id": { + "type": "integer", + "description": "The ID of the workflow run." + }, + "run_name": { + "type": "string", + "description": "The name of the workflow run." + }, + "run_url": { + "type": "string", + "format": "uri", + "description": "API URL for the workflow run.", + "nullable": true + }, + "run_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the workflow run.", + "nullable": true + }, + "position": { + "type": "integer", + "description": "Queue position. 0 means the item holds the concurrency lease (in_progress), 1 or higher means queued (pending)." + }, + "position_url": { + "type": "string", + "format": "uri", + "description": "API URL to get items ahead of this item in the concurrency group." + }, + "job_id": { + "type": "integer", + "description": "The ID of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_name": { + "type": "string", + "description": "The display name of the job, when the item represents a job-level or reusable-workflow-level lease.", + "nullable": true + }, + "job_url": { + "type": "string", + "format": "uri", + "description": "API URL for the job.", + "nullable": true + }, + "job_html_url": { + "type": "string", + "format": "uri", + "description": "Web URL for the job.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "in_progress", + "pending" + ] + } + } + } + } + } + } + } + } + }, "review-custom-gates-comment-required": { "type": "object", "properties": { @@ -330488,6 +330930,57 @@ ] } }, + "concurrency-group-list": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "last_acquired_at": "2026-01-15T16:14:23Z" + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "last_acquired_at": "2026-01-15T16:13:55Z" + } + ] + } + }, + "concurrency-group": { + "value": { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "total_count": 3, + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress" + }, + { + "run_id": 30433643, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433643", + "status": "pending" + }, + { + "run_id": 30433644, + "run_name": "Deploy hotfix", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644", + "job_id": 798245260, + "job_name": "deploy", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260", + "status": "pending" + } + ] + } + }, "job": { "value": { "id": 399444496, @@ -331276,6 +331769,47 @@ ] } }, + "concurrency-group-run-list": { + "value": { + "total_count": 2, + "concurrency_groups": [ + { + "group_name": "deploy-prod", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "in_progress", + "position": 0, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642" + } + ] + }, + { + "group_name": "ci-build", + "group_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build", + "group_members": [ + { + "run_id": 30433642, + "run_name": "Deploy to production", + "run_url": "https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642", + "run_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642", + "status": "pending", + "position": 2, + "position_url": "https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260", + "job_id": 798245260, + "job_name": "build", + "job_url": "https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260", + "job_html_url": "https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260" + } + ] + } + ] + } + }, "pending-deployment-items": { "value": [ { @@ -352357,6 +352891,15 @@ "type": "integer" } }, + "concurrency-group-name": { + "name": "concurrency_group_name", + "description": "The name of the concurrency group.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, "job-id": { "name": "job_id", "description": "The unique identifier of the job.", diff --git a/descriptions/ghec/ghec.yaml b/descriptions/ghec/ghec.yaml index 2c1e062c3b..6dffcfd716 100644 --- a/descriptions/ghec/ghec.yaml +++ b/descriptions/ghec/ghec.yaml @@ -34874,6 +34874,111 @@ paths: enabledForGitHubApps: true category: actions subcategory: cache + "/repos/{owner}/{repo}/actions/concurrency_groups": + get: + summary: List concurrency groups for a repository + description: |- + Lists the active concurrency groups for a repository. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-repository + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/per-page" + - "$ref": "#/components/parameters/pagination-after" + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group-list" + examples: + default: + "$ref": "#/components/examples/concurrency-group-list" + headers: + Link: + "$ref": "#/components/headers/link" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups + "/repos/{owner}/{repo}/actions/concurrency_groups/{concurrency_group_name}": + get: + summary: Get a concurrency group for a repository + description: |- + Gets a specific concurrency group for a repository, including all instances in the group's queue. + Returns 404 if the group is inactive or does not exist. + + Optionally, pass `ahead_of_run` or `ahead_of_job` to filter the results to only the items + ahead of the specified workflow run or job in the queue, plus the specified item itself + (returned as the last element). This is useful for determining what is blocking a particular + run or job. Returns 422 if the specified run or job is not in this concurrency group. + + When using `ahead_of_run`, this matches workflow-level concurrency and any reusable-workflow + leases held on behalf of that run. Job-level leases within the run are not considered to + block the run as a whole. Use `ahead_of_job` to match job-level concurrency and reusable-workflow + leases on the job's ancestor paths. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/get-concurrency-group-for-repository + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#get-a-concurrency-group-for-a-repository + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/concurrency-group-name" + - name: ahead_of_run + description: |- + Filter to items ahead of this workflow run ID in the queue, plus the run itself. + Matches workflow-level concurrency and reusable-workflow leases held on behalf of + the run. Mutually exclusive with `ahead_of_job`. + in: query + required: false + schema: + type: integer + minimum: 1 + - name: ahead_of_job + description: |- + Filter to items ahead of this job ID in the queue, plus the job itself. + Matches job-level concurrency and reusable-workflow leases on the job's + ancestor paths. Mutually exclusive with `ahead_of_run`. + in: query + required: false + schema: + type: integer + minimum: 1 + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group" + examples: + default: + "$ref": "#/components/examples/concurrency-group" + '404': + "$ref": "#/components/responses/not_found" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/jobs/{job_id}": get: summary: Get a job for a workflow run @@ -36583,6 +36688,64 @@ paths: enabledForGitHubApps: true category: actions subcategory: workflow-runs + "/repos/{owner}/{repo}/actions/runs/{run_id}/concurrency_groups": + get: + summary: List concurrency groups for a workflow run + description: |- + Lists all concurrency groups associated with a workflow run or its jobs. + + The set of groups is derived from the run's configuration, so a group is + included even when the run no longer has any items currently holding or + waiting in it. In that case the `group_members` array will be empty. + `total_count` reflects the number of groups the run participates in by + configuration, not the number with active items. + + This differs from `GET /repos/{owner}/{repo}/actions/concurrency_groups/{group_name}`, + which returns 404 when a group has no active items. That endpoint reports + the live state of a group repo-wide, while this endpoint reports the + groups associated with a specific run by configuration. + + Results are sorted by group name and support cursor-based pagination via + `before` and `after`. The `after` cursor paginates forward only and does + not emit a `rel="prev"` Link; use `before` to page backward from a + forward page's `next` cursor. + + OAuth app tokens and personal access tokens (classic) need the `repo` scope to use this endpoint with a private repository. + tags: + - actions + operationId: actions/list-concurrency-groups-for-workflow-run + externalDocs: + description: API method documentation + url: https://docs.github.com/enterprise-cloud@latest/rest/actions/concurrency-groups#list-concurrency-groups-for-a-workflow-run + parameters: + - "$ref": "#/components/parameters/owner" + - "$ref": "#/components/parameters/repo" + - "$ref": "#/components/parameters/run-id" + - "$ref": "#/components/parameters/per-page" + - "$ref": "#/components/parameters/pagination-before" + - "$ref": "#/components/parameters/pagination-after" + responses: + '200': + description: Response + content: + application/json: + schema: + "$ref": "#/components/schemas/concurrency-group-run-list" + examples: + default: + "$ref": "#/components/examples/concurrency-group-run-list" + headers: + Link: + "$ref": "#/components/headers/link" + '404': + "$ref": "#/components/responses/not_found" + '422': + "$ref": "#/components/responses/validation_failed" + x-github: + githubCloudOnly: false + enabledForGitHubApps: true + category: actions + subcategory: concurrency-groups "/repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule": post: summary: Review custom deployment protection rules for a workflow run @@ -111543,6 +111706,107 @@ components: required: - total_count - actions_caches + concurrency-group-list: + title: Concurrency Group List + description: A list of active concurrency groups for a repository. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - last_acquired_at + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + last_acquired_at: + type: string + format: date-time + nullable: true + concurrency-group: + title: Concurrency Group + description: |- + A concurrency group with the workflow runs and jobs that are either currently holding + or waiting for the concurrency group lease. + type: object + required: + - group_name + - group_url + - total_count + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: API URL for this concurrency group. + total_count: + type: integer + group_members: + type: array + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + job_id: + type: integer + description: The ID of the job, when the item represents a job-level + or reusable-workflow-level lease. + job_name: + type: string + description: The display name of the job, when the item represents + a job-level or reusable-workflow-level lease. + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending job: title: Job description: Information of a job execution in a workflow run @@ -112150,6 +112414,110 @@ components: - state - user - comment + concurrency-group-run-list: + title: Concurrency Group Run List + description: A list of concurrency groups associated with a workflow run. + type: object + required: + - total_count + - concurrency_groups + properties: + total_count: + type: integer + description: |- + The total number of concurrency groups this workflow run participates in, + derived from the run's configuration. This count is not filtered by + whether the run currently holds or is waiting in each group, so it can + include groups whose `group_members` array is empty (for example, when + the run has already released its lease in that group). + concurrency_groups: + type: array + items: + type: object + required: + - group_name + - group_url + - group_members + properties: + group_name: + type: string + description: The name of the concurrency group. + group_url: + type: string + format: uri + description: |- + API URL for this concurrency group. May return 404 if the group + has no active items at the time it is requested, since the + get-by-name endpoint reports the live repo-wide state of a group + while this endpoint lists groups associated with a run by + configuration. + group_members: + type: array + description: |- + Items belonging to this workflow run that are either currently holding or + waiting for the concurrency group lease. May be empty if the run no + longer has any active or queued items in this group. + items: + type: object + required: + - run_id + - run_name + - run_url + - run_html_url + - status + - position + - position_url + properties: + run_id: + type: integer + description: The ID of the workflow run. + run_name: + type: string + description: The name of the workflow run. + run_url: + type: string + format: uri + description: API URL for the workflow run. + nullable: true + run_html_url: + type: string + format: uri + description: Web URL for the workflow run. + nullable: true + position: + type: integer + description: Queue position. 0 means the item holds the concurrency + lease (in_progress), 1 or higher means queued (pending). + position_url: + type: string + format: uri + description: API URL to get items ahead of this item in the + concurrency group. + job_id: + type: integer + description: The ID of the job, when the item represents a job-level + or reusable-workflow-level lease. + nullable: true + job_name: + type: string + description: The display name of the job, when the item represents + a job-level or reusable-workflow-level lease. + nullable: true + job_url: + type: string + format: uri + description: API URL for the job. + nullable: true + job_html_url: + type: string + format: uri + description: Web URL for the job. + nullable: true + status: + type: string + enum: + - in_progress + - pending review-custom-gates-comment-required: type: object properties: @@ -247601,6 +247969,41 @@ components: last_accessed_at: '2019-01-24T22:45:36.000Z' created_at: '2019-01-24T22:45:36.000Z' size_in_bytes: 1024 + concurrency-group-list: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + last_acquired_at: '2026-01-15T16:14:23Z' + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + last_acquired_at: '2026-01-15T16:13:55Z' + concurrency-group: + value: + group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + total_count: 3 + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + - run_id: 30433643 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433643 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433643 + status: pending + - run_id: 30433644 + run_name: Deploy hotfix + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433644 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644 + job_id: 798245260 + job_name: deploy + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433644/job/798245260 + status: pending job: value: id: 399444496 @@ -248277,6 +248680,34 @@ components: runner_group_name: my runner group workflow_name: CI head_branch: main + concurrency-group-run-list: + value: + total_count: 2 + concurrency_groups: + - group_name: deploy-prod + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: in_progress + position: 0 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/deploy-prod?ahead_of_run=30433642 + - group_name: ci-build + group_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build + group_members: + - run_id: 30433642 + run_name: Deploy to production + run_url: https://api.github.com/repos/octocat/Hello-World/actions/runs/30433642 + run_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642 + status: pending + position: 2 + position_url: https://api.github.com/repos/octocat/Hello-World/actions/concurrency_groups/ci-build?ahead_of_job=798245260 + job_id: 798245260 + job_name: build + job_url: https://api.github.com/repos/octocat/Hello-World/actions/jobs/798245260 + job_html_url: https://github.com/octocat/Hello-World/actions/runs/30433642/job/798245260 pending-deployment-items: value: - environment: @@ -266408,6 +266839,13 @@ components: required: true schema: type: integer + concurrency-group-name: + name: concurrency_group_name + description: The name of the concurrency group. + in: path + required: true + schema: + type: string job-id: name: job_id description: The unique identifier of the job.