Driftwatch

APIs / GitHub

GitHub API changes

Breaking changes, deprecations and new fields in the GitHub API, as they ship.

GitHubGitHub REST API · bb7549412 additive
2 new response fields
  • dependabot-alert.dependency.version_requirement
  • dependabot-alert-with-repository.dependency.version_requirement
GitHubGitHub REST API · 93c8981e2 additive
  • Additive

    include_metadata is now optional

    No action needed.

    GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id} · include_metadata · 2 call sites
  • Additive

    Response field metadata added

    No action needed unless you validate responses against a closed schema.

    rule-suite.rule_evaluations[].metadata · reachable from 2 operations
GitHubGitHub REST API · 02a2bc3d5 behavioral
GitHubGitHub REST API · ad351b194 behavioral
GitHubGitHub REST API · 949252727 additive
GitHubGitHub REST API · 985340e11 breaking
  • Breakingdirection flip: their tools call this safe

    auth_type can now return "anonymous"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    can now return "anonymous"

    2 places: org-private-registry-configuration.auth_type, org-private-registry-configuration-with-selected-repositories.auth_type
    Code that breaks
    switch (response.auth_type) {
      // existing branches …
      // no branch for "anonymous"
      default:
        throw new Error("unexpected auth_type");
    }
GitHubGitHub REST API · f0e383552 additive
  • Additive

    Response field bypass_rules added

    No action needed unless you validate responses against a closed schema.

    pull-request-merge-async-result.details.bypass_rules · reachable from 2 operations
  • Additive

    Request property bypass_rules added

    No action needed unless it is required.

    PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge-async · bypass_rules
GitHubGitHub REST API · 8de506896 additive
GitHubGitHub REST API · 677c1b8f1 breaking
  • Breakingdirection flip: their tools call this safe

    budget_entity_name is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    5 places: PATCH /organizations/{org}/settings/billing/budgets/{budget_id} · budget_entity_name, PATCH /organizations/{org}/settings/billing/budgets/{budget_id} · user, PATCH /organizations/{org}/settings/billing/budgets/{budget_id} · budget_product_sku, PATCH /organizations/{org}/settings/billing/budgets/{budget_id} · budget_scope, PATCH /organizations/{org}/settings/billing/budgets/{budget_id} · budget_type
    Code that breaks
    await client.post("/organizations/{org}/settings/billing/budgets/{budget_id}", {
      // budget_entity_name is now ignored, not rejected
      budget_entity_name: value,
    });
GitHubGitHub REST API · 814de7ac2 additive
  • Additive

    Response field include_drafts added

    No action needed unless you validate responses against a closed schema.

    GET /orgs/{org}/interaction-limits/pulls/creation-cap · include_drafts · 4 call sites
  • Additive

    Request property include_drafts added

    No action needed unless it is required.

    PATCH /orgs/{org}/interaction-limits/pulls/creation-cap · include_drafts · 2 call sites
GitHubGitHub REST API · 649b8c491 breaking
  • Breakingdirection flip: their tools call this safe

    permissions can now return "triage_plus"

    Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

    repository-invitation.permissions · reachable from 4 operations
    Code that breaks
    switch (response.permissions) {
      // existing branches …
      // no branch for "triage_plus"
      default:
        throw new Error("unexpected permissions");
    }
GitHubGitHub REST API · 6b1cc8631 breaking1 behavioral4 additive
GitHubGitHub REST API · e16cc25811 additive
11 new response fields
  • issue.labels[].archived_by
  • label.archived_at
  • label.archived_by
  • pull-request-simple.labels[].archived_by
  • pull-request.labels[].archived_by
  • nullable-issue.labels[].archived_by
  • issue-search-result-item.labels[].archived_at
  • issue-search-result-item.labels[].archived_by
  • label-search-result-item.archived_at
  • label-search-result-item.archived_by
  • labels[].archived_by