Skip to content

Add GitHub pull request creation cap support#111

Open
potiuk wants to merge 1 commit into
apache:mainfrom
potiuk:feature/pr-creation-cap
Open

Add GitHub pull request creation cap support#111
potiuk wants to merge 1 commit into
apache:mainfrom
potiuk:feature/pr-creation-cap

Conversation

@potiuk

@potiuk potiuk commented Jul 10, 2026

Copy link
Copy Markdown
Member

What

Implements support for GitHub's pull request creation cap
— an interaction limit that caps how many open pull requests a user without write access may have
open at one time. Users with write access are unaffected.

It uses the PATCH /repos/{owner}/{repo}/interaction-limits/pulls/creation-cap endpoint (schema taken
from GitHub's OpenAPI description, since the REST docs were not yet published when the changelog went out).

Configuration

Nested under the existing github.pull_requests block:

github:
  pull_requests:
    creation_cap:
      enabled: true
      max_open_pull_requests: 5   # optional, 1-1000; GitHub default used if omitted
  • enabled: false turns the cap off.
  • Removing the creation_cap section disables a cap that was previously managed by .asf.yaml.

Changes

  • asfyaml/feature/github/__init__.pycreation_cap strictyaml schema + directive registration
  • asfyaml/feature/github/pr_creation_cap.py — new directive (payload build, 1–1000 range validation,
    disable-on-removal, noop-aware, idempotent PATCH)
  • tests/github_pr_creation_cap.py — 9 tests (schema validation + enable/disable/removal/out-of-range/noop)
  • README.md — new "Pull request creation cap" subsection + ToC entry

Testing

Full suite passes (105 tests), ruff and mypy clean on the new code.

Implements the pull request creation cap interaction limit
(community/maintainers#840), which limits
the number of open pull requests a user without write access may have open
at one time via the PATCH /repos/{owner}/{repo}/interaction-limits/pulls/
creation-cap endpoint.

Configured under github.pull_requests.creation_cap with `enabled` and an
optional `max_open_pull_requests` (1-1000). Removing the section disables a
cap previously managed by .asf.yaml. Includes tests and README docs.

Generated-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@potiuk potiuk force-pushed the feature/pr-creation-cap branch from 939fcb8 to 7286ea7 Compare July 10, 2026 16:44

@o-nikolas o-nikolas left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would love to see this supported by asf.yaml


if creation_cap:
enabled = creation_cap.get("enabled", False)
max_open_pull_requests = creation_cap.get("max_open_pull_requests")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No default value provided here like for the above. Does anything undefined happen if we get None back here from get(), especially if we happen to get True from the line above?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants