Repository: google/go-github (go)

Issue:
ProvisionAndInviteSCIMUser query instead body
Hello,

I encountered an issue with the wrong construction of a request to the GitHub SCIM API. I tried to use the function `ProvisionAndInviteSCIMUser`, but according to the [GitHub documentation](https://docs.github.com/en/enterprise-cloud@latest/rest/scim/scim?apiVersion=2022-11-28#provision-and-invite-a-scim-user), user data must be passed to the API in the body of the request. Unfortunately, the library `go-github` sends `SCIMUserAttributes` as query parameters.

Here is en example of the code:
```
package main

import (
	"context"
	"encoding/json"
	"fmt"
	"net/http/httputil"

	"github.com/google/go-github/v63/github"
)

var gh_pers_token string = "github_pat_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
var github_org string = "example"

func main() {
	fmt.Println("Create test users on GitHub")
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	opts := &github.SCIMUserAttributes{
		UserName: "userName",
		Name: github.SCIMUserName{
			GivenName:  "givenName",
			FamilyName: "familyName",
		},
		Emails: []*github.SCIMUserEmail{
			{
				Value: "octocat@github.com",
			},
		},
	}

	fmt.Println("The opts are: ", opts)
	show_data, _ := json.MarshalIndent(opts, "", "\t")
	fmt.Println("Show opts:", string(show_data))

	client := github.NewClient(nil).WithAuthToken(gh_pers_token)

	// Create users
	res, err := client.SCIM.ProvisionAndInviteSCIMUser(ctx, github_org, opts)
	if err != nil {
		fmt.Println("The response is: ", res)
		defer res.Body.Close()

		b, error := httputil.DumpResponse(res.Response, true)
		if error != nil {
			fmt.Println(error)
		}

		fmt.Println(string(b))
		fmt.Println(err)
	}
}
```

And here is the output:
```
% go run main.go
Create test users on GitHub
The opts are:  &{userName {givenName familyName <nil>} <nil> [0xc000074160] [] <nil> [] <nil> <nil> <nil>}
Show opts: {
        "userName": "userName",
        "name": {
                "givenName": "givenName",
                "familyName": "familyName"
        },
        "emails": [
                {
                        "value": "octocat@github.com"
                }
        ]
}
The response is:  &{0xc0000d2120 0 0 0 0     github.Rate{Limit:5000, Remaining:4995, Reset:github.Timestamp{2024-08-20 22:40:40 +0500 +05}} 2025-05-07 00:00:00 +0500 +05}
HTTP/2.0 400 Bad Request
Content-Length: 154
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset
Content-Security-Policy: default-src 'none'
Content-Type: application/scim+json
Date: Tue, 20 Aug 2024 17:16:03 GMT
Github-Authentication-Token-Expiration: 2025-05-07 00:00:00 +0500
Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin
Server: github.com
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
Vary: Accept-Encoding, Accept, X-Requested-With
X-Accepted-Github-Permissions: members=write
X-Content-Type-Options: nosniff
X-Frame-Options: deny
X-Github-Api-Version-Selected: 2022-11-28
X-Github-Media-Type: github.v3; format=json
X-Github-Request-Id: C1B6:C1EBC:2532330:258A88B:66C4CF52
X-Ratelimit-Limit: 5000
X-Ratelimit-Remaining: 4995
X-Ratelimit-Reset: 1724175640
X-Ratelimit-Resource: core
X-Ratelimit-Used: 5
X-Xss-Protection: 0

{"schemas":["urn:ietf:params:scim:api:messages:2.0:Error"],"status":400,"scimType":"invalidSyntax","detail":"For 'links/1/schema', nil is not an object."}
POST https://api.github.com/scim/v2/organizations/example/Users?Active=&DisplayName=&Emails=%7Boctocat%40github.com+%3Cnil%3E+%3Cnil%3E%7D&ExternalID=&ID=&Meta=&Name%5BFamilyName%5D=familyName&Name%5BFormatted%5D=&Name%5BGivenName%5D=givenName&UserName=userName: 400  []
```
From my perspective, the cause of the issue is located in the line below:
https://github.com/google/go-github/blob/master/github/scim.go#L115
because the variable `opts` is wrongly handled by the function `addOptions`, processing `SCIMUserAttributes` as query parameters instead of shaping them into the body.

There is a chance that I have wrongly made conclusions since I am not an expert in Golang. If so, could you please point me in the direction of how the function `ProvisionAndInviteSCIMUser` should be used properly?
Thank you in advance.

Pull request description:
feat!: Fix broken SCIMService.ProvisionAndInviteSCIMUser method
Fixes: #3238. 

BREAKING CHANGE: `SCIMService.ProvisionAndInviteSCIMUser` now returns a response.

Patch:
diff --git a/.golangci.yml b/.golangci.yml
index 79d8481f..5f602dd2 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -23,6 +23,8 @@ linters-settings:
       # performance issue: see https://github.com/golangci/golangci-lint/issues/4039
       # and https://github.com/securego/gosec/issues/1007
       - G602
+      # int(os.Stdin.Fd())
+      - G115
 issues:
   exclude-use-default: false
   exclude-rules:
@@ -43,9 +45,9 @@ issues:
       text: 'G505: Blocklisted import crypto/sha1: weak cryptographic primitive'
 
     # This is adapted from golangci-lint's default exclusions. It disables linting for error checks on
-    # os.RemoveAll and any function ending in "Close".
+    # os.RemoveAll, fmt.Fprint*, fmt.Scanf, and any function ending in "Close".
     - linters: [ errcheck ]
-      text: Error return value of .(.*Close|os\.Remove(All)?). is not checked
+      text: Error return value of .(.*Close|fmt\.Fprint.*|fmt\.Scanf|os\.Remove(All)?). is not checked
 
     # We don't care about file inclusion via variable in examples or internal tools.
     - linters: [ gosec ]
diff --git a/README.md b/README.md
index 6c6bcd60..472ff439 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 # go-github #
 
 [![go-github release (latest SemVer)](https://img.shields.io/github/v/release/google/go-github?sort=semver)](https://github.com/google/go-github/releases)
-[![GoDoc](https://img.shields.io/static/v1?label=godoc&message=reference&color=blue)](https://pkg.go.dev/github.com/google/go-github/v63/github)
+[![GoDoc](https://img.shields.io/static/v1?label=godoc&message=reference&color=blue)](https://pkg.go.dev/github.com/google/go-github/v64/github)
 [![Test Status](https://github.com/google/go-github/workflows/tests/badge.svg)](https://github.com/google/go-github/actions?query=workflow%3Atests)
 [![Test Coverage](https://codecov.io/gh/google/go-github/branch/master/graph/badge.svg)](https://codecov.io/gh/google/go-github)
 [![Discuss at go-github@googlegroups.com](https://img.shields.io/badge/discuss-go--github%40googlegroups.com-blue.svg)](https://groups.google.com/group/go-github)
@@ -24,7 +24,7 @@ If you're interested in using the [GraphQL API v4][], the recommended library is
 go-github is compatible with modern Go releases in module mode, with Go installed:
 
 ```bash
-go get github.com/google/go-github/v63
+go get github.com/google/go-github/v64
 ```
 
 will resolve and add the package to the current development module, along with its dependencies.
@@ -32,7 +32,7 @@ will resolve and add the package to the current development module, along with i
 Alternatively the same can be achieved if you use import in a package:
 
 ```go
-import "github.com/google/go-github/v63/github"
+import "github.com/google/go-github/v64/github"
 ```
 
 and run `go get` without parameters.
@@ -40,13 +40,13 @@ and run `go get` without parameters.
 Finally, to use the top-of-trunk version of this repo, use the following command:
 
 ```bash
-go get github.com/google/go-github/v63@master
+go get github.com/google/go-github/v64@master
 ```
 
 ## Usage ##
 
 ```go
-import "github.com/google/go-github/v63/github"	// with go modules enabled (GO111MODULE=on or outside GOPATH)
+import "github.com/google/go-github/v64/github"	// with go modules enabled (GO111MODULE=on or outside GOPATH)
 import "github.com/google/go-github/github" // with go modules disabled
 ```
 
@@ -119,7 +119,7 @@ import (
 	"net/http"
 
 	"github.com/bradleyfalzon/ghinstallation/v2"
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 func main() {
@@ -153,7 +153,7 @@ import (
  "os"
  "strconv"
 
- "github.com/google/go-github/v63/github"
+ "github.com/google/go-github/v64/github"
  "github.com/jferrl/go-githubauth"
  "golang.org/x/oauth2"
 )
@@ -361,7 +361,7 @@ For complete usage of go-github, see the full [package docs][].
 
 [GitHub API v3]: https://docs.github.com/en/rest
 [personal access token]: https://github.com/blog/1509-personal-api-tokens
-[package docs]: https://pkg.go.dev/github.com/google/go-github/v63/github
+[package docs]: https://pkg.go.dev/github.com/google/go-github/v64/github
 [GraphQL API v4]: https://developer.github.com/v4/
 [shurcooL/githubv4]: https://github.com/shurcooL/githubv4
 [GitHub webhook events]: https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads
@@ -434,6 +434,7 @@ Versions prior to 48.2.0 are not listed.
 
 | go-github Version | GitHub v3 API Version |
 | ----------------- | --------------------- |
+| 64.0.0            | 2022-11-28            |
 | 63.0.0            | 2022-11-28            |
 | 62.0.0            | 2022-11-28            |
 | 61.0.0            | 2022-11-28            |
diff --git a/example/actionpermissions/main.go b/example/actionpermissions/main.go
index 775add69..5624ee84 100644
--- a/example/actionpermissions/main.go
+++ b/example/actionpermissions/main.go
@@ -14,7 +14,7 @@ import (
 	"log"
 	"os"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 var (
diff --git a/example/appengine/app.go b/example/appengine/app.go
index e3e44ae1..d4a64dd4 100644
--- a/example/appengine/app.go
+++ b/example/appengine/app.go
@@ -12,7 +12,7 @@ import (
 	"net/http"
 	"os"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 	"google.golang.org/appengine"
 	"google.golang.org/appengine/log"
 )
diff --git a/example/basicauth/main.go b/example/basicauth/main.go
index ac02f474..45072f51 100644
--- a/example/basicauth/main.go
+++ b/example/basicauth/main.go
@@ -21,7 +21,7 @@ import (
 	"os"
 	"strings"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 	"golang.org/x/term"
 )
 
diff --git a/example/codespaces/newreposecretwithxcrypto/main.go b/example/codespaces/newreposecretwithxcrypto/main.go
index e9716107..e0a9d969 100644
--- a/example/codespaces/newreposecretwithxcrypto/main.go
+++ b/example/codespaces/newreposecretwithxcrypto/main.go
@@ -36,7 +36,7 @@ import (
 	"log"
 	"os"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 	"golang.org/x/crypto/nacl/box"
 )
 
diff --git a/example/codespaces/newusersecretwithxcrypto/main.go b/example/codespaces/newusersecretwithxcrypto/main.go
index 5c01d4e3..5893224b 100644
--- a/example/codespaces/newusersecretwithxcrypto/main.go
+++ b/example/codespaces/newusersecretwithxcrypto/main.go
@@ -37,7 +37,7 @@ import (
 	"log"
 	"os"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 	"golang.org/x/crypto/nacl/box"
 )
 
diff --git a/example/commitpr/main.go b/example/commitpr/main.go
index b892cf4b..35a5584a 100644
--- a/example/commitpr/main.go
+++ b/example/commitpr/main.go
@@ -33,7 +33,7 @@ import (
 	"time"
 
 	"github.com/ProtonMail/go-crypto/openpgp"
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 var (
diff --git a/example/go.mod b/example/go.mod
index 4dbc8dbf..9297353e 100644
--- a/example/go.mod
+++ b/example/go.mod
@@ -1,4 +1,4 @@
-module github.com/google/go-github/v63/example
+module github.com/google/go-github/v64/example
 
 go 1.21
 
@@ -6,7 +6,7 @@ require (
 	github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371
 	github.com/bradleyfalzon/ghinstallation/v2 v2.0.4
 	github.com/gofri/go-github-ratelimit v1.0.3
-	github.com/google/go-github/v63 v63.0.0
+	github.com/google/go-github/v64 v64.0.0
 	golang.org/x/crypto v0.21.0
 	golang.org/x/term v0.18.0
 	google.golang.org/appengine v1.6.7
@@ -24,4 +24,4 @@ require (
 )
 
 // Use version at HEAD, not the latest published.
-replace github.com/google/go-github/v63 => ../
+replace github.com/google/go-github/v64 => ../
diff --git a/example/listenvironments/main.go b/example/listenvironments/main.go
index b0a5762a..4edd0e1d 100644
--- a/example/listenvironments/main.go
+++ b/example/listenvironments/main.go
@@ -18,7 +18,7 @@ import (
 	"log"
 	"os"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 func main() {
diff --git a/example/migrations/main.go b/example/migrations/main.go
index 2d70c750..e5669886 100644
--- a/example/migrations/main.go
+++ b/example/migrations/main.go
@@ -12,7 +12,7 @@ import (
 	"context"
 	"fmt"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 func fetchAllUserMigrations() ([]*github.UserMigration, error) {
diff --git a/example/newfilewithappauth/main.go b/example/newfilewithappauth/main.go
index aa266463..3e64b0ac 100644
--- a/example/newfilewithappauth/main.go
+++ b/example/newfilewithappauth/main.go
@@ -16,7 +16,7 @@ import (
 	"time"
 
 	"github.com/bradleyfalzon/ghinstallation/v2"
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 func main() {
diff --git a/example/newrepo/main.go b/example/newrepo/main.go
index db895149..014abe1c 100644
--- a/example/newrepo/main.go
+++ b/example/newrepo/main.go
@@ -16,7 +16,7 @@ import (
 	"log"
 	"os"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 var (
diff --git a/example/newreposecretwithlibsodium/go.mod b/example/newreposecretwithlibsodium/go.mod
index 730636c5..1d2ce6a1 100644
--- a/example/newreposecretwithlibsodium/go.mod
+++ b/example/newreposecretwithlibsodium/go.mod
@@ -6,10 +6,10 @@ toolchain go1.22.0
 
 require (
 	github.com/GoKillers/libsodium-go v0.0.0-20171022220152-dd733721c3cb
-	github.com/google/go-github/v63 v63.0.0
+	github.com/google/go-github/v64 v64.0.0
 )
 
 require github.com/google/go-querystring v1.1.0 // indirect
 
 // Use version at HEAD, not the latest published.
-replace github.com/google/go-github/v63 => ../..
+replace github.com/google/go-github/v64 => ../..
diff --git a/example/newreposecretwithlibsodium/main.go b/example/newreposecretwithlibsodium/main.go
index eb11043a..661dc5f0 100644
--- a/example/newreposecretwithlibsodium/main.go
+++ b/example/newreposecretwithlibsodium/main.go
@@ -36,7 +36,7 @@ import (
 	"os"
 
 	sodium "github.com/GoKillers/libsodium-go/cryptobox"
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 var (
diff --git a/example/newreposecretwithxcrypto/main.go b/example/newreposecretwithxcrypto/main.go
index a3dcffdc..107acc2d 100644
--- a/example/newreposecretwithxcrypto/main.go
+++ b/example/newreposecretwithxcrypto/main.go
@@ -36,7 +36,7 @@ import (
 	"log"
 	"os"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 	"golang.org/x/crypto/nacl/box"
 )
 
diff --git a/example/ratelimit/main.go b/example/ratelimit/main.go
index ca531dbc..f111e8d1 100644
--- a/example/ratelimit/main.go
+++ b/example/ratelimit/main.go
@@ -13,7 +13,7 @@ import (
 	"fmt"
 
 	"github.com/gofri/go-github-ratelimit/github_ratelimit"
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 func main() {
diff --git a/example/simple/main.go b/example/simple/main.go
index 7cdb6ca2..04456549 100644
--- a/example/simple/main.go
+++ b/example/simple/main.go
@@ -12,7 +12,7 @@ import (
 	"context"
 	"fmt"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 // Fetch all the public organizations' membership of a user.
diff --git a/example/tagprotection/main.go b/example/tagprotection/main.go
index 2c867e67..5a356f40 100644
--- a/example/tagprotection/main.go
+++ b/example/tagprotection/main.go
@@ -18,7 +18,7 @@ import (
 	"os"
 	"strings"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 	"golang.org/x/term"
 )
 
diff --git a/example/tokenauth/main.go b/example/tokenauth/main.go
index d6fc018b..8ad17bee 100644
--- a/example/tokenauth/main.go
+++ b/example/tokenauth/main.go
@@ -15,7 +15,7 @@ import (
 	"log"
 	"os"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 	"golang.org/x/term"
 )
 
diff --git a/example/topics/main.go b/example/topics/main.go
index f096fbbc..aa5226b2 100644
--- a/example/topics/main.go
+++ b/example/topics/main.go
@@ -12,7 +12,7 @@ import (
 	"context"
 	"fmt"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 // Fetch and lists all the public topics associated with the specified GitHub topic
diff --git a/github/apps.go b/github/apps.go
index 16ef758c..2f74c2c2 100644
--- a/github/apps.go
+++ b/github/apps.go
@@ -77,46 +77,48 @@ type InstallationTokenListRepoOptions struct {
 //	https://docs.github.com/enterprise-server@3.0/rest/apps#create-an-installation-access-token-for-an-app
 //	https://docs.github.com/rest/apps#create-an-installation-access-token-for-an-app
 type InstallationPermissions struct {
-	Actions                       *string `json:"actions,omitempty"`
-	ActionsVariables              *string `json:"actions_variables,omitempty"`
-	Administration                *string `json:"administration,omitempty"`
-	Blocking                      *string `json:"blocking,omitempty"`
-	Checks                        *string `json:"checks,omitempty"`
-	Contents                      *string `json:"contents,omitempty"`
-	ContentReferences             *string `json:"content_references,omitempty"`
-	Deployments                   *string `json:"deployments,omitempty"`
-	Emails                        *string `json:"emails,omitempty"`
-	Environments                  *string `json:"environments,omitempty"`
-	Followers                     *string `json:"followers,omitempty"`
-	Issues                        *string `json:"issues,omitempty"`
-	Metadata                      *string `json:"metadata,omitempty"`
-	Members                       *string `json:"members,omitempty"`
-	OrganizationAdministration    *string `json:"organization_administration,omitempty"`
-	OrganizationCustomProperties  *string `json:"organization_custom_properties,omitempty"`
-	OrganizationCustomRoles       *string `json:"organization_custom_roles,omitempty"`
-	OrganizationCustomOrgRoles    *string `json:"organization_custom_org_roles,omitempty"`
-	OrganizationHooks             *string `json:"organization_hooks,omitempty"`
-	OrganizationPackages          *string `json:"organization_packages,omitempty"`
-	OrganizationPlan              *string `json:"organization_plan,omitempty"`
-	OrganizationPreReceiveHooks   *string `json:"organization_pre_receive_hooks,omitempty"`
-	OrganizationProjects          *string `json:"organization_projects,omitempty"`
-	OrganizationSecrets           *string `json:"organization_secrets,omitempty"`
-	OrganizationSelfHostedRunners *string `json:"organization_self_hosted_runners,omitempty"`
-	OrganizationUserBlocking      *string `json:"organization_user_blocking,omitempty"`
-	Packages                      *string `json:"packages,omitempty"`
-	Pages                         *string `json:"pages,omitempty"`
-	PullRequests                  *string `json:"pull_requests,omitempty"`
-	RepositoryHooks               *string `json:"repository_hooks,omitempty"`
-	RepositoryProjects            *string `json:"repository_projects,omitempty"`
-	RepositoryPreReceiveHooks     *string `json:"repository_pre_receive_hooks,omitempty"`
-	Secrets                       *string `json:"secrets,omitempty"`
-	SecretScanningAlerts          *string `json:"secret_scanning_alerts,omitempty"`
-	SecurityEvents                *string `json:"security_events,omitempty"`
-	SingleFile                    *string `json:"single_file,omitempty"`
-	Statuses                      *string `json:"statuses,omitempty"`
-	TeamDiscussions               *string `json:"team_discussions,omitempty"`
-	VulnerabilityAlerts           *string `json:"vulnerability_alerts,omitempty"`
-	Workflows                     *string `json:"workflows,omitempty"`
+	Actions                                 *string `json:"actions,omitempty"`
+	ActionsVariables                        *string `json:"actions_variables,omitempty"`
+	Administration                          *string `json:"administration,omitempty"`
+	Blocking                                *string `json:"blocking,omitempty"`
+	Checks                                  *string `json:"checks,omitempty"`
+	Contents                                *string `json:"contents,omitempty"`
+	ContentReferences                       *string `json:"content_references,omitempty"`
+	Deployments                             *string `json:"deployments,omitempty"`
+	Emails                                  *string `json:"emails,omitempty"`
+	Environments                            *string `json:"environments,omitempty"`
+	Followers                               *string `json:"followers,omitempty"`
+	Issues                                  *string `json:"issues,omitempty"`
+	Metadata                                *string `json:"metadata,omitempty"`
+	Members                                 *string `json:"members,omitempty"`
+	OrganizationAdministration              *string `json:"organization_administration,omitempty"`
+	OrganizationCustomProperties            *string `json:"organization_custom_properties,omitempty"`
+	OrganizationCustomRoles                 *string `json:"organization_custom_roles,omitempty"`
+	OrganizationCustomOrgRoles              *string `json:"organization_custom_org_roles,omitempty"`
+	OrganizationHooks                       *string `json:"organization_hooks,omitempty"`
+	OrganizationPackages                    *string `json:"organization_packages,omitempty"`
+	OrganizationPersonalAccessTokens        *string `json:"organization_personal_access_tokens,omitempty"`
+	OrganizationPersonalAccessTokenRequests *string `json:"organization_personal_access_token_requests,omitempty"`
+	OrganizationPlan                        *string `json:"organization_plan,omitempty"`
+	OrganizationPreReceiveHooks             *string `json:"organization_pre_receive_hooks,omitempty"`
+	OrganizationProjects                    *string `json:"organization_projects,omitempty"`
+	OrganizationSecrets                     *string `json:"organization_secrets,omitempty"`
+	OrganizationSelfHostedRunners           *string `json:"organization_self_hosted_runners,omitempty"`
+	OrganizationUserBlocking                *string `json:"organization_user_blocking,omitempty"`
+	Packages                                *string `json:"packages,omitempty"`
+	Pages                                   *string `json:"pages,omitempty"`
+	PullRequests                            *string `json:"pull_requests,omitempty"`
+	RepositoryHooks                         *string `json:"repository_hooks,omitempty"`
+	RepositoryProjects                      *string `json:"repository_projects,omitempty"`
+	RepositoryPreReceiveHooks               *string `json:"repository_pre_receive_hooks,omitempty"`
+	Secrets                                 *string `json:"secrets,omitempty"`
+	SecretScanningAlerts                    *string `json:"secret_scanning_alerts,omitempty"`
+	SecurityEvents                          *string `json:"security_events,omitempty"`
+	SingleFile                              *string `json:"single_file,omitempty"`
+	Statuses                                *string `json:"statuses,omitempty"`
+	TeamDiscussions                         *string `json:"team_discussions,omitempty"`
+	VulnerabilityAlerts                     *string `json:"vulnerability_alerts,omitempty"`
+	Workflows                               *string `json:"workflows,omitempty"`
 }
 
 // InstallationRequest represents a pending GitHub App installation request.
diff --git a/github/doc.go b/github/doc.go
index 1781a6a4..234b5068 100644
--- a/github/doc.go
+++ b/github/doc.go
@@ -8,7 +8,7 @@ Package github provides a client for using the GitHub API.
 
 Usage:
 
-	import "github.com/google/go-github/v63/github"	// with go modules enabled (GO111MODULE=on or outside GOPATH)
+	import "github.com/google/go-github/v64/github"	// with go modules enabled (GO111MODULE=on or outside GOPATH)
 	import "github.com/google/go-github/github"     // with go modules disabled
 
 Construct a new GitHub client, then use the various services on the client to
diff --git a/github/github-accessors.go b/github/github-accessors.go
index 86d3b286..10096e44 100644
--- a/github/github-accessors.go
+++ b/github/github-accessors.go
@@ -662,6 +662,14 @@ func (a *AnalysesListOptions) GetSarifID() string {
 	return *a.SarifID
 }
 
+// GetDomains returns the Domains field.
+func (a *APIMeta) GetDomains() *APIMetaDomains {
+	if a == nil {
+		return nil
+	}
+	return a.Domains
+}
+
 // GetSSHKeyFingerprints returns the SSHKeyFingerprints map if it's non-nil, an empty map otherwise.
 func (a *APIMeta) GetSSHKeyFingerprints() map[string]string {
 	if a == nil || a.SSHKeyFingerprints == nil {
@@ -678,6 +686,14 @@ func (a *APIMeta) GetVerifiablePasswordAuthentication() bool {
 	return *a.VerifiablePasswordAuthentication
 }
 
+// GetArtifactAttestations returns the ArtifactAttestations field.
+func (a *APIMetaDomains) GetArtifactAttestations() *APIMetaArtifactAttestations {
+	if a == nil {
+		return nil
+	}
+	return a.ArtifactAttestations
+}
+
 // GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
 func (a *App) GetCreatedAt() Timestamp {
 	if a == nil || a.CreatedAt == nil {
@@ -9006,6 +9022,22 @@ func (i *InstallationPermissions) GetOrganizationPackages() string {
 	return *i.OrganizationPackages
 }
 
+// GetOrganizationPersonalAccessTokenRequests returns the OrganizationPersonalAccessTokenRequests field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetOrganizationPersonalAccessTokenRequests() string {
+	if i == nil || i.OrganizationPersonalAccessTokenRequests == nil {
+		return ""
+	}
+	return *i.OrganizationPersonalAccessTokenRequests
+}
+
+// GetOrganizationPersonalAccessTokens returns the OrganizationPersonalAccessTokens field if it's non-nil, zero value otherwise.
+func (i *InstallationPermissions) GetOrganizationPersonalAccessTokens() string {
+	if i == nil || i.OrganizationPersonalAccessTokens == nil {
+		return ""
+	}
+	return *i.OrganizationPersonalAccessTokens
+}
+
 // GetOrganizationPlan returns the OrganizationPlan field if it's non-nil, zero value otherwise.
 func (i *InstallationPermissions) GetOrganizationPlan() string {
 	if i == nil || i.OrganizationPlan == nil {
diff --git a/github/github.go b/github/github.go
index cd0c0133..fcf958ef 100644
--- a/github/github.go
+++ b/github/github.go
@@ -28,7 +28,7 @@ import (
 )
 
 const (
-	Version = "v63.0.0"
+	Version = "v64.0.0"
 
 	defaultAPIVersion = "2022-11-28"
 	defaultBaseURL    = "https://api.github.com/"
diff --git a/github/meta.go b/github/meta.go
index e0e355e8..cc90b618 100644
--- a/github/meta.go
+++ b/github/meta.go
@@ -70,9 +70,25 @@ type APIMeta struct {
 	// which serve GitHub APIs.
 	API []string `json:"api,omitempty"`
 
-	// A map of GitHub services and their associated domains. Note that many
-	// of these domains are represented as wildcards (e.g. "*.github.com").
-	Domains map[string][]string `json:"domains,omitempty"`
+	// GitHub services and their associated domains. Note that many of these domains
+	// are represented as wildcards (e.g. "*.github.com").
+	Domains *APIMetaDomains `json:"domains,omitempty"`
+}
+
+// APIMetaDomains represents the domains associated with GitHub services.
+type APIMetaDomains struct {
+	Website              []string                     `json:"website,omitempty"`
+	Codespaces           []string                     `json:"codespaces,omitempty"`
+	Copilot              []string                     `json:"copilot,omitempty"`
+	Packages             []string                     `json:"packages,omitempty"`
+	Actions              []string                     `json:"actions,omitempty"`
+	ArtifactAttestations *APIMetaArtifactAttestations `json:"artifact_attestations,omitempty"`
+}
+
+// APIMetaArtifactAttestations represents the artifact attestation services domains.
+type APIMetaArtifactAttestations struct {
+	TrustDomain string   `json:"trust_domain,omitempty"`
+	Services    []string `json:"services,omitempty"`
 }
 
 // Get returns information about GitHub.com, the service. Or, if you access
diff --git a/github/repos_rules.go b/github/repos_rules.go
index 17fa170c..6d394164 100644
--- a/github/repos_rules.go
+++ b/github/repos_rules.go
@@ -111,6 +111,7 @@ type RuleRequiredStatusChecks struct {
 
 // RequiredStatusChecksRuleParameters represents the required_status_checks rule parameters.
 type RequiredStatusChecksRuleParameters struct {
+	DoNotEnforceOnCreate             bool                       `json:"do_not_enforce_on_create"`
 	RequiredStatusChecks             []RuleRequiredStatusChecks `json:"required_status_checks"`
 	StrictRequiredStatusChecksPolicy bool                       `json:"strict_required_status_checks_policy"`
 }
diff --git a/github/scim.go b/github/scim.go
index 02136d7e..4b34c166 100644
--- a/github/scim.go
+++ b/github/scim.go
@@ -110,19 +110,21 @@ func (s *SCIMService) ListSCIMProvisionedIdentities(ctx context.Context, org str
 // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/scim/scim#provision-and-invite-a-scim-user
 //
 //meta:operation POST /scim/v2/organizations/{org}/Users
-func (s *SCIMService) ProvisionAndInviteSCIMUser(ctx context.Context, org string, opts *SCIMUserAttributes) (*Response, error) {
+func (s *SCIMService) ProvisionAndInviteSCIMUser(ctx context.Context, org string, opts *SCIMUserAttributes) (*SCIMUserAttributes, *Response, error) {
 	u := fmt.Sprintf("scim/v2/organizations/%v/Users", org)
-	u, err := addOptions(u, opts)
+
+	req, err := s.client.NewRequest("POST", u, opts)
 	if err != nil {
-		return nil, err
+		return nil, nil, err
 	}
 
-	req, err := s.client.NewRequest("POST", u, nil)
+	user := new(SCIMUserAttributes)
+	resp, err := s.client.Do(ctx, req, user)
 	if err != nil {
-		return nil, err
+		return nil, resp, err
 	}
 
-	return s.client.Do(ctx, req, nil)
+	return user, resp, nil
 }
 
 // GetSCIMProvisioningInfoForUser returns SCIM provisioning information for a user.
diff --git a/go.mod b/go.mod
index 0e3f7cf5..1a3133d2 100644
--- a/go.mod
+++ b/go.mod
@@ -1,4 +1,4 @@
-module github.com/google/go-github/v63
+module github.com/google/go-github/v64
 
 require (
 	github.com/google/go-cmp v0.6.0
diff --git a/scrape/apps.go b/scrape/apps.go
index 9f232276..12ca7c0f 100644
--- a/scrape/apps.go
+++ b/scrape/apps.go
@@ -18,7 +18,7 @@ import (
 	"strings"
 
 	"github.com/PuerkitoBio/goquery"
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 // AppRestrictionsEnabled returns whether the specified organization has
diff --git a/scrape/go.mod b/scrape/go.mod
index 700a000b..4b58ef21 100644
--- a/scrape/go.mod
+++ b/scrape/go.mod
@@ -7,7 +7,7 @@ toolchain go1.22.0
 require (
 	github.com/PuerkitoBio/goquery v1.9.2
 	github.com/google/go-cmp v0.6.0
-	github.com/google/go-github/v63 v63.0.0
+	github.com/google/go-github/v64 v64.0.0
 	github.com/xlzd/gotp v0.1.0
 	golang.org/x/net v0.28.0
 )
diff --git a/scrape/go.sum b/scrape/go.sum
index fb5ccf43..9bdd6719 100644
--- a/scrape/go.sum
+++ b/scrape/go.sum
@@ -5,8 +5,8 @@ github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6
 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-github/v63 v63.0.0 h1:13xwK/wk9alSokujB9lJkuzdmQuVn2QCPeck76wR3nE=
-github.com/google/go-github/v63 v63.0.0/go.mod h1:IqbcrgUmIcEaioWrGYei/09o+ge5vhffGOcxrO0AfmA=
+github.com/google/go-github/v64 v64.0.0 h1:4G61sozmY3eiPAjjoOHponXDBONm+utovTKbyUb2Qdg=
+github.com/google/go-github/v64 v64.0.0/go.mod h1:xB3vqMQNdHzilXBiO2I+M7iEFtHf+DP/omBOv6tQzVo=
 github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
 github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
 github.com/xlzd/gotp v0.1.0 h1:37blvlKCh38s+fkem+fFh7sMnceltoIEBYTVXyoa5Po=
diff --git a/script/lint.sh b/script/lint.sh
index b76758a4..ccd0cf11 100755
--- a/script/lint.sh
+++ b/script/lint.sh
@@ -5,7 +5,7 @@
 
 set -e
 
-GOLANGCI_LINT_VERSION="1.54.2"
+GOLANGCI_LINT_VERSION="1.60.2"
 
 CDPATH="" cd -- "$(dirname -- "$0")/.."
 BIN="$(pwd -P)"/bin
diff --git a/tools/go.mod b/tools/go.mod
index 60b47d3f..fbbbf3bf 100644
--- a/tools/go.mod
+++ b/tools/go.mod
@@ -8,7 +8,7 @@ require (
 	github.com/alecthomas/kong v0.9.0
 	github.com/getkin/kin-openapi v0.127.0
 	github.com/google/go-cmp v0.6.0
-	github.com/google/go-github/v63 v63.0.0
+	github.com/google/go-github/v64 v64.0.0
 	golang.org/x/sync v0.8.0
 	gopkg.in/yaml.v3 v3.0.1
 )
@@ -25,4 +25,4 @@ require (
 )
 
 // Use version at HEAD, not the latest published.
-replace github.com/google/go-github/v63 => ../
+replace github.com/google/go-github/v64 => ../
diff --git a/tools/metadata/main.go b/tools/metadata/main.go
index 57039dc9..99e859b3 100644
--- a/tools/metadata/main.go
+++ b/tools/metadata/main.go
@@ -15,7 +15,7 @@ import (
 	"path/filepath"
 
 	"github.com/alecthomas/kong"
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 var helpVars = kong.Vars{
diff --git a/tools/metadata/metadata.go b/tools/metadata/metadata.go
index 0f94c658..1d844a43 100644
--- a/tools/metadata/metadata.go
+++ b/tools/metadata/metadata.go
@@ -24,7 +24,7 @@ import (
 	"strings"
 	"sync"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 	"gopkg.in/yaml.v3"
 )
 
diff --git a/tools/metadata/openapi.go b/tools/metadata/openapi.go
index f6c2db74..5fedb5ca 100644
--- a/tools/metadata/openapi.go
+++ b/tools/metadata/openapi.go
@@ -14,7 +14,7 @@ import (
 	"strconv"
 
 	"github.com/getkin/kin-openapi/openapi3"
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 	"golang.org/x/sync/errgroup"
 )
 


Test patch:
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index d9e3d3ba..36ec9b31 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -24,7 +24,7 @@ jobs:
         shell: bash
     strategy:
       matrix:
-        go-version: [1.x, 1.21.x]
+        go-version: [1.x, 1.22.x]
         platform: [ubuntu-latest]
         include:
           # include windows, but only with the latest Go version, since there
diff --git a/github/apps_test.go b/github/apps_test.go
index bb060d7a..aafc263d 100644
--- a/github/apps_test.go
+++ b/github/apps_test.go
@@ -149,6 +149,8 @@ func TestAppsService_ListInstallations(t *testing.T) {
                                        "organization_custom_roles": "write",
                                        "organization_hooks": "write",
                                        "organization_packages": "write",
+                                       "organization_personal_access_tokens": "read",
+                                       "organization_personal_access_token_requests": "read",
                                        "organization_plan": "read",
                                        "organization_pre_receive_hooks": "write",
                                        "organization_projects": "read",
@@ -197,40 +199,42 @@ func TestAppsService_ListInstallations(t *testing.T) {
 		SingleFileName:      String("config.yml"),
 		RepositorySelection: String("selected"),
 		Permissions: &InstallationPermissions{
-			Actions:                       String("read"),
-			Administration:                String("read"),
-			Checks:                        String("read"),
-			Contents:                      String("read"),
-			ContentReferences:             String("read"),
-			Deployments:                   String("read"),
-			Environments:                  String("read"),
-			Issues:                        String("write"),
-			Metadata:                      String("read"),
-			Members:                       String("read"),
-			OrganizationAdministration:    String("write"),
-			OrganizationCustomRoles:       String("write"),
-			OrganizationHooks:             String("write"),
-			OrganizationPackages:          String("write"),
-			OrganizationPlan:              String("read"),
-			OrganizationPreReceiveHooks:   String("write"),
-			OrganizationProjects:          String("read"),
-			OrganizationSecrets:           String("read"),
-			OrganizationSelfHostedRunners: String("read"),
-			OrganizationUserBlocking:      String("write"),
-			Packages:                      String("read"),
-			Pages:                         String("read"),
-			PullRequests:                  String("write"),
-			RepositoryHooks:               String("write"),
-			RepositoryProjects:            String("read"),
-			RepositoryPreReceiveHooks:     String("read"),
-			Secrets:                       String("read"),
-			SecretScanningAlerts:          String("read"),
-			SecurityEvents:                String("read"),
-			SingleFile:                    String("write"),
-			Statuses:                      String("write"),
-			TeamDiscussions:               String("read"),
-			VulnerabilityAlerts:           String("read"),
-			Workflows:                     String("write")},
+			Actions:                                 String("read"),
+			Administration:                          String("read"),
+			Checks:                                  String("read"),
+			Contents:                                String("read"),
+			ContentReferences:                       String("read"),
+			Deployments:                             String("read"),
+			Environments:                            String("read"),
+			Issues:                                  String("write"),
+			Metadata:                                String("read"),
+			Members:                                 String("read"),
+			OrganizationAdministration:              String("write"),
+			OrganizationCustomRoles:                 String("write"),
+			OrganizationHooks:                       String("write"),
+			OrganizationPackages:                    String("write"),
+			OrganizationPersonalAccessTokens:        String("read"),
+			OrganizationPersonalAccessTokenRequests: String("read"),
+			OrganizationPlan:                        String("read"),
+			OrganizationPreReceiveHooks:             String("write"),
+			OrganizationProjects:                    String("read"),
+			OrganizationSecrets:                     String("read"),
+			OrganizationSelfHostedRunners:           String("read"),
+			OrganizationUserBlocking:                String("write"),
+			Packages:                                String("read"),
+			Pages:                                   String("read"),
+			PullRequests:                            String("write"),
+			RepositoryHooks:                         String("write"),
+			RepositoryProjects:                      String("read"),
+			RepositoryPreReceiveHooks:               String("read"),
+			Secrets:                                 String("read"),
+			SecretScanningAlerts:                    String("read"),
+			SecurityEvents:                          String("read"),
+			SingleFile:                              String("write"),
+			Statuses:                                String("write"),
+			TeamDiscussions:                         String("read"),
+			VulnerabilityAlerts:                     String("read"),
+			Workflows:                               String("write")},
 		Events:    []string{"push", "pull_request"},
 		CreatedAt: &date,
 		UpdatedAt: &date,
diff --git a/github/examples_test.go b/github/examples_test.go
index d8db0303..97a7a1e4 100644
--- a/github/examples_test.go
+++ b/github/examples_test.go
@@ -12,7 +12,7 @@ import (
 	"fmt"
 	"log"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 func ExampleMarkdownService_Render() {
diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go
index 11d8a3bf..aa694fd5 100644
--- a/github/github-accessors_test.go
+++ b/github/github-accessors_test.go
@@ -765,6 +765,13 @@ func TestAnalysesListOptions_GetSarifID(tt *testing.T) {
 	a.GetSarifID()
 }
 
+func TestAPIMeta_GetDomains(tt *testing.T) {
+	a := &APIMeta{}
+	a.GetDomains()
+	a = nil
+	a.GetDomains()
+}
+
 func TestAPIMeta_GetSSHKeyFingerprints(tt *testing.T) {
 	zeroValue := map[string]string{}
 	a := &APIMeta{SSHKeyFingerprints: zeroValue}
@@ -785,6 +792,13 @@ func TestAPIMeta_GetVerifiablePasswordAuthentication(tt *testing.T) {
 	a.GetVerifiablePasswordAuthentication()
 }
 
+func TestAPIMetaDomains_GetArtifactAttestations(tt *testing.T) {
+	a := &APIMetaDomains{}
+	a.GetArtifactAttestations()
+	a = nil
+	a.GetArtifactAttestations()
+}
+
 func TestApp_GetCreatedAt(tt *testing.T) {
 	var zeroValue Timestamp
 	a := &App{CreatedAt: &zeroValue}
@@ -10562,6 +10576,26 @@ func TestInstallationPermissions_GetOrganizationPackages(tt *testing.T) {
 	i.GetOrganizationPackages()
 }
 
+func TestInstallationPermissions_GetOrganizationPersonalAccessTokenRequests(tt *testing.T) {
+	var zeroValue string
+	i := &InstallationPermissions{OrganizationPersonalAccessTokenRequests: &zeroValue}
+	i.GetOrganizationPersonalAccessTokenRequests()
+	i = &InstallationPermissions{}
+	i.GetOrganizationPersonalAccessTokenRequests()
+	i = nil
+	i.GetOrganizationPersonalAccessTokenRequests()
+}
+
+func TestInstallationPermissions_GetOrganizationPersonalAccessTokens(tt *testing.T) {
+	var zeroValue string
+	i := &InstallationPermissions{OrganizationPersonalAccessTokens: &zeroValue}
+	i.GetOrganizationPersonalAccessTokens()
+	i = &InstallationPermissions{}
+	i.GetOrganizationPersonalAccessTokens()
+	i = nil
+	i.GetOrganizationPersonalAccessTokens()
+}
+
 func TestInstallationPermissions_GetOrganizationPlan(tt *testing.T) {
 	var zeroValue string
 	i := &InstallationPermissions{OrganizationPlan: &zeroValue}
diff --git a/github/meta_test.go b/github/meta_test.go
index 99cb0b02..836d9931 100644
--- a/github/meta_test.go
+++ b/github/meta_test.go
@@ -30,8 +30,23 @@ func TestAPIMeta_Marshal(t *testing.T) {
 		SSHKeys:                          []string{"k"},
 		API:                              []string{"a"},
 		Web:                              []string{"w"},
-		Domains: map[string][]string{
-			"example": {"example.com", "*.example.com"},
+		Domains: &APIMetaDomains{
+			Website: []string{
+				"*.github.com",
+				"*.github.dev",
+				"*.github.io",
+				"*.githubassets.com",
+				"*.githubusercontent.com",
+			},
+			ArtifactAttestations: &APIMetaArtifactAttestations{
+				TrustDomain: "",
+				Services: []string{
+					"*.actions.githubusercontent.com",
+					"tuf-repo.github.com",
+					"fulcio.githubapp.com",
+					"timestamp.githubapp.com",
+				},
+			},
 		},
 	}
 	want := `{
@@ -47,7 +62,7 @@ func TestAPIMeta_Marshal(t *testing.T) {
 		"ssh_keys":["k"],
 		"api":["a"],
 		"web":["w"],
-		"domains":{"example":["example.com","*.example.com"]}
+		"domains":{"website":["*.github.com","*.github.dev","*.github.io","*.githubassets.com","*.githubusercontent.com"],"artifact_attestations":{"trust_domain":"","services":["*.actions.githubusercontent.com","tuf-repo.github.com","fulcio.githubapp.com","timestamp.githubapp.com"]}}
 	}`
 
 	testJSONMarshal(t, a, want)
@@ -59,7 +74,7 @@ func TestMetaService_Get(t *testing.T) {
 
 	mux.HandleFunc("/meta", func(w http.ResponseWriter, r *http.Request) {
 		testMethod(t, r, "GET")
-		fmt.Fprint(w, `{"web":["w"],"api":["a"],"hooks":["h"], "git":["g"], "pages":["p"], "importer":["i"], "github_enterprise_importer": ["gei"], "actions":["a"], "dependabot":["d"], "verifiable_password_authentication": true, "domains":{"example":["example.com","*.example.com"]}}`)
+		fmt.Fprint(w, `{"web":["w"],"api":["a"],"hooks":["h"], "git":["g"], "pages":["p"], "importer":["i"], "github_enterprise_importer": ["gei"], "actions":["a"], "dependabot":["d"], "verifiable_password_authentication": true, "domains":{"website":["*.github.com","*.github.dev","*.github.io","*.githubassets.com","*.githubusercontent.com"],"artifact_attestations":{"trust_domain":"","services":["*.actions.githubusercontent.com","tuf-repo.github.com","fulcio.githubapp.com","timestamp.githubapp.com"]}}}`)
 	})
 
 	ctx := context.Background()
@@ -78,8 +93,23 @@ func TestMetaService_Get(t *testing.T) {
 		Dependabot:               []string{"d"},
 		API:                      []string{"a"},
 		Web:                      []string{"w"},
-		Domains: map[string][]string{
-			"example": {"example.com", "*.example.com"},
+		Domains: &APIMetaDomains{
+			Website: []string{
+				"*.github.com",
+				"*.github.dev",
+				"*.github.io",
+				"*.githubassets.com",
+				"*.githubusercontent.com",
+			},
+			ArtifactAttestations: &APIMetaArtifactAttestations{
+				TrustDomain: "",
+				Services: []string{
+					"*.actions.githubusercontent.com",
+					"tuf-repo.github.com",
+					"fulcio.githubapp.com",
+					"timestamp.githubapp.com",
+				},
+			},
 		},
 
 		VerifiablePasswordAuthentication: Bool(true),
diff --git a/github/repos_rules_test.go b/github/repos_rules_test.go
index c338e37e..92f7259d 100644
--- a/github/repos_rules_test.go
+++ b/github/repos_rules_test.go
@@ -224,8 +224,9 @@ func TestRepositoryRule_UnmarshalJSON(t *testing.T) {
 			wantErr: true,
 		},
 		"Valid required_status_checks params": {
-			data: `{"type":"required_status_checks","parameters":{"required_status_checks":[{"context":"test","integration_id":1}],"strict_required_status_checks_policy":true}}`,
+			data: `{"type":"required_status_checks","parameters":{"required_status_checks":[{"context":"test","integration_id":1}],"strict_required_status_checks_policy":true,"do_not_enforce_on_create":true}}`,
 			want: NewRequiredStatusChecksRule(&RequiredStatusChecksRuleParameters{
+				DoNotEnforceOnCreate: true,
 				RequiredStatusChecks: []RuleRequiredStatusChecks{
 					{
 						Context:       "test",
diff --git a/github/scim_test.go b/github/scim_test.go
index 9e527476..2ae4f194 100644
--- a/github/scim_test.go
+++ b/github/scim_test.go
@@ -127,7 +127,8 @@ func TestSCIMService_ProvisionAndInviteSCIMUser(t *testing.T) {
 
 	mux.HandleFunc("/scim/v2/organizations/o/Users", func(w http.ResponseWriter, r *http.Request) {
 		testMethod(t, r, "POST")
-		w.WriteHeader(http.StatusOK)
+		w.WriteHeader(http.StatusCreated)
+		fmt.Fprint(w, `{"id":"1234567890","userName":"userName"}`)
 	})
 
 	ctx := context.Background()
@@ -143,19 +144,31 @@ func TestSCIMService_ProvisionAndInviteSCIMUser(t *testing.T) {
 			},
 		},
 	}
-	_, err := client.SCIM.ProvisionAndInviteSCIMUser(ctx, "o", opts)
+	user, _, err := client.SCIM.ProvisionAndInviteSCIMUser(ctx, "o", opts)
 	if err != nil {
-		t.Errorf("SCIM.ListSCIMProvisionedIdentities returned error: %v", err)
+		t.Errorf("SCIM.ProvisionAndInviteSCIMUser returned error: %v", err)
+	}
+
+	want := &SCIMUserAttributes{
+		ID:       String("1234567890"),
+		UserName: "userName",
+	}
+	if !cmp.Equal(user, want) {
+		t.Errorf("SCIM.ProvisionAndInviteSCIMUser returned %+v, want %+v", user, want)
 	}
 
 	const methodName = "ProvisionAndInviteSCIMUser"
 	testBadOptions(t, methodName, func() (err error) {
-		_, err = client.SCIM.ProvisionAndInviteSCIMUser(ctx, "\n", opts)
+		_, _, err = client.SCIM.ProvisionAndInviteSCIMUser(ctx, "\n", opts)
 		return err
 	})
 
 	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
-		return client.SCIM.ProvisionAndInviteSCIMUser(ctx, "o", opts)
+		got, resp, err := client.SCIM.ProvisionAndInviteSCIMUser(ctx, "o", opts)
+		if got != nil {
+			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
+		}
+		return resp, err
 	})
 }
 
diff --git a/scrape/apps_test.go b/scrape/apps_test.go
index 2b88716b..331c021c 100644
--- a/scrape/apps_test.go
+++ b/scrape/apps_test.go
@@ -5,7 +5,7 @@ import (
 	"testing"
 
 	"github.com/google/go-cmp/cmp"
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 func Test_AppRestrictionsEnabled(t *testing.T) {
diff --git a/test/fields/fields.go b/test/fields/fields.go
index e0d292e4..7897b2bd 100644
--- a/test/fields/fields.go
+++ b/test/fields/fields.go
@@ -25,7 +25,7 @@ import (
 	"reflect"
 	"strings"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 var (
diff --git a/test/integration/activity_test.go b/test/integration/activity_test.go
index 24eabda8..434f7c84 100644
--- a/test/integration/activity_test.go
+++ b/test/integration/activity_test.go
@@ -12,7 +12,7 @@ import (
 	"context"
 	"testing"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 const (
diff --git a/test/integration/authorizations_test.go b/test/integration/authorizations_test.go
index 8ae59174..4dcf30a5 100644
--- a/test/integration/authorizations_test.go
+++ b/test/integration/authorizations_test.go
@@ -15,7 +15,7 @@ import (
 	"testing"
 	"time"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 const msgEnvMissing = "Skipping test because the required environment variable (%v) is not present."
diff --git a/test/integration/github_test.go b/test/integration/github_test.go
index db47c7a5..63277237 100644
--- a/test/integration/github_test.go
+++ b/test/integration/github_test.go
@@ -15,7 +15,7 @@ import (
 	"net/http"
 	"os"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 var (
diff --git a/test/integration/repos_test.go b/test/integration/repos_test.go
index 924a79b4..f94df279 100644
--- a/test/integration/repos_test.go
+++ b/test/integration/repos_test.go
@@ -15,7 +15,7 @@ import (
 	"testing"
 
 	"github.com/google/go-cmp/cmp"
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 func TestRepositories_CRUD(t *testing.T) {
diff --git a/test/integration/users_test.go b/test/integration/users_test.go
index 2bfabc5b..010a2dd5 100644
--- a/test/integration/users_test.go
+++ b/test/integration/users_test.go
@@ -14,7 +14,7 @@ import (
 	"math/rand"
 	"testing"
 
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 func TestUsers_Get(t *testing.T) {
diff --git a/tools/metadata/main_test.go b/tools/metadata/main_test.go
index a1bc295d..10a007e9 100644
--- a/tools/metadata/main_test.go
+++ b/tools/metadata/main_test.go
@@ -23,7 +23,7 @@ import (
 	"github.com/alecthomas/kong"
 	"github.com/getkin/kin-openapi/openapi3"
 	"github.com/google/go-cmp/cmp"
-	"github.com/google/go-github/v63/github"
+	"github.com/google/go-github/v64/github"
 )
 
 func TestUpdateGo(t *testing.T) {