Repository: google/go-github
Pull request #3506 (2025-03-10 10:36:22)

feat: Add automatic_copilot_code_review_enabled parameter to ruleset API
Fixes: #3505.

implemented the parameter as optional ~~, but it's based on supposition~~.
It's optional https://github.com/orgs/community/discussions/141896#discussioncomment-12489418

google-cla[bot]: Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this [failed invocation](https://github.com/google/go-github/pull/3506/checks?check_run_id=38481765962) of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.
github-advanced-security[bot]: This pull request sets up GitHub code scanning for this repository. Once the scans have completed and the checks have passed, the analysis results for this pull request branch will appear on [this overview](/google/go-github/security/code-scanning?query=pr%3A3506+is%3Aopen). Once you merge this pull request, the 'Security' tab will show more code scanning analysis results (for example, for the default branch). Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results. For more information about GitHub code scanning, check out [the documentation](https://docs.github.com/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning). 
codecov[bot]: ## [Codecov](https://app.codecov.io/gh/google/go-github/pull/3506?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=google) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 91.21%. Comparing base [(`56f5036`)](https://app.codecov.io/gh/google/go-github/commit/56f5036c4e778d1b3f84ff4eff716fd3c652f342?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=google) to head [(`fae98c7`)](https://app.codecov.io/gh/google/go-github/commit/fae98c73fde9fae90a1e482b014c6bde8a6d69a1?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=google).

<details><summary>Additional details and impacted files</summary>


```diff
@@           Coverage Diff           @@
##           master    #3506   +/-   ##
=======================================
  Coverage   91.21%   91.21%           
=======================================
  Files         182      182           
  Lines       15930    15930           
=======================================
  Hits        14531    14531           
  Misses       1225     1225           
  Partials      174      174           
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/google/go-github/pull/3506?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=google).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=google).

<details><summary>🚀 New features to boost your workflow: </summary>

- ❄ [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
</details>

Patch:
diff --git a/README.md b/README.md
index c7b9dcef..397a7a74 100644
--- a/README.md
+++ b/README.md
@@ -233,7 +233,7 @@ repos, _, err := client.Repositories.List(context.WithValue(ctx, github.SleepUnt
 ```
 
 You can use [gofri/go-github-ratelimit](https://github.com/gofri/go-github-ratelimit) to handle
-secondary rate limit sleep-and-retry for you.
+secondary rate limit sleep-and-retry for you, as well as primary rate limit abuse-prevention and callback triggering.
 
 Learn more about GitHub secondary rate limiting in
 ["About secondary rate limits"](https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api?apiVersion=2022-11-28#about-secondary-rate-limits).
@@ -347,6 +347,13 @@ for repo := range repos.All() {
 
 For complete usage of `enrichman/gh-iter`, see the full [package docs](https://github.com/enrichman/gh-iter).
 
+#### Middleware ####
+
+You can use [gofri/go-github-pagination](https://github.com/gofri/go-github-pagination) to handle
+pagination for you. It supports both sync and async modes, as well as customizations.  
+By default, the middleware automatically paginates through all pages, aggregates results, and returns them as an array.  
+See `example/ratelimit/main.go` for usage.
+
 ### Webhooks ###
 
 `go-github` provides structs for almost all [GitHub webhook events][] as well as functions to validate them and unmarshal JSON payloads from `http.Request` structs.
diff --git a/example/go.mod b/example/go.mod
index 27045fc9..34b1f2e4 100644
--- a/example/go.mod
+++ b/example/go.mod
@@ -1,15 +1,16 @@
 module github.com/google/go-github/v69/example
 
-go 1.22.0
+go 1.23.0
 
 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/gofri/go-github-pagination v1.0.0
+	github.com/gofri/go-github-ratelimit/v2 v2.0.2
 	github.com/google/go-github/v69 v69.2.0
-	github.com/sigstore/sigstore-go v0.5.1
-	golang.org/x/crypto v0.31.0
-	golang.org/x/term v0.27.0
+	github.com/sigstore/sigstore-go v0.6.1
+	golang.org/x/crypto v0.35.0
+	golang.org/x/term v0.29.0
 	google.golang.org/appengine v1.6.8
 )
 
@@ -22,7 +23,7 @@ require (
 	github.com/digitorus/timestamp v0.0.0-20231217203849-220c5c2851b7 // indirect
 	github.com/fsnotify/fsnotify v1.7.0 // indirect
 	github.com/go-chi/chi v4.1.2+incompatible // indirect
-	github.com/go-jose/go-jose/v4 v4.0.2 // indirect
+	github.com/go-jose/go-jose/v4 v4.0.5 // indirect
 	github.com/go-logr/logr v1.4.1 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/go-openapi/analysis v0.23.0 // indirect
@@ -45,6 +46,7 @@ require (
 	github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
 	github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
+	github.com/in-toto/attestation v1.1.0 // indirect
 	github.com/in-toto/in-toto-golang v0.9.0 // indirect
 	github.com/inconshreveable/mousetrap v1.1.0 // indirect
 	github.com/jedisct1/go-minisign v0.0.0-20211028175153-1c139d1cc84b // indirect
@@ -86,10 +88,10 @@ require (
 	go.uber.org/zap v1.27.0 // indirect
 	golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 // indirect
 	golang.org/x/mod v0.20.0 // indirect
-	golang.org/x/net v0.33.0 // indirect
-	golang.org/x/sync v0.10.0 // indirect
-	golang.org/x/sys v0.28.0 // indirect
-	golang.org/x/text v0.21.0 // indirect
+	golang.org/x/net v0.36.0 // indirect
+	golang.org/x/sync v0.11.0 // indirect
+	golang.org/x/sys v0.30.0 // indirect
+	golang.org/x/text v0.22.0 // indirect
 	google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect
 	google.golang.org/protobuf v1.34.2 // indirect
 	gopkg.in/ini.v1 v1.67.0 // indirect
diff --git a/example/go.sum b/example/go.sum
index d99bb0d3..7a39a6ed 100644
--- a/example/go.sum
+++ b/example/go.sum
@@ -101,8 +101,8 @@ github.com/go-chi/chi v4.1.2+incompatible h1:fGFk2Gmi/YKXk0OmGfBh0WgmN3XB8lVnEyN
 github.com/go-chi/chi v4.1.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
 github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k=
 github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ=
-github.com/go-jose/go-jose/v4 v4.0.2 h1:R3l3kkBds16bO7ZFAEEcofK0MkrAJt3jlJznWZG0nvk=
-github.com/go-jose/go-jose/v4 v4.0.2/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY=
+github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE=
+github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
 github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -134,8 +134,10 @@ github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U=
 github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
 github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
 github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
-github.com/gofri/go-github-ratelimit v1.0.3 h1:Ocs2jaYokZDzgvqaajX+g04dqFyVqL0JQzoO7d2wmlk=
-github.com/gofri/go-github-ratelimit v1.0.3/go.mod h1:OnCi5gV+hAG/LMR7llGhU7yHt44se9sYgKPnafoL7RY=
+github.com/gofri/go-github-pagination v1.0.0 h1:nnCi+1xT5ybqY/plctISgiQPWZOtfSciVQlbx/hM/Yw=
+github.com/gofri/go-github-pagination v1.0.0/go.mod h1:Qij55Fb4fNPjam3SB+8cLnqp4pgR8RGMyIspYXcyHX0=
+github.com/gofri/go-github-ratelimit/v2 v2.0.2 h1:gS8wAS1jTmlWGdTjAM7KIpsLjwY1S0S/gKK5hthfSXM=
+github.com/gofri/go-github-ratelimit/v2 v2.0.2/go.mod h1:YBQt4gTbdcbMjJFT05YFEaECwH78P5b0IwrnbLiHGdE=
 github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
 github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo=
 github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
@@ -203,6 +205,8 @@ github.com/hashicorp/vault/api v1.12.2 h1:7YkCTE5Ni90TcmYHDBExdt4WGJxhpzaHqR6uGb
 github.com/hashicorp/vault/api v1.12.2/go.mod h1:LSGf1NGT1BnvFFnKVtnvcaLBM2Lz+gJdpL6HUYed8KE=
 github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef h1:A9HsByNhogrvm9cWb28sjiS3i7tcKCkflWFEkHfuAgM=
 github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs=
+github.com/in-toto/attestation v1.1.0 h1:oRWzfmZPDSctChD0VaQV7MJrywKOzyNrtpENQFq//2Q=
+github.com/in-toto/attestation v1.1.0/go.mod h1:DB59ytd3z7cIHgXxwpSX2SABrU6WJUKg/grpdgHVgVs=
 github.com/in-toto/in-toto-golang v0.9.0 h1:tHny7ac4KgtsfrG6ybU8gVOZux2H8jN05AXJ9EBM1XU=
 github.com/in-toto/in-toto-golang v0.9.0/go.mod h1:xsBVrVsHNsB61++S6Dy2vWosKhuA3lUTQd+eF9HdeMo=
 github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
@@ -285,8 +289,8 @@ github.com/sigstore/rekor v1.3.6 h1:QvpMMJVWAp69a3CHzdrLelqEqpTM3ByQRt5B5Kspbi8=
 github.com/sigstore/rekor v1.3.6/go.mod h1:JDTSNNMdQ/PxdsS49DJkJ+pRJCO/83nbR5p3aZQteXc=
 github.com/sigstore/sigstore v1.8.11 h1:tEqeQqbT+awtM87ec9KEeSUxT/AFvJNawneYJyAkFrQ=
 github.com/sigstore/sigstore v1.8.11/go.mod h1:fdrFQosxCQ4wTL5H1NrZcQkqQ72AQbPjtpcL2QOGKV0=
-github.com/sigstore/sigstore-go v0.5.1 h1:5IhKvtjlQBeLnjKkzMELNG4tIBf+xXQkDzhLV77+/8Y=
-github.com/sigstore/sigstore-go v0.5.1/go.mod h1:TuOfV7THHqiDaUHuJ5+QN23RP/YoKmsbwJpY+aaYPN0=
+github.com/sigstore/sigstore-go v0.6.1 h1:tGkkv1oDIER+QYU5MrjqlttQOVDWfSkmYwMqkJhB/cg=
+github.com/sigstore/sigstore-go v0.6.1/go.mod h1:Xe5GHmUeACRFbomUWzVkf/xYCn8xVifb9DgqJrV2dIw=
 github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.3 h1:LTfPadUAo+PDRUbbdqbeSl2OuoFQwUFTnJ4stu+nwWw=
 github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.3/go.mod h1:QV/Lxlxm0POyhfyBtIbTWxNeF18clMlkkyL9mu45y18=
 github.com/sigstore/sigstore/pkg/signature/kms/azure v1.8.3 h1:xgbPRCr2npmmsuVVteJqi/ERw9+I13Wou7kq0Yk4D8g=
@@ -316,8 +320,8 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
+github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
 github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
 github.com/theupdateframework/go-tuf v0.7.0 h1:CqbQFrWo1ae3/I0UCblSbczevCCbS31Qvs5LdxRWqRI=
@@ -360,8 +364,8 @@ golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5y
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
 golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
-golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
-golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
+golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
+golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
 golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 h1:hNQpMuAJe5CtcUqCXaWga3FHu+kQvCqcsoVaQgSV60o=
 golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
@@ -375,16 +379,16 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
 golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
 golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
 golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
+golang.org/x/net v0.36.0 h1:vWF2fRbw4qslQsQzgFqZff+BItCvGFQqKzKIzx1rmoA=
+golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
 golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
-golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
+golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -394,15 +398,15 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
+golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
 golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
 golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
-golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
-golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
+golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
+golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -411,8 +415,8 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
 golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
+golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
+golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
 golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
 golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
diff --git a/example/newreposecretwithlibsodium/go.mod b/example/newreposecretwithlibsodium/go.mod
index 9c260714..8e5afd9c 100644
--- a/example/newreposecretwithlibsodium/go.mod
+++ b/example/newreposecretwithlibsodium/go.mod
@@ -1,6 +1,6 @@
 module newreposecretwithlibsodium
 
-go 1.22.0
+go 1.23.0
 
 require (
 	github.com/GoKillers/libsodium-go v0.0.0-20171022220152-dd733721c3cb
diff --git a/example/ratelimit/main.go b/example/ratelimit/main.go
index 32596bc3..70c7424c 100644
--- a/example/ratelimit/main.go
+++ b/example/ratelimit/main.go
@@ -3,16 +3,20 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// The ratelimit command demonstrates using the github_ratelimit.SecondaryRateLimitWaiter.
+// The ratelimit command demonstrates using the github_ratelimit as well as github_pagination.
 // By using the waiter, the client automatically sleeps and retry requests
 // when it hits secondary rate limits.
+// It also prevents the client from abusing the API in case of a primary rate limit.
 package main
 
 import (
 	"context"
 	"fmt"
 
-	"github.com/gofri/go-github-ratelimit/github_ratelimit"
+	"github.com/gofri/go-github-pagination/githubpagination"
+	"github.com/gofri/go-github-ratelimit/v2/github_ratelimit"
+	"github.com/gofri/go-github-ratelimit/v2/github_ratelimit/github_primary_ratelimit"
+	"github.com/gofri/go-github-ratelimit/v2/github_ratelimit/github_secondary_ratelimit"
 	"github.com/google/go-github/v69/github"
 )
 
@@ -21,22 +25,28 @@ func main() {
 	fmt.Print("Enter GitHub username: ")
 	fmt.Scanf("%s", &username)
 
-	rateLimiter, err := github_ratelimit.NewRateLimitWaiterClient(nil)
-	if err != nil {
-		fmt.Printf("Error: %v\n", err)
-		return
-	}
+	rateLimiter := github_ratelimit.New(nil,
+		github_primary_ratelimit.WithLimitDetectedCallback(func(ctx *github_primary_ratelimit.CallbackContext) {
+			fmt.Printf("Primary rate limit detected: category %s, reset time: %v\n", ctx.Category, ctx.ResetTime)
+		}),
+		github_secondary_ratelimit.WithLimitDetectedCallback(func(ctx *github_secondary_ratelimit.CallbackContext) {
+			fmt.Printf("Secondary rate limit detected: reset time: %v, total sleep time: %v\n", ctx.ResetTime, ctx.TotalSleepTime)
+		}),
+	)
 
-	client := github.NewClient(rateLimiter)
+	paginator := githubpagination.NewClient(rateLimiter,
+		githubpagination.WithPerPage(100), // default to 100 results per page
+	)
+	client := github.NewClient(paginator)
 
 	// arbitrary usage of the client
-	organizations, _, err := client.Organizations.List(context.Background(), username, nil)
+	repos, _, err := client.Repositories.ListByUser(context.Background(), username, nil)
 	if err != nil {
 		fmt.Printf("Error: %v\n", err)
 		return
 	}
 
-	for i, organization := range organizations {
-		fmt.Printf("%v. %v\n", i+1, organization.GetLogin())
+	for i, repo := range repos {
+		fmt.Printf("%v. %v\n", i+1, repo.GetName())
 	}
 }
diff --git a/example/verifyartifact/main.go b/example/verifyartifact/main.go
index 1c6502e7..d3845bd2 100644
--- a/example/verifyartifact/main.go
+++ b/example/verifyartifact/main.go
@@ -102,7 +102,7 @@ func main() {
 		log.Fatal(err)
 	}
 
-	var b *bundle.ProtobufBundle
+	var b *bundle.Bundle
 	for _, attestation := range attestations.Attestations {
 		if err := json.Unmarshal(attestation.Bundle, &b); err != nil {
 			log.Fatal(err)
@@ -180,7 +180,7 @@ func getPolicyBuilder() (*verify.PolicyBuilder, error) {
 	return &pb, nil
 }
 
-func runVerification(sev *verify.SignedEntityVerifier, pb *verify.PolicyBuilder, b *bundle.ProtobufBundle) error {
+func runVerification(sev *verify.SignedEntityVerifier, pb *verify.PolicyBuilder, b *bundle.Bundle) error {
 	res, err := sev.Verify(b, *pb)
 	if err != nil {
 		return err
diff --git a/github/enterprise_network_configurations.go b/github/enterprise_network_configurations.go
index a5af390a..a6a690d7 100644
--- a/github/enterprise_network_configurations.go
+++ b/github/enterprise_network_configurations.go
@@ -10,51 +10,12 @@ import (
 	"fmt"
 )
 
-// ComputeService represents a hosted compute service the network configuration supports.
-type ComputeService string
-
-const (
-	ComputeServiceNone    ComputeService = "none"
-	ComputeServiceActions ComputeService = "actions"
-)
-
-// EnterpriseNetworkConfiguration represents a hosted compute network configuration.
-type EnterpriseNetworkConfiguration struct {
-	ID                 *string         `json:"id,omitempty"`
-	Name               *string         `json:"name,omitempty"`
-	ComputeService     *ComputeService `json:"compute_service,omitempty"`
-	NetworkSettingsIDs []string        `json:"network_settings_ids,omitempty"`
-	CreatedOn          *Timestamp      `json:"created_on,omitempty"`
-}
-
-// EnterpriseNetworkConfigurations represents a hosted compute network configurations.
-type EnterpriseNetworkConfigurations struct {
-	TotalCount            *int64                            `json:"total_count,omitempty"`
-	NetworkConfigurations []*EnterpriseNetworkConfiguration `json:"network_configurations,omitempty"`
-}
-
-// EnterpriseNetworkSettingsResource represents a hosted compute network settings resource.
-type EnterpriseNetworkSettingsResource struct {
-	ID                     *string `json:"id,omitempty"`
-	Name                   *string `json:"name,omitempty"`
-	NetworkConfigurationID *string `json:"network_configuration_id,omitempty"`
-	SubnetID               *string `json:"subnet_id,omitempty"`
-	Region                 *string `json:"region,omitempty"`
-}
-
-// EnterpriseNetworkConfigurationRequest represents a request to create or update a network configuration for an enterprise.
-type EnterpriseNetworkConfigurationRequest struct {
-	Name               *string         `json:"name,omitempty"`
-	ComputeService     *ComputeService `json:"compute_service,omitempty"`
-	NetworkSettingsIDs []string        `json:"network_settings_ids,omitempty"`
-}
-
 // ListEnterpriseNetworkConfigurations lists all hosted compute network configurations configured in an enterprise.
 //
 // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/network-configurations#list-hosted-compute-network-configurations-for-an-enterprise
 //
 //meta:operation GET /enterprises/{enterprise}/network-configurations
-func (s *EnterpriseService) ListEnterpriseNetworkConfigurations(ctx context.Context, enterprise string, opts *ListOptions) (*EnterpriseNetworkConfigurations, *Response, error) {
+func (s *EnterpriseService) ListEnterpriseNetworkConfigurations(ctx context.Context, enterprise string, opts *ListOptions) (*NetworkConfigurations, *Response, error) {
 	u := fmt.Sprintf("enterprises/%v/network-configurations", enterprise)
 	u, err := addOptions(u, opts)
 	if err != nil {
@@ -66,7 +27,7 @@ func (s *EnterpriseService) ListEnterpriseNetworkConfigurations(ctx context.Cont
 		return nil, nil, err
 	}
 
-	networks := &EnterpriseNetworkConfigurations{}
+	networks := &NetworkConfigurations{}
 	resp, err := s.client.Do(ctx, req, networks)
 	if err != nil {
 		return nil, resp, err
@@ -79,14 +40,18 @@ func (s *EnterpriseService) ListEnterpriseNetworkConfigurations(ctx context.Cont
 // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/network-configurations#create-a-hosted-compute-network-configuration-for-an-enterprise
 //
 //meta:operation POST /enterprises/{enterprise}/network-configurations
-func (s *EnterpriseService) CreateEnterpriseNetworkConfiguration(ctx context.Context, enterprise string, createReq EnterpriseNetworkConfigurationRequest) (*EnterpriseNetworkConfiguration, *Response, error) {
+func (s *EnterpriseService) CreateEnterpriseNetworkConfiguration(ctx context.Context, enterprise string, createReq NetworkConfigurationRequest) (*NetworkConfiguration, *Response, error) {
+	if err := validateNetworkConfigurationRequest(createReq); err != nil {
+		return nil, nil, fmt.Errorf("validation failed: %w", err)
+	}
+
 	u := fmt.Sprintf("enterprises/%v/network-configurations", enterprise)
 	req, err := s.client.NewRequest("POST", u, createReq)
 	if err != nil {
 		return nil, nil, err
 	}
 
-	network := &EnterpriseNetworkConfiguration{}
+	network := &NetworkConfiguration{}
 	resp, err := s.client.Do(ctx, req, network)
 	if err != nil {
 		return nil, resp, err
@@ -100,14 +65,14 @@ func (s *EnterpriseService) CreateEnterpriseNetworkConfiguration(ctx context.Con
 // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/network-configurations#get-a-hosted-compute-network-configuration-for-an-enterprise
 //
 //meta:operation GET /enterprises/{enterprise}/network-configurations/{network_configuration_id}
-func (s *EnterpriseService) GetEnterpriseNetworkConfiguration(ctx context.Context, enterprise, networkID string) (*EnterpriseNetworkConfiguration, *Response, error) {
+func (s *EnterpriseService) GetEnterpriseNetworkConfiguration(ctx context.Context, enterprise, networkID string) (*NetworkConfiguration, *Response, error) {
 	u := fmt.Sprintf("enterprises/%v/network-configurations/%v", enterprise, networkID)
 	req, err := s.client.NewRequest("GET", u, nil)
 	if err != nil {
 		return nil, nil, err
 	}
 
-	network := &EnterpriseNetworkConfiguration{}
+	network := &NetworkConfiguration{}
 	resp, err := s.client.Do(ctx, req, network)
 	if err != nil {
 		return nil, resp, err
@@ -120,14 +85,18 @@ func (s *EnterpriseService) GetEnterpriseNetworkConfiguration(ctx context.Contex
 // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/network-configurations#update-a-hosted-compute-network-configuration-for-an-enterprise
 //
 //meta:operation PATCH /enterprises/{enterprise}/network-configurations/{network_configuration_id}
-func (s *EnterpriseService) UpdateEnterpriseNetworkConfiguration(ctx context.Context, enterprise, networkID string, updateReq EnterpriseNetworkConfigurationRequest) (*EnterpriseNetworkConfiguration, *Response, error) {
+func (s *EnterpriseService) UpdateEnterpriseNetworkConfiguration(ctx context.Context, enterprise, networkID string, updateReq NetworkConfigurationRequest) (*NetworkConfiguration, *Response, error) {
+	if err := validateNetworkConfigurationRequest(updateReq); err != nil {
+		return nil, nil, fmt.Errorf("validation failed: %w", err)
+	}
+
 	u := fmt.Sprintf("enterprises/%v/network-configurations/%v", enterprise, networkID)
 	req, err := s.client.NewRequest("PATCH", u, updateReq)
 	if err != nil {
 		return nil, nil, err
 	}
 
-	network := &EnterpriseNetworkConfiguration{}
+	network := &NetworkConfiguration{}
 	resp, err := s.client.Do(ctx, req, network)
 	if err != nil {
 		return nil, resp, err
@@ -154,14 +123,14 @@ func (s *EnterpriseService) DeleteEnterpriseNetworkConfiguration(ctx context.Con
 // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/network-configurations#get-a-hosted-compute-network-settings-resource-for-an-enterprise
 //
 //meta:operation GET /enterprises/{enterprise}/network-settings/{network_settings_id}
-func (s *EnterpriseService) GetEnterpriseNetworkSettingsResource(ctx context.Context, enterprise, networkID string) (*EnterpriseNetworkSettingsResource, *Response, error) {
+func (s *EnterpriseService) GetEnterpriseNetworkSettingsResource(ctx context.Context, enterprise, networkID string) (*NetworkSettingsResource, *Response, error) {
 	u := fmt.Sprintf("enterprises/%v/network-settings/%v", enterprise, networkID)
 	req, err := s.client.NewRequest("GET", u, nil)
 	if err != nil {
 		return nil, nil, err
 	}
 
-	resource := &EnterpriseNetworkSettingsResource{}
+	resource := &NetworkSettingsResource{}
 	resp, err := s.client.Do(ctx, req, resource)
 	if err != nil {
 		return nil, resp, err
diff --git a/github/event_types.go b/github/event_types.go
index 0df3b30c..6a6caf19 100644
--- a/github/event_types.go
+++ b/github/event_types.go
@@ -858,8 +858,10 @@ type MergeGroup struct {
 //
 // GitHub API docs: https://docs.github.com/developers/webhooks-and-events/webhook-events-and-payloads#merge_group
 type MergeGroupEvent struct {
-	// The action that was performed. Currently, can only be checks_requested.
+	// The action that was performed. Possible values are: "checks_requested", "destroyed".
 	Action *string `json:"action,omitempty"`
+	// Reason is populated when the action is "destroyed". Possible values: "merged", "invalidated", "dequeued".
+	Reason *string `json:"reason,omitempty"`
 	// The merge group.
 	MergeGroup *MergeGroup `json:"merge_group,omitempty"`
 
diff --git a/github/gen-accessors.go b/github/gen-accessors.go
index 261b945e..66450fb7 100644
--- a/github/gen-accessors.go
+++ b/github/gen-accessors.go
@@ -45,6 +45,8 @@ var (
 		"ErrorResponse.GetResponse":       true,
 		"RateLimitError.GetResponse":      true,
 		"AbuseRateLimitError.GetResponse": true,
+		"PackageVersion.GetBody":          true,
+		"PackageVersion.GetMetadata":      true,
 	}
 	// skipStructs lists structs to skip.
 	skipStructs = map[string]bool{
diff --git a/github/github-accessors.go b/github/github-accessors.go
index e2a16527..ec029df2 100644
--- a/github/github-accessors.go
+++ b/github/github-accessors.go
@@ -8606,102 +8606,6 @@ func (e *Enterprise) GetWebsiteURL() string {
 	return *e.WebsiteURL
 }
 
-// GetComputeService returns the ComputeService field.
-func (e *EnterpriseNetworkConfiguration) GetComputeService() *ComputeService {
-	if e == nil {
-		return nil
-	}
-	return e.ComputeService
-}
-
-// GetCreatedOn returns the CreatedOn field if it's non-nil, zero value otherwise.
-func (e *EnterpriseNetworkConfiguration) GetCreatedOn() Timestamp {
-	if e == nil || e.CreatedOn == nil {
-		return Timestamp{}
-	}
-	return *e.CreatedOn
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (e *EnterpriseNetworkConfiguration) GetID() string {
-	if e == nil || e.ID == nil {
-		return ""
-	}
-	return *e.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (e *EnterpriseNetworkConfiguration) GetName() string {
-	if e == nil || e.Name == nil {
-		return ""
-	}
-	return *e.Name
-}
-
-// GetComputeService returns the ComputeService field.
-func (e *EnterpriseNetworkConfigurationRequest) GetComputeService() *ComputeService {
-	if e == nil {
-		return nil
-	}
-	return e.ComputeService
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (e *EnterpriseNetworkConfigurationRequest) GetName() string {
-	if e == nil || e.Name == nil {
-		return ""
-	}
-	return *e.Name
-}
-
-// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
-func (e *EnterpriseNetworkConfigurations) GetTotalCount() int64 {
-	if e == nil || e.TotalCount == nil {
-		return 0
-	}
-	return *e.TotalCount
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (e *EnterpriseNetworkSettingsResource) GetID() string {
-	if e == nil || e.ID == nil {
-		return ""
-	}
-	return *e.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (e *EnterpriseNetworkSettingsResource) GetName() string {
-	if e == nil || e.Name == nil {
-		return ""
-	}
-	return *e.Name
-}
-
-// GetNetworkConfigurationID returns the NetworkConfigurationID field if it's non-nil, zero value otherwise.
-func (e *EnterpriseNetworkSettingsResource) GetNetworkConfigurationID() string {
-	if e == nil || e.NetworkConfigurationID == nil {
-		return ""
-	}
-	return *e.NetworkConfigurationID
-}
-
-// GetRegion returns the Region field if it's non-nil, zero value otherwise.
-func (e *EnterpriseNetworkSettingsResource) GetRegion() string {
-	if e == nil || e.Region == nil {
-		return ""
-	}
-	return *e.Region
-}
-
-// GetSubnetID returns the SubnetID field if it's non-nil, zero value otherwise.
-func (e *EnterpriseNetworkSettingsResource) GetSubnetID() string {
-	if e == nil || e.SubnetID == nil {
-		return ""
-	}
-	return *e.SubnetID
-}
-
 // GetAllowsPublicRepositories returns the AllowsPublicRepositories field if it's non-nil, zero value otherwise.
 func (e *EnterpriseRunnerGroup) GetAllowsPublicRepositories() bool {
 	if e == nil || e.AllowsPublicRepositories == nil {
@@ -14334,6 +14238,14 @@ func (m *MergeGroupEvent) GetOrg() *Organization {
 	return m.Org
 }
 
+// GetReason returns the Reason field if it's non-nil, zero value otherwise.
+func (m *MergeGroupEvent) GetReason() string {
+	if m == nil || m.Reason == nil {
+		return ""
+	}
+	return *m.Reason
+}
+
 // GetRepo returns the Repo field.
 func (m *MergeGroupEvent) GetRepo() *Repository {
 	if m == nil {
@@ -14806,6 +14718,102 @@ func (m *MostRecentInstance) GetState() string {
 	return *m.State
 }
 
+// GetComputeService returns the ComputeService field.
+func (n *NetworkConfiguration) GetComputeService() *ComputeService {
+	if n == nil {
+		return nil
+	}
+	return n.ComputeService
+}
+
+// GetCreatedOn returns the CreatedOn field if it's non-nil, zero value otherwise.
+func (n *NetworkConfiguration) GetCreatedOn() Timestamp {
+	if n == nil || n.CreatedOn == nil {
+		return Timestamp{}
+	}
+	return *n.CreatedOn
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (n *NetworkConfiguration) GetID() string {
+	if n == nil || n.ID == nil {
+		return ""
+	}
+	return *n.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (n *NetworkConfiguration) GetName() string {
+	if n == nil || n.Name == nil {
+		return ""
+	}
+	return *n.Name
+}
+
+// GetComputeService returns the ComputeService field.
+func (n *NetworkConfigurationRequest) GetComputeService() *ComputeService {
+	if n == nil {
+		return nil
+	}
+	return n.ComputeService
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (n *NetworkConfigurationRequest) GetName() string {
+	if n == nil || n.Name == nil {
+		return ""
+	}
+	return *n.Name
+}
+
+// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
+func (n *NetworkConfigurations) GetTotalCount() int64 {
+	if n == nil || n.TotalCount == nil {
+		return 0
+	}
+	return *n.TotalCount
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (n *NetworkSettingsResource) GetID() string {
+	if n == nil || n.ID == nil {
+		return ""
+	}
+	return *n.ID
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (n *NetworkSettingsResource) GetName() string {
+	if n == nil || n.Name == nil {
+		return ""
+	}
+	return *n.Name
+}
+
+// GetNetworkConfigurationID returns the NetworkConfigurationID field if it's non-nil, zero value otherwise.
+func (n *NetworkSettingsResource) GetNetworkConfigurationID() string {
+	if n == nil || n.NetworkConfigurationID == nil {
+		return ""
+	}
+	return *n.NetworkConfigurationID
+}
+
+// GetRegion returns the Region field if it's non-nil, zero value otherwise.
+func (n *NetworkSettingsResource) GetRegion() string {
+	if n == nil || n.Region == nil {
+		return ""
+	}
+	return *n.Region
+}
+
+// GetSubnetID returns the SubnetID field if it's non-nil, zero value otherwise.
+func (n *NetworkSettingsResource) GetSubnetID() string {
+	if n == nil || n.SubnetID == nil {
+		return ""
+	}
+	return *n.SubnetID
+}
+
 // GetBase returns the Base field if it's non-nil, zero value otherwise.
 func (n *NewPullRequest) GetBase() string {
 	if n == nil || n.Base == nil {
@@ -15806,6 +15814,22 @@ func (p *Package) GetCreatedAt() Timestamp {
 	return *p.CreatedAt
 }
 
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (p *Package) GetDescription() string {
+	if p == nil || p.Description == nil {
+		return ""
+	}
+	return *p.Description
+}
+
+// GetEcosystem returns the Ecosystem field if it's non-nil, zero value otherwise.
+func (p *Package) GetEcosystem() string {
+	if p == nil || p.Ecosystem == nil {
+		return ""
+	}
+	return *p.Ecosystem
+}
+
 // GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
 func (p *Package) GetHTMLURL() string {
 	if p == nil || p.HTMLURL == nil {
@@ -15830,6 +15854,14 @@ func (p *Package) GetName() string {
 	return *p.Name
 }
 
+// GetNamespace returns the Namespace field if it's non-nil, zero value otherwise.
+func (p *Package) GetNamespace() string {
+	if p == nil || p.Namespace == nil {
+		return ""
+	}
+	return *p.Namespace
+}
+
 // GetOwner returns the Owner field.
 func (p *Package) GetOwner() *User {
 	if p == nil {
@@ -15862,14 +15894,6 @@ func (p *Package) GetRegistry() *PackageRegistry {
 	return p.Registry
 }
 
-// GetRepository returns the Repository field.
-func (p *Package) GetRepository() *Repository {
-	if p == nil {
-		return nil
-	}
-	return p.Repository
-}
-
 // GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
 func (p *Package) GetUpdatedAt() Timestamp {
 	if p == nil || p.UpdatedAt == nil {
@@ -15950,6 +15974,46 @@ func (p *PackageEvent) GetSender() *User {
 	return p.Sender
 }
 
+// GetLabels returns the Labels map if it's non-nil, an empty map otherwise.
+func (p *PackageEventContainerMetadata) GetLabels() map[string]any {
+	if p == nil || p.Labels == nil {
+		return map[string]any{}
+	}
+	return p.Labels
+}
+
+// GetManifest returns the Manifest map if it's non-nil, an empty map otherwise.
+func (p *PackageEventContainerMetadata) GetManifest() map[string]any {
+	if p == nil || p.Manifest == nil {
+		return map[string]any{}
+	}
+	return p.Manifest
+}
+
+// GetTag returns the Tag field.
+func (p *PackageEventContainerMetadata) GetTag() *PackageEventContainerMetadataTag {
+	if p == nil {
+		return nil
+	}
+	return p.Tag
+}
+
+// GetDigest returns the Digest field if it's non-nil, zero value otherwise.
+func (p *PackageEventContainerMetadataTag) GetDigest() string {
+	if p == nil || p.Digest == nil {
+		return ""
+	}
+	return *p.Digest
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *PackageEventContainerMetadataTag) GetName() string {
+	if p == nil || p.Name == nil {
+		return ""
+	}
+	return *p.Name
+}
+
 // GetAuthor returns the Author field.
 func (p *PackageFile) GetAuthor() *User {
 	if p == nil {
@@ -16086,6 +16150,262 @@ func (p *PackageMetadata) GetPackageType() string {
 	return *p.PackageType
 }
 
+// GetAuthor returns the Author map if it's non-nil, an empty map otherwise.
+func (p *PackageNPMMetadata) GetAuthor() map[string]string {
+	if p == nil || p.Author == nil {
+		return map[string]string{}
+	}
+	return p.Author
+}
+
+// GetBin returns the Bin map if it's non-nil, an empty map otherwise.
+func (p *PackageNPMMetadata) GetBin() map[string]any {
+	if p == nil || p.Bin == nil {
+		return map[string]any{}
+	}
+	return p.Bin
+}
+
+// GetBugs returns the Bugs map if it's non-nil, an empty map otherwise.
+func (p *PackageNPMMetadata) GetBugs() map[string]string {
+	if p == nil || p.Bugs == nil {
+		return map[string]string{}
+	}
+	return p.Bugs
+}
+
+// GetCommitOID returns the CommitOID field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetCommitOID() string {
+	if p == nil || p.CommitOID == nil {
+		return ""
+	}
+	return *p.CommitOID
+}
+
+// GetDeletedByID returns the DeletedByID field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetDeletedByID() int64 {
+	if p == nil || p.DeletedByID == nil {
+		return 0
+	}
+	return *p.DeletedByID
+}
+
+// GetDependencies returns the Dependencies map if it's non-nil, an empty map otherwise.
+func (p *PackageNPMMetadata) GetDependencies() map[string]string {
+	if p == nil || p.Dependencies == nil {
+		return map[string]string{}
+	}
+	return p.Dependencies
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetDescription() string {
+	if p == nil || p.Description == nil {
+		return ""
+	}
+	return *p.Description
+}
+
+// GetDevDependencies returns the DevDependencies map if it's non-nil, an empty map otherwise.
+func (p *PackageNPMMetadata) GetDevDependencies() map[string]string {
+	if p == nil || p.DevDependencies == nil {
+		return map[string]string{}
+	}
+	return p.DevDependencies
+}
+
+// GetDirectories returns the Directories map if it's non-nil, an empty map otherwise.
+func (p *PackageNPMMetadata) GetDirectories() map[string]string {
+	if p == nil || p.Directories == nil {
+		return map[string]string{}
+	}
+	return p.Directories
+}
+
+// GetDist returns the Dist map if it's non-nil, an empty map otherwise.
+func (p *PackageNPMMetadata) GetDist() map[string]string {
+	if p == nil || p.Dist == nil {
+		return map[string]string{}
+	}
+	return p.Dist
+}
+
+// GetEngines returns the Engines map if it's non-nil, an empty map otherwise.
+func (p *PackageNPMMetadata) GetEngines() map[string]string {
+	if p == nil || p.Engines == nil {
+		return map[string]string{}
+	}
+	return p.Engines
+}
+
+// GetGitHead returns the GitHead field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetGitHead() string {
+	if p == nil || p.GitHead == nil {
+		return ""
+	}
+	return *p.GitHead
+}
+
+// GetHasShrinkwrap returns the HasShrinkwrap field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetHasShrinkwrap() bool {
+	if p == nil || p.HasShrinkwrap == nil {
+		return false
+	}
+	return *p.HasShrinkwrap
+}
+
+// GetHomepage returns the Homepage field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetHomepage() string {
+	if p == nil || p.Homepage == nil {
+		return ""
+	}
+	return *p.Homepage
+}
+
+// GetID returns the ID field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetID() string {
+	if p == nil || p.ID == nil {
+		return ""
+	}
+	return *p.ID
+}
+
+// GetInstallationCommand returns the InstallationCommand field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetInstallationCommand() string {
+	if p == nil || p.InstallationCommand == nil {
+		return ""
+	}
+	return *p.InstallationCommand
+}
+
+// GetLicense returns the License field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetLicense() string {
+	if p == nil || p.License == nil {
+		return ""
+	}
+	return *p.License
+}
+
+// GetMain returns the Main field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetMain() string {
+	if p == nil || p.Main == nil {
+		return ""
+	}
+	return *p.Main
+}
+
+// GetMan returns the Man map if it's non-nil, an empty map otherwise.
+func (p *PackageNPMMetadata) GetMan() map[string]any {
+	if p == nil || p.Man == nil {
+		return map[string]any{}
+	}
+	return p.Man
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetName() string {
+	if p == nil || p.Name == nil {
+		return ""
+	}
+	return *p.Name
+}
+
+// GetNodeVersion returns the NodeVersion field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetNodeVersion() string {
+	if p == nil || p.NodeVersion == nil {
+		return ""
+	}
+	return *p.NodeVersion
+}
+
+// GetNPMUser returns the NPMUser field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetNPMUser() string {
+	if p == nil || p.NPMUser == nil {
+		return ""
+	}
+	return *p.NPMUser
+}
+
+// GetNPMVersion returns the NPMVersion field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetNPMVersion() string {
+	if p == nil || p.NPMVersion == nil {
+		return ""
+	}
+	return *p.NPMVersion
+}
+
+// GetOptionalDependencies returns the OptionalDependencies map if it's non-nil, an empty map otherwise.
+func (p *PackageNPMMetadata) GetOptionalDependencies() map[string]string {
+	if p == nil || p.OptionalDependencies == nil {
+		return map[string]string{}
+	}
+	return p.OptionalDependencies
+}
+
+// GetPeerDependencies returns the PeerDependencies map if it's non-nil, an empty map otherwise.
+func (p *PackageNPMMetadata) GetPeerDependencies() map[string]string {
+	if p == nil || p.PeerDependencies == nil {
+		return map[string]string{}
+	}
+	return p.PeerDependencies
+}
+
+// GetPublishedViaActions returns the PublishedViaActions field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetPublishedViaActions() bool {
+	if p == nil || p.PublishedViaActions == nil {
+		return false
+	}
+	return *p.PublishedViaActions
+}
+
+// GetReadme returns the Readme field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetReadme() string {
+	if p == nil || p.Readme == nil {
+		return ""
+	}
+	return *p.Readme
+}
+
+// GetReleaseID returns the ReleaseID field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetReleaseID() int64 {
+	if p == nil || p.ReleaseID == nil {
+		return 0
+	}
+	return *p.ReleaseID
+}
+
+// GetRepository returns the Repository map if it's non-nil, an empty map otherwise.
+func (p *PackageNPMMetadata) GetRepository() map[string]string {
+	if p == nil || p.Repository == nil {
+		return map[string]string{}
+	}
+	return p.Repository
+}
+
+// GetScripts returns the Scripts map if it's non-nil, an empty map otherwise.
+func (p *PackageNPMMetadata) GetScripts() map[string]any {
+	if p == nil || p.Scripts == nil {
+		return map[string]any{}
+	}
+	return p.Scripts
+}
+
+// GetVersion returns the Version field if it's non-nil, zero value otherwise.
+func (p *PackageNPMMetadata) GetVersion() string {
+	if p == nil || p.Version == nil {
+		return ""
+	}
+	return *p.Version
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *PackageNugetMetadata) GetName() string {
+	if p == nil || p.Name == nil {
+		return ""
+	}
+	return *p.Name
+}
+
 // GetAboutURL returns the AboutURL field if it's non-nil, zero value otherwise.
 func (p *PackageRegistry) GetAboutURL() string {
 	if p == nil || p.AboutURL == nil {
@@ -16222,14 +16542,6 @@ func (p *PackageVersion) GetAuthor() *User {
 	return p.Author
 }
 
-// GetBody returns the Body field if it's non-nil, zero value otherwise.
-func (p *PackageVersion) GetBody() string {
-	if p == nil || p.Body == nil {
-		return ""
-	}
-	return *p.Body
-}
-
 // GetBodyHTML returns the BodyHTML field if it's non-nil, zero value otherwise.
 func (p *PackageVersion) GetBodyHTML() string {
 	if p == nil || p.BodyHTML == nil {
@@ -16238,6 +16550,14 @@ func (p *PackageVersion) GetBodyHTML() string {
 	return *p.BodyHTML
 }
 
+// GetContainerMetadata returns the ContainerMetadata field.
+func (p *PackageVersion) GetContainerMetadata() *PackageEventContainerMetadata {
+	if p == nil {
+		return nil
+	}
+	return p.ContainerMetadata
+}
+
 // GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
 func (p *PackageVersion) GetCreatedAt() Timestamp {
 	if p == nil || p.CreatedAt == nil {
@@ -16246,6 +16566,22 @@ func (p *PackageVersion) GetCreatedAt() Timestamp {
 	return *p.CreatedAt
 }
 
+// GetDeletedAt returns the DeletedAt field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetDeletedAt() Timestamp {
+	if p == nil || p.DeletedAt == nil {
+		return Timestamp{}
+	}
+	return *p.DeletedAt
+}
+
+// GetDescription returns the Description field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetDescription() string {
+	if p == nil || p.Description == nil {
+		return ""
+	}
+	return *p.Description
+}
+
 // GetDraft returns the Draft field if it's non-nil, zero value otherwise.
 func (p *PackageVersion) GetDraft() bool {
 	if p == nil || p.Draft == nil {
@@ -16278,6 +16614,14 @@ func (p *PackageVersion) GetInstallationCommand() string {
 	return *p.InstallationCommand
 }
 
+// GetLicense returns the License field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetLicense() string {
+	if p == nil || p.License == nil {
+		return ""
+	}
+	return *p.License
+}
+
 // GetManifest returns the Manifest field if it's non-nil, zero value otherwise.
 func (p *PackageVersion) GetManifest() string {
 	if p == nil || p.Manifest == nil {
@@ -16286,14 +16630,6 @@ func (p *PackageVersion) GetManifest() string {
 	return *p.Manifest
 }
 
-// GetMetadata returns the Metadata field.
-func (p *PackageVersion) GetMetadata() *PackageMetadata {
-	if p == nil {
-		return nil
-	}
-	return p.Metadata
-}
-
 // GetName returns the Name field if it's non-nil, zero value otherwise.
 func (p *PackageVersion) GetName() string {
 	if p == nil || p.Name == nil {
@@ -16302,6 +16638,14 @@ func (p *PackageVersion) GetName() string {
 	return *p.Name
 }
 
+// GetNPMMetadata returns the NPMMetadata field.
+func (p *PackageVersion) GetNPMMetadata() *PackageNPMMetadata {
+	if p == nil {
+		return nil
+	}
+	return p.NPMMetadata
+}
+
 // GetPackageHTMLURL returns the PackageHTMLURL field if it's non-nil, zero value otherwise.
 func (p *PackageVersion) GetPackageHTMLURL() string {
 	if p == nil || p.PackageHTMLURL == nil {
@@ -16310,6 +16654,14 @@ func (p *PackageVersion) GetPackageHTMLURL() string {
 	return *p.PackageHTMLURL
 }
 
+// GetPackageURL returns the PackageURL field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetPackageURL() string {
+	if p == nil || p.PackageURL == nil {
+		return ""
+	}
+	return *p.PackageURL
+}
+
 // GetPrerelease returns the Prerelease field if it's non-nil, zero value otherwise.
 func (p *PackageVersion) GetPrerelease() bool {
 	if p == nil || p.Prerelease == nil {
@@ -16326,6 +16678,22 @@ func (p *PackageVersion) GetRelease() *PackageRelease {
 	return p.Release
 }
 
+// GetRubyMetadata returns the RubyMetadata map if it's non-nil, an empty map otherwise.
+func (p *PackageVersion) GetRubyMetadata() map[string]any {
+	if p == nil || p.RubyMetadata == nil {
+		return map[string]any{}
+	}
+	return p.RubyMetadata
+}
+
+// GetSourceURL returns the SourceURL field if it's non-nil, zero value otherwise.
+func (p *PackageVersion) GetSourceURL() string {
+	if p == nil || p.SourceURL == nil {
+		return ""
+	}
+	return *p.SourceURL
+}
+
 // GetSummary returns the Summary field if it's non-nil, zero value otherwise.
 func (p *PackageVersion) GetSummary() string {
 	if p == nil || p.Summary == nil {
@@ -16382,6 +16750,78 @@ func (p *PackageVersion) GetVersion() string {
 	return *p.Version
 }
 
+// GetInfo returns the Info field.
+func (p *PackageVersionBody) GetInfo() *PackageVersionBodyInfo {
+	if p == nil {
+		return nil
+	}
+	return p.Info
+}
+
+// GetRepo returns the Repo field.
+func (p *PackageVersionBody) GetRepo() *Repository {
+	if p == nil {
+		return nil
+	}
+	return p.Repo
+}
+
+// GetCollection returns the Collection field if it's non-nil, zero value otherwise.
+func (p *PackageVersionBodyInfo) GetCollection() bool {
+	if p == nil || p.Collection == nil {
+		return false
+	}
+	return *p.Collection
+}
+
+// GetMode returns the Mode field if it's non-nil, zero value otherwise.
+func (p *PackageVersionBodyInfo) GetMode() int64 {
+	if p == nil || p.Mode == nil {
+		return 0
+	}
+	return *p.Mode
+}
+
+// GetName returns the Name field if it's non-nil, zero value otherwise.
+func (p *PackageVersionBodyInfo) GetName() string {
+	if p == nil || p.Name == nil {
+		return ""
+	}
+	return *p.Name
+}
+
+// GetOID returns the OID field if it's non-nil, zero value otherwise.
+func (p *PackageVersionBodyInfo) GetOID() string {
+	if p == nil || p.OID == nil {
+		return ""
+	}
+	return *p.OID
+}
+
+// GetPath returns the Path field if it's non-nil, zero value otherwise.
+func (p *PackageVersionBodyInfo) GetPath() string {
+	if p == nil || p.Path == nil {
+		return ""
+	}
+	return *p.Path
+}
+
+// GetSize returns the Size field if it's non-nil, zero value otherwise.
+func (p *PackageVersionBodyInfo) GetSize() int64 {
+	if p == nil || p.Size == nil {
+		return 0
+	}
+	return *p.Size
+}
+
+// GetType returns the Type field if it's non-nil, zero value otherwise.
+func (p *PackageVersionBodyInfo) GetType() string {
+	if p == nil || p.Type == nil {
+		return ""
+	}
+	return *p.Type
+}
+
 // GetAction returns the Action field if it's non-nil, zero value otherwise.
 func (p *Page) GetAction() string {
 	if p == nil || p.Action == nil {
@@ -19566,6 +20006,14 @@ func (p *PullRequestReviewThreadEvent) GetThread() *PullRequestThread {
 	return p.Thread
 }
 
+// GetAutomaticCopilotCodeReviewEnabled returns the AutomaticCopilotCodeReviewEnabled field if it's non-nil, zero value otherwise.
+func (p *PullRequestRuleParameters) GetAutomaticCopilotCodeReviewEnabled() bool {
+	if p == nil || p.AutomaticCopilotCodeReviewEnabled == nil {
+		return false
+	}
+	return *p.AutomaticCopilotCodeReviewEnabled
+}
+
 // GetAction returns the Action field if it's non-nil, zero value otherwise.
 func (p *PullRequestTargetEvent) GetAction() string {
 	if p == nil || p.Action == nil {
diff --git a/github/orgs_network_configurations.go b/github/orgs_network_configurations.go
new file mode 100644
index 00000000..82a819c2
--- /dev/null
+++ b/github/orgs_network_configurations.go
@@ -0,0 +1,236 @@
+// Copyright 2025 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"regexp"
+)
+
+// ComputeService represents a hosted compute service the network configuration supports.
+type ComputeService string
+
+const (
+	ComputeServiceNone       ComputeService = "none"
+	ComputeServiceActions    ComputeService = "actions"
+	ComputeServiceCodespaces ComputeService = "codespaces"
+)
+
+// NetworkConfigurations represents a hosted compute network configuration. This type is identical
+// for enterprise and organization endpoints.
+type NetworkConfigurations struct {
+	TotalCount            *int64                  `json:"total_count,omitempty"`
+	NetworkConfigurations []*NetworkConfiguration `json:"network_configurations,omitempty"`
+}
+
+// NetworkConfiguration represents a hosted compute network configurations. This type is identical
+// for enterprise and organization endpoints.
+type NetworkConfiguration struct {
+	ID                 *string         `json:"id,omitempty"`
+	Name               *string         `json:"name,omitempty"`
+	ComputeService     *ComputeService `json:"compute_service,omitempty"`
+	NetworkSettingsIDs []string        `json:"network_settings_ids,omitempty"`
+	CreatedOn          *Timestamp      `json:"created_on"`
+}
+
+// NetworkSettingsResource represents a hosted compute network settings resource. This type is identical
+// for enterprise and organization endpoints.
+type NetworkSettingsResource struct {
+	ID                     *string `json:"id,omitempty"`
+	NetworkConfigurationID *string `json:"network_configuration_id,omitempty"`
+	Name                   *string `json:"name,omitempty"`
+	SubnetID               *string `json:"subnet_id,omitempty"`
+	Region                 *string `json:"region,omitempty"`
+}
+
+func validateComputeService(compute *ComputeService) error {
+	if compute == nil {
+		return nil
+	}
+	if *compute != ComputeServiceNone && *compute != ComputeServiceActions {
+		return errors.New("compute service can only be one of: none, actions")
+	}
+	return nil
+}
+
+var validNetworkNameRE = regexp.MustCompile(`^[a-zA-Z0-9._-]+$`)
+
+func validateNetworkName(name string) error {
+	if len(name) < 1 || len(name) > 100 {
+		return errors.New("must be between 1 and 100 characters")
+	}
+	if !validNetworkNameRE.MatchString(name) {
+		return errors.New("may only contain upper and lowercase letters a-z, numbers 0-9, '.', '-', and '_'")
+	}
+	return nil
+}
+
+func validateNetworkSettingsID(settingsID []string) error {
+	if len(settingsID) != 1 {
+		return errors.New("exactly one network settings id must be specified")
+	}
+	return nil
+}
+
+func validateNetworkConfigurationRequest(req NetworkConfigurationRequest) error {
+	networkName := req.GetName()
+	if err := validateNetworkName(networkName); err != nil {
+		return err
+	}
+
+	computeService := req.GetComputeService()
+	if err := validateComputeService(computeService); err != nil {
+		return err
+	}
+
+	networkIDs := req.NetworkSettingsIDs
+	if err := validateNetworkSettingsID(networkIDs); err != nil {
+		return err
+	}
+	return nil
+}
+
+// NetworkConfigurationRequest represents a request to create or update a network configuration for an organization.
+type NetworkConfigurationRequest struct {
+	Name               *string         `json:"name,omitempty"`
+	ComputeService     *ComputeService `json:"compute_service,omitempty"`
+	NetworkSettingsIDs []string        `json:"network_settings_ids,omitempty"`
+}
+
+// ListNetworkConfigurations lists all hosted compute network configurations configured in an organization.
+//
+// GitHub API docs: https://docs.github.com/rest/orgs/network-configurations#list-hosted-compute-network-configurations-for-an-organization
+//
+//meta:operation GET /orgs/{org}/settings/network-configurations
+func (s *OrganizationsService) ListNetworkConfigurations(ctx context.Context, org string, opts *ListOptions) (*NetworkConfigurations, *Response, error) {
+	u := fmt.Sprintf("orgs/%v/settings/network-configurations", org)
+	u, err := addOptions(u, opts)
+	if err != nil {
+		return nil, nil, err
+	}
+
+	req, err := s.client.NewRequest("GET", u, nil)
+	if err != nil {
+		return nil, nil, err
+	}
+
+	configurations := &NetworkConfigurations{}
+	resp, err := s.client.Do(ctx, req, configurations)
+	if err != nil {
+		return nil, resp, err
+	}
+	return configurations, resp, nil
+}
+
+// CreateNetworkConfiguration creates a hosted compute network configuration for an organization.
+//
+// GitHub API docs: https://docs.github.com/rest/orgs/network-configurations#create-a-hosted-compute-network-configuration-for-an-organization
+//
+//meta:operation POST /orgs/{org}/settings/network-configurations
+func (s *OrganizationsService) CreateNetworkConfiguration(ctx context.Context, org string, createReq NetworkConfigurationRequest) (*NetworkConfiguration, *Response, error) {
+	if err := validateNetworkConfigurationRequest(createReq); err != nil {
+		return nil, nil, fmt.Errorf("validation failed: %w", err)
+	}
+
+	u := fmt.Sprintf("orgs/%v/settings/network-configurations", org)
+	req, err := s.client.NewRequest("POST", u, createReq)
+	if err != nil {
+		return nil, nil, err
+	}
+
+	configuration := &NetworkConfiguration{}
+	resp, err := s.client.Do(ctx, req, configuration)
+	if err != nil {
+		return nil, resp, err
+	}
+	return configuration, resp, nil
+}
+
+// GetNetworkConfiguration gets a hosted compute network configuration configured in an organization.
+//
+// GitHub API docs: https://docs.github.com/rest/orgs/network-configurations#get-a-hosted-compute-network-configuration-for-an-organization
+//
+//meta:operation GET /orgs/{org}/settings/network-configurations/{network_configuration_id}
+func (s *OrganizationsService) GetNetworkConfiguration(ctx context.Context, org, networkID string) (*NetworkConfiguration, *Response, error) {
+	u := fmt.Sprintf("orgs/%v/settings/network-configurations/%v", org, networkID)
+	req, err := s.client.NewRequest("GET", u, nil)
+	if err != nil {
+		return nil, nil, err
+	}
+
+	configuration := &NetworkConfiguration{}
+	resp, err := s.client.Do(ctx, req, configuration)
+	if err != nil {
+		return nil, resp, err
+	}
+	return configuration, resp, nil
+}
+
+// UpdateNetworkConfiguration updates a hosted compute network configuration for an organization.
+//
+// GitHub API docs: https://docs.github.com/rest/orgs/network-configurations#update-a-hosted-compute-network-configuration-for-an-organization
+//
+//meta:operation PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}
+func (s *OrganizationsService) UpdateNetworkConfiguration(ctx context.Context, org, networkID string, updateReq NetworkConfigurationRequest) (*NetworkConfiguration, *Response, error) {
+	if err := validateNetworkConfigurationRequest(updateReq); err != nil {
+		return nil, nil, fmt.Errorf("validation failed: %w", err)
+	}
+
+	u := fmt.Sprintf("orgs/%v/settings/network-configurations/%v", org, networkID)
+	req, err := s.client.NewRequest("PATCH", u, updateReq)
+	if err != nil {
+		return nil, nil, err
+	}
+
+	configuration := &NetworkConfiguration{}
+	resp, err := s.client.Do(ctx, req, configuration)
+	if err != nil {
+		return nil, resp, err
+	}
+	return configuration, resp, nil
+}
+
+// DeleteNetworkConfigurations deletes a hosted compute network configuration from an organization.
+//
+// GitHub API docs: https://docs.github.com/rest/orgs/network-configurations#delete-a-hosted-compute-network-configuration-from-an-organization
+//
+//meta:operation DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}
+func (s *OrganizationsService) DeleteNetworkConfigurations(ctx context.Context, org, networkID string) (*Response, error) {
+	u := fmt.Sprintf("orgs/%v/settings/network-configurations/%v", org, networkID)
+	req, err := s.client.NewRequest("DELETE", u, nil)
+	if err != nil {
+		return nil, err
+	}
+
+	configuration := &NetworkConfiguration{}
+	resp, err := s.client.Do(ctx, req, configuration)
+	if err != nil {
+		return resp, err
+	}
+	return resp, nil
+}
+
+// GetNetworkConfigurationResource gets a hosted compute network settings resource configured for an organization.
+//
+// GitHub API docs: https://docs.github.com/rest/orgs/network-configurations#get-a-hosted-compute-network-settings-resource-for-an-organization
+//
+//meta:operation GET /orgs/{org}/settings/network-settings/{network_settings_id}
+func (s *OrganizationsService) GetNetworkConfigurationResource(ctx context.Context, org, networkID string) (*NetworkSettingsResource, *Response, error) {
+	u := fmt.Sprintf("orgs/%v/settings/network-settings/%v", org, networkID)
+	req, err := s.client.NewRequest("GET", u, nil)
+	if err != nil {
+		return nil, nil, err
+	}
+
+	resource := &NetworkSettingsResource{}
+	resp, err := s.client.Do(ctx, req, resource)
+	if err != nil {
+		return nil, resp, err
+	}
+	return resource, resp, nil
+}
diff --git a/github/packages.go b/github/packages.go
index ef7df074..e7c32796 100644
--- a/github/packages.go
+++ b/github/packages.go
@@ -5,21 +5,31 @@
 
 package github
 
+import (
+	"encoding/json"
+)
+
 // Package represents a GitHub package.
 type Package struct {
-	ID             *int64           `json:"id,omitempty"`
-	Name           *string          `json:"name,omitempty"`
-	PackageType    *string          `json:"package_type,omitempty"`
-	HTMLURL        *string          `json:"html_url,omitempty"`
-	CreatedAt      *Timestamp       `json:"created_at,omitempty"`
-	UpdatedAt      *Timestamp       `json:"updated_at,omitempty"`
-	Owner          *User            `json:"owner,omitempty"`
+	ID          *int64     `json:"id,omitempty"`
+	Name        *string    `json:"name,omitempty"`
+	PackageType *string    `json:"package_type,omitempty"` // One of "npm", "maven", "rubygems", "docker", "nuget", "container". For webhook events "container" is "CONTAINER"
+	HTMLURL     *string    `json:"html_url,omitempty"`
+	Visibility  *string    `json:"visibility,omitempty"`
+	Owner       *User      `json:"owner,omitempty"`
+	CreatedAt   *Timestamp `json:"created_at,omitempty"`
+	UpdatedAt   *Timestamp `json:"updated_at,omitempty"`
+
+	// The following are only populated for webhook events
+	Namespace      *string          `json:"namespace,omitempty"`
+	Description    *string          `json:"description,omitempty"`
+	Ecosystem      *string          `json:"ecosystem,omitempty"`
 	PackageVersion *PackageVersion  `json:"package_version,omitempty"`
 	Registry       *PackageRegistry `json:"registry,omitempty"`
-	URL            *string          `json:"url,omitempty"`
-	VersionCount   *int64           `json:"version_count,omitempty"`
-	Visibility     *string          `json:"visibility,omitempty"`
-	Repository     *Repository      `json:"repository,omitempty"`
+
+	// The following are NOT populated for webhook events
+	URL          *string `json:"url,omitempty"`
+	VersionCount *int64  `json:"version_count,omitempty"`
 }
 
 func (p Package) String() string {
@@ -28,28 +38,90 @@ func (p Package) String() string {
 
 // PackageVersion represents a GitHub package version.
 type PackageVersion struct {
-	ID                  *int64           `json:"id,omitempty"`
-	Version             *string          `json:"version,omitempty"`
-	Summary             *string          `json:"summary,omitempty"`
-	Body                *string          `json:"body,omitempty"`
-	BodyHTML            *string          `json:"body_html,omitempty"`
-	Release             *PackageRelease  `json:"release,omitempty"`
-	Manifest            *string          `json:"manifest,omitempty"`
-	HTMLURL             *string          `json:"html_url,omitempty"`
-	TagName             *string          `json:"tag_name,omitempty"`
-	TargetCommitish     *string          `json:"target_commitish,omitempty"`
-	TargetOID           *string          `json:"target_oid,omitempty"`
-	Draft               *bool            `json:"draft,omitempty"`
-	Prerelease          *bool            `json:"prerelease,omitempty"`
-	CreatedAt           *Timestamp       `json:"created_at,omitempty"`
-	UpdatedAt           *Timestamp       `json:"updated_at,omitempty"`
-	PackageFiles        []*PackageFile   `json:"package_files,omitempty"`
-	Author              *User            `json:"author,omitempty"`
-	InstallationCommand *string          `json:"installation_command,omitempty"`
-	Metadata            *PackageMetadata `json:"metadata,omitempty"`
-	PackageHTMLURL      *string          `json:"package_html_url,omitempty"`
-	Name                *string          `json:"name,omitempty"`
-	URL                 *string          `json:"url,omitempty"`
+	ID             *int64          `json:"id,omitempty"`
+	Name           *string         `json:"name,omitempty"`
+	URL            *string         `json:"url,omitempty"`
+	PackageHTMLURL *string         `json:"package_html_url,omitempty"`
+	License        *string         `json:"license,omitempty"`
+	Description    *string         `json:"description,omitempty"`
+	CreatedAt      *Timestamp      `json:"created_at,omitempty"`
+	UpdatedAt      *Timestamp      `json:"updated_at,omitempty"`
+	Metadata       json.RawMessage `json:"metadata,omitempty"` // For webhook events this will be []interface, else it will be of type PackageMetadata
+
+	// The following are only populated for webhook events
+	Version             *string                        `json:"version,omitempty"`
+	Summary             *string                        `json:"summary,omitempty"`
+	Body                json.RawMessage                `json:"body,omitempty"` // Can either be a string or of type PackageVersionBody
+	BodyHTML            *string                        `json:"body_html,omitempty"`
+	Release             *PackageRelease                `json:"release,omitempty"`
+	Manifest            *string                        `json:"manifest,omitempty"`
+	HTMLURL             *string                        `json:"html_url,omitempty"`
+	TagName             *string                        `json:"tag_name,omitempty"`
+	TargetCommitish     *string                        `json:"target_commitish,omitempty"`
+	TargetOID           *string                        `json:"target_oid,omitempty"`
+	Draft               *bool                          `json:"draft,omitempty"`
+	Prerelease          *bool                          `json:"prerelease,omitempty"`
+	ContainerMetadata   *PackageEventContainerMetadata `json:"container_metadata,omitempty"`
+	DockerMetadata      []interface{}                  `json:"docker_metadata,omitempty"`
+	NPMMetadata         *PackageNPMMetadata            `json:"npm_metadata,omitempty"`
+	NugetMetadata       []*PackageNugetMetadata        `json:"nuget_metadata,omitempty"`
+	RubyMetadata        map[string]any                 `json:"ruby_metadata,omitempty"`
+	PackageFiles        []*PackageFile                 `json:"package_files,omitempty"`
+	PackageURL          *string                        `json:"package_url,omitempty"`
+	Author              *User                          `json:"author,omitempty"`
+	SourceURL           *string                        `json:"source_url,omitempty"`
+	InstallationCommand *string                        `json:"installation_command,omitempty"`
+
+	// The following are NOT populated for webhook events
+	DeletedAt *Timestamp `json:"deleted_at,omitempty"`
+}
+
+// GetBody returns the body field as a string if it's valid.
+func (pv *PackageVersion) GetBody() (body string, ok bool) {
+	if pv == nil || pv.Body == nil {
+		return "", false
+	}
+
+	if err := json.Unmarshal(pv.Body, &body); err != nil {
+		return "", false
+	}
+
+	return body, true
+}
+
+// GetBodyAsPackageVersionBody returns the body field as a PackageVersionBody if it's valid.
+func (pv *PackageVersion) GetBodyAsPackageVersionBody() (body *PackageVersionBody, ok bool) {
+	if pv == nil || pv.Body == nil {
+		return nil, false
+	}
+
+	if err := json.Unmarshal(pv.Body, &body); err != nil {
+		return nil, false
+	}
+
+	return body, true
+}
+
+// GetMetadata returns the metadata field as PackageMetadata if it's valid.
+func (pv *PackageVersion) GetMetadata() (metadata *PackageMetadata, ok bool) {
+	if pv == nil || pv.Metadata == nil {
+		return nil, false
+	}
+
+	if err := json.Unmarshal(pv.Metadata, &metadata); err != nil {
+		return nil, false
+	}
+
+	return metadata, true
+}
+
+// GetRawMetadata returns the metadata field as a json.RawMessage.
+func (pv *PackageVersion) GetRawMetadata() json.RawMessage {
+	if pv == nil || pv.Metadata == nil {
+		return json.RawMessage{}
+	}
+
+	return pv.Metadata
 }
 
 func (pv PackageVersion) String() string {
@@ -141,3 +213,106 @@ type PackageContainerMetadata struct {
 func (r PackageContainerMetadata) String() string {
 	return Stringify(r)
 }
+
+// PackageVersionBody represents the body field of a package version.
+type PackageVersionBody struct {
+	Repo *Repository             `json:"repository,omitempty"`
+	Info *PackageVersionBodyInfo `json:"info,omitempty"`
+}
+
+func (b PackageVersionBody) String() string {
+	return Stringify(b)
+}
+
+// PackageVersionBodyInfo represents the info field of a PackageVersionBody.
+type PackageVersionBodyInfo struct {
+	Type       *string `json:"type,omitempty"`
+	OID        *string `json:"oid,omitempty"`
+	Mode       *int64  `json:"mode,omitempty"`
+	Name       *string `json:"name,omitempty"`
+	Path       *string `json:"path,omitempty"`
+	Size       *int64  `json:"size,omitempty"`
+	Collection *bool   `json:"collection,omitempty"`
+}
+
+func (bi PackageVersionBodyInfo) String() string {
+	return Stringify(bi)
+}
+
+// PackageEventContainerMetadata represents metadata for container packages as part of a webhook event.
+// See also PackageContainerMetadata.
+type PackageEventContainerMetadata struct {
+	Labels   map[string]any                    `json:"labels,omitempty"`
+	Manifest map[string]any                    `json:"manifest,omitempty"`
+	Tag      *PackageEventContainerMetadataTag `json:"tag,omitempty"`
+}
+
+func (m PackageEventContainerMetadata) String() string {
+	return Stringify(m)
+}
+
+// PackageEventContainerMetadataTag represents a tag of a GitHub container package.
+type PackageEventContainerMetadataTag struct {
+	Name   *string `json:"name,omitempty"`
+	Digest *string `json:"digest,omitempty"`
+}
+
+func (mt PackageEventContainerMetadataTag) String() string {
+	return Stringify(mt)
+}
+
+// PackageNugetMetadata represents nuget metadata for a GitHub package.
+type PackageNugetMetadata struct {
+	ID    json.RawMessage `json:"id,omitempty"` // Can either be a int64 or string
+	Name  *string         `json:"name,omitempty"`
+	Value json.RawMessage `json:"value,omitempty"` // Can either be a bool, string, integer or object
+}
+
+func (nm PackageNugetMetadata) String() string {
+	return Stringify(nm)
+}
+
+// PackageNPMMetadata represents NPM metadata for a GitHub package.
+type PackageNPMMetadata struct {
+	Name                 *string           `json:"name,omitempty"`
+	Version              *string           `json:"version,omitempty"`
+	NPMUser              *string           `json:"npm_user,omitempty"`
+	Author               map[string]string `json:"author,omitempty"`
+	Bugs                 map[string]string `json:"bugs,omitempty"`
+	Dependencies         map[string]string `json:"dependencies,omitempty"`
+	DevDependencies      map[string]string `json:"dev_dependencies,omitempty"`
+	PeerDependencies     map[string]string `json:"peer_dependencies,omitempty"`
+	OptionalDependencies map[string]string `json:"optional_dependencies,omitempty"`
+	Description          *string           `json:"description,omitempty"`
+	Dist                 map[string]string `json:"dist,omitempty"`
+	GitHead              *string           `json:"git_head,omitempty"`
+	Homepage             *string           `json:"homepage,omitempty"`
+	License              *string           `json:"license,omitempty"`
+	Main                 *string           `json:"main,omitempty"`
+	Repository           map[string]string `json:"repository,omitempty"`
+	Scripts              map[string]any    `json:"scripts,omitempty"`
+	ID                   *string           `json:"id,omitempty"`
+	NodeVersion          *string           `json:"node_version,omitempty"`
+	NPMVersion           *string           `json:"npm_version,omitempty"`
+	HasShrinkwrap        *bool             `json:"has_shrinkwrap,omitempty"`
+	Maintainers          []interface{}     `json:"maintainers,omitempty"`
+	Contributors         []interface{}     `json:"contributors,omitempty"`
+	Engines              map[string]string `json:"engines,omitempty"`
+	Keywords             []string          `json:"keywords,omitempty"`
+	Files                []string          `json:"files,omitempty"`
+	Bin                  map[string]any    `json:"bin,omitempty"`
+	Man                  map[string]any    `json:"man,omitempty"`
+	Directories          map[string]string `json:"directories,omitempty"`
+	OS                   []string          `json:"os,omitempty"`
+	CPU                  []string          `json:"cpu,omitempty"`
+	Readme               *string           `json:"readme,omitempty"`
+	InstallationCommand  *string           `json:"installation_command,omitempty"`
+	ReleaseID            *int64            `json:"release_id,omitempty"`
+	CommitOID            *string           `json:"commit_oid,omitempty"`
+	PublishedViaActions  *bool             `json:"published_via_actions,omitempty"`
+	DeletedByID          *int64            `json:"deleted_by_id,omitempty"`
+}
+
+func (nm PackageNPMMetadata) String() string {
+	return Stringify(nm)
+}
diff --git a/github/rules.go b/github/rules.go
index 8312d952..985f0aac 100644
--- a/github/rules.go
+++ b/github/rules.go
@@ -395,12 +395,13 @@ type RequiredDeploymentsRuleParameters struct {
 
 // PullRequestRuleParameters represents the pull_request rule parameters.
 type PullRequestRuleParameters struct {
-	AllowedMergeMethods            []MergeMethod `json:"allowed_merge_methods"`
-	DismissStaleReviewsOnPush      bool          `json:"dismiss_stale_reviews_on_push"`
-	RequireCodeOwnerReview         bool          `json:"require_code_owner_review"`
-	RequireLastPushApproval        bool          `json:"require_last_push_approval"`
-	RequiredApprovingReviewCount   int           `json:"required_approving_review_count"`
-	RequiredReviewThreadResolution bool          `json:"required_review_thread_resolution"`
+	AllowedMergeMethods               []MergeMethod `json:"allowed_merge_methods"`
+	AutomaticCopilotCodeReviewEnabled *bool         `json:"automatic_copilot_code_review_enabled,omitempty"`
+	DismissStaleReviewsOnPush         bool          `json:"dismiss_stale_reviews_on_push"`
+	RequireCodeOwnerReview            bool          `json:"require_code_owner_review"`
+	RequireLastPushApproval           bool          `json:"require_last_push_approval"`
+	RequiredApprovingReviewCount      int           `json:"required_approving_review_count"`
+	RequiredReviewThreadResolution    bool          `json:"required_review_thread_resolution"`
 }
 
 // RequiredStatusChecksRuleParameters represents the required status checks rule parameters.
diff --git a/github/secret_scanning.go b/github/secret_scanning.go
index 35322cf6..4eeeba3d 100644
--- a/github/secret_scanning.go
+++ b/github/secret_scanning.go
@@ -68,6 +68,10 @@ type SecretScanningAlertListOptions struct {
 	// Valid resolutions are false_positive, wont_fix, revoked, pattern_edited, pattern_deleted or used_in_tests.
 	Resolution string `url:"resolution,omitempty"`
 
+	// A comma-separated list of validities that, when present, will return alerts that match the validities in this list.
+	// Valid options are active, inactive, and unknown.
+	Validity string `url:"validity,omitempty"`
+
 	// The direction to sort the results by. Possible values are: asc, desc. Default: desc.
 	Direction string `url:"direction,omitempty"`
 
diff --git a/go.mod b/go.mod
index 25e0e7b4..c49b5393 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
 module github.com/google/go-github/v69
 
-go 1.22.0
+go 1.23.0
 
 require (
 	github.com/google/go-cmp v0.7.0
diff --git a/scrape/go.mod b/scrape/go.mod
index 82db6307..6c62db65 100644
--- a/scrape/go.mod
+++ b/scrape/go.mod
@@ -1,13 +1,13 @@
 module github.com/google/go-github/scrape
 
-go 1.22.0
+go 1.23.0
 
 require (
-	github.com/PuerkitoBio/goquery v1.9.3
+	github.com/PuerkitoBio/goquery v1.10.2
 	github.com/google/go-cmp v0.7.0
 	github.com/google/go-github/v69 v69.2.0
 	github.com/xlzd/gotp v0.1.0
-	golang.org/x/net v0.35.0
+	golang.org/x/net v0.37.0
 )
 
 require (
diff --git a/scrape/go.sum b/scrape/go.sum
index f0eddaf0..fd8988cf 100644
--- a/scrape/go.sum
+++ b/scrape/go.sum
@@ -1,5 +1,5 @@
-github.com/PuerkitoBio/goquery v1.9.3 h1:mpJr/ikUA9/GNJB/DBZcGeFDXUtosHRyRrwh7KGdTG0=
-github.com/PuerkitoBio/goquery v1.9.3/go.mod h1:1ndLHPdTz+DyQPICCWYlYQMPl0oXZj0G6D4LCYA6u4U=
+github.com/PuerkitoBio/goquery v1.10.2 h1:7fh2BdHcG6VFZsK7toXBT/Bh1z5Wmy8Q9MV9HqT2AM8=
+github.com/PuerkitoBio/goquery v1.10.2/go.mod h1:0guWGjcLu9AYC7C1GHnpysHy056u9aEkUHwhdnePMCU=
 github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM=
 github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA=
 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
@@ -33,8 +33,8 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
 golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
 golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
 golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
-golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
+golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c=
+golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
diff --git a/script/generate.sh b/script/generate.sh
index 8d5f240d..2418dcf2 100755
--- a/script/generate.sh
+++ b/script/generate.sh
@@ -6,6 +6,10 @@ set -e
 
 CDPATH="" cd -- "$(dirname -- "$0")/.."
 
+# force 1.22.0 default and "auto" toolchain (i.e., use the toolchain directive)
+# when running generate and mod tidy
+export GOTOOLCHAIN="go1.22.0+auto"
+
 if [ "$1" = "--check" ]; then
   GENTEMP="$(mktemp -d)"
   git worktree add -q --detach "$GENTEMP"
@@ -43,6 +47,6 @@ for dir in $MOD_DIRS; do
   (
     cd "$dir"
     go generate ./...
-    GOTOOLCHAIN="go1.22+auto" go mod tidy
+    go mod tidy
   )
 done
diff --git a/tools/go.mod b/tools/go.mod
index c9ce43d3..54285d31 100644
--- a/tools/go.mod
+++ b/tools/go.mod
@@ -1,13 +1,13 @@
 module tools
 
-go 1.22.0
+go 1.23.0
 
 require (
-	github.com/alecthomas/kong v1.8.1
-	github.com/getkin/kin-openapi v0.128.0
+	github.com/alecthomas/kong v1.9.0
+	github.com/getkin/kin-openapi v0.130.0
 	github.com/google/go-cmp v0.7.0
 	github.com/google/go-github/v69 v69.2.0
-	golang.org/x/sync v0.11.0
+	golang.org/x/sync v0.12.0
 	gopkg.in/yaml.v3 v3.0.1
 )
 
@@ -16,10 +16,11 @@ require (
 	github.com/go-openapi/swag v0.23.0 // indirect
 	github.com/go-test/deep v1.1.1 // indirect
 	github.com/google/go-querystring v1.1.0 // indirect
-	github.com/invopop/yaml v0.3.1 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
 	github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
+	github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 // indirect
+	github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 // indirect
 	github.com/perimeterx/marshmallow v1.1.5 // indirect
 )
 
diff --git a/tools/go.sum b/tools/go.sum
index ecbe0ac6..7d64c2b8 100644
--- a/tools/go.sum
+++ b/tools/go.sum
@@ -1,13 +1,13 @@
 github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
 github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
-github.com/alecthomas/kong v1.8.1 h1:6aamvWBE/REnR/BCq10EcozmcpUPc5aGI1lPAWdB0EE=
-github.com/alecthomas/kong v1.8.1/go.mod h1:p2vqieVMeTAnaC83txKtXe8FLke2X07aruPWXyMPQrU=
+github.com/alecthomas/kong v1.9.0 h1:Wgg0ll5Ys7xDnpgYBuBn/wPeLGAuK0NvYmEcisJgrIs=
+github.com/alecthomas/kong v1.9.0/go.mod h1:p2vqieVMeTAnaC83txKtXe8FLke2X07aruPWXyMPQrU=
 github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc=
 github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/getkin/kin-openapi v0.128.0 h1:jqq3D9vC9pPq1dGcOCv7yOp1DaEe7c/T1vzcLbITSp4=
-github.com/getkin/kin-openapi v0.128.0/go.mod h1:OZrfXzUfGrNbsKj+xmFBx6E5c6yH3At/tAKSc2UszXM=
+github.com/getkin/kin-openapi v0.130.0 h1:Sz8GTHfscqdsQCT/OJDSV3eNvEjZ8iUOlXbFxkG1Av0=
+github.com/getkin/kin-openapi v0.130.0/go.mod h1:3OlG51PCYNsPByuiMB0t4fjnNlIDnaEDsjiKUV8nL58=
 github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
 github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
 github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
@@ -21,8 +21,6 @@ github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD
 github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
 github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
 github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
-github.com/invopop/yaml v0.3.1 h1:f0+ZpmhfBSS4MhG+4HYseMdJhoeeopbSKbq5Rpeelso=
-github.com/invopop/yaml v0.3.1/go.mod h1:PMOp3nn4/12yEZUFfmOuNHJsZToEEOwoWsT+D81KkeA=
 github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
@@ -33,6 +31,10 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0
 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
+github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 h1:G7ERwszslrBzRxj//JalHPu/3yz+De2J+4aLtSRlHiY=
+github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037/go.mod h1:2bpvgLBZEtENV5scfDFEtB/5+1M4hkQhDQrccEJ/qGw=
+github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 h1:bQx3WeLcUWy+RletIKwUIt4x3t8n2SxavmoclizMb8c=
+github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90/go.mod h1:y5+oSEHCPT/DGrS++Wc/479ERge0zTFxaF8PbGKcg2o=
 github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s=
 github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -43,8 +45,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT
 github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
 github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
 github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
-golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
-golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
+golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
diff --git a/tools/sliceofpointers/go.mod b/tools/sliceofpointers/go.mod
index 759fa734..1f4ef32d 100644
--- a/tools/sliceofpointers/go.mod
+++ b/tools/sliceofpointers/go.mod
@@ -1,6 +1,6 @@
 module tools/sliceofpointers
 
-go 1.22.0
+go 1.23.0
 
 require (
 	github.com/golangci/plugin-module-register v0.1.1


Test patch:
diff --git a/github/enterprise_network_configurations_test.go b/github/enterprise_network_configurations_test.go
index c9a9acc8..74555997 100644
--- a/github/enterprise_network_configurations_test.go
+++ b/github/enterprise_network_configurations_test.go
@@ -27,7 +27,7 @@ func TestEnterpriseService_ListEnterpriseNetworkConfigurations(t *testing.T) {
 		  "network_configurations": [
 			{
 			  "id": "123456789ABCDEF",
-			  "name": "configuration_one",
+			  "name": "configuration one",
 			  "compute_service": "actions",
 			  "network_settings_ids": [
 				"23456789ABDCEF1",
@@ -37,7 +37,7 @@ func TestEnterpriseService_ListEnterpriseNetworkConfigurations(t *testing.T) {
 			},
 			{
 			  "id": "456789ABDCEF123",
-			  "name": "configuration_two",
+			  "name": "configuration two",
 			  "compute_service": "none",
 			  "network_settings_ids": [
 				"56789ABDCEF1234",
@@ -57,19 +57,19 @@ func TestEnterpriseService_ListEnterpriseNetworkConfigurations(t *testing.T) {
 		t.Errorf("Enterprise.ListEnterpriseNetworkConfigurations returned error: %v", err)
 	}
 
-	want := &EnterpriseNetworkConfigurations{
+	want := &NetworkConfigurations{
 		TotalCount: Ptr(int64(2)),
-		NetworkConfigurations: []*EnterpriseNetworkConfiguration{
+		NetworkConfigurations: []*NetworkConfiguration{
 			{
 				ID:                 Ptr("123456789ABCDEF"),
-				Name:               Ptr("configuration_one"),
+				Name:               Ptr("configuration one"),
 				ComputeService:     Ptr(ComputeService("actions")),
 				NetworkSettingsIDs: []string{"23456789ABDCEF1", "3456789ABDCEF12"},
 				CreatedOn:          &Timestamp{time.Date(2024, 4, 9, 17, 30, 15, 0, time.UTC)},
 			},
 			{
 				ID:                 Ptr("456789ABDCEF123"),
-				Name:               Ptr("configuration_two"),
+				Name:               Ptr("configuration two"),
 				ComputeService:     Ptr(ComputeService("none")),
 				NetworkSettingsIDs: []string{"56789ABDCEF1234", "6789ABDCEF12345"},
 				CreatedOn:          &Timestamp{time.Date(2024, 11, 2, 12, 30, 30, 0, time.UTC)},
@@ -103,11 +103,10 @@ func TestEnterpriseService_CreateEnterpriseNetworkConfiguration(t *testing.T) {
 		testMethod(t, r, "POST")
 		fmt.Fprintf(w, `{
 		  "id": "123456789ABCDEF",
-		  "name": "configuration_one",
+		  "name": "configuration one",
 		  "compute_service": "actions",
 		  "network_settings_ids": [
-			"23456789ABDCEF1",
-			"3456789ABDCEF12"
+			"23456789ABDCEF1"
 		  ],
 		  "created_on": "2024-04-09T17:30:15Z"
 		}`)
@@ -115,12 +114,11 @@ func TestEnterpriseService_CreateEnterpriseNetworkConfiguration(t *testing.T) {
 
 	ctx := context.Background()
 
-	req := EnterpriseNetworkConfigurationRequest{
-		Name:           Ptr("configuration_one"),
+	req := NetworkConfigurationRequest{
+		Name:           Ptr("configuration-one"),
 		ComputeService: Ptr(ComputeService("actions")),
 		NetworkSettingsIDs: []string{
 			"23456789ABDCEF1",
-			"3456789ABDCEF12",
 		},
 	}
 	configuration, _, err := client.Enterprise.CreateEnterpriseNetworkConfiguration(ctx, "e", req)
@@ -128,17 +126,54 @@ func TestEnterpriseService_CreateEnterpriseNetworkConfiguration(t *testing.T) {
 		t.Errorf("Enterprise.CreateEnterpriseNetworkConfiguration returned error: %v", err)
 	}
 
-	want := &EnterpriseNetworkConfiguration{
+	want := &NetworkConfiguration{
 		ID:                 Ptr("123456789ABCDEF"),
-		Name:               Ptr("configuration_one"),
+		Name:               Ptr("configuration one"),
 		ComputeService:     Ptr(ComputeService("actions")),
-		NetworkSettingsIDs: []string{"23456789ABDCEF1", "3456789ABDCEF12"},
+		NetworkSettingsIDs: []string{"23456789ABDCEF1"},
 		CreatedOn:          &Timestamp{time.Date(2024, 4, 9, 17, 30, 15, 0, time.UTC)},
 	}
 	if !cmp.Equal(configuration, want) {
 		t.Errorf("Enterprise.CreateEnterpriseNetworkConfiguration mismatch (-want +got):\n%s", cmp.Diff(want, configuration))
 	}
 
+	validationTest := []struct {
+		name    string
+		request NetworkConfigurationRequest
+		want    string
+	}{
+		{
+			name: "invalid network settings id",
+			request: NetworkConfigurationRequest{
+				Name:               Ptr(""),
+				NetworkSettingsIDs: []string{"56789ABDCEF1234"},
+			},
+			want: "validation failed: must be between 1 and 100 characters",
+		},
+		{
+			name: "invalid network settings id",
+			request: NetworkConfigurationRequest{
+				Name: Ptr("updated-configuration-one"),
+			},
+			want: "validation failed: exactly one network settings id must be specified",
+		},
+		{
+			name: "invalid compute service",
+			request: NetworkConfigurationRequest{
+				Name:               Ptr("updated-configuration-one"),
+				ComputeService:     Ptr(ComputeService("")),
+				NetworkSettingsIDs: []string{"56789ABDCEF1234"},
+			},
+			want: "validation failed: compute service can only be one of: none, actions",
+		},
+	}
+	for _, tc := range validationTest {
+		_, _, err = client.Enterprise.CreateEnterpriseNetworkConfiguration(ctx, "e", tc.request)
+		if err == nil || err.Error() != tc.want {
+			t.Errorf("expected error to be %v, got %v", tc.want, err)
+		}
+	}
+
 	const methodName = "CreateEnterpriseNetworkConfiguration"
 	testBadOptions(t, methodName, func() error {
 		_, _, err = client.Enterprise.CreateEnterpriseNetworkConfiguration(ctx, "\ne", req)
@@ -162,7 +197,7 @@ func TestEnterpriseService_GetEnterpriseNetworkConfiguration(t *testing.T) {
 		testMethod(t, r, "GET")
 		fmt.Fprintf(w, `{
 		  "id": "123456789ABCDEF",
-		  "name": "configuration_one",
+		  "name": "configuration one",
 		  "compute_service": "actions",
 		  "network_settings_ids": [
 			"23456789ABDCEF1",
@@ -178,9 +213,9 @@ func TestEnterpriseService_GetEnterpriseNetworkConfiguration(t *testing.T) {
 		t.Errorf("Enterprise.GetEnterpriseNetworkConfiguration returned err: %v", err)
 	}
 
-	want := &EnterpriseNetworkConfiguration{
+	want := &NetworkConfiguration{
 		ID:                 Ptr("123456789ABCDEF"),
-		Name:               Ptr("configuration_one"),
+		Name:               Ptr("configuration one"),
 		ComputeService:     Ptr(ComputeService("actions")),
 		NetworkSettingsIDs: []string{"23456789ABDCEF1", "3456789ABDCEF12"},
 		CreatedOn:          &Timestamp{time.Date(2024, 12, 10, 19, 00, 15, 0, time.UTC)},
@@ -212,22 +247,20 @@ func TestEnterpriseService_UpdateEnterpriseNetworkConfiguration(t *testing.T) {
 		testMethod(t, r, "PATCH")
 		fmt.Fprintf(w, `{
 		  "id": "123456789ABCDEF",
-		  "name": "updated_configuration_one",
+		  "name": "updated configuration one",
 		  "compute_service": "none",
 		  "network_settings_ids": [
-			"456789ABDCEF123",
-			"56789ABDCEF1234"
+			"456789ABDCEF123"
 		  ],
 		  "created_on": "2024-12-10T19:00:15Z"
 		}`)
 	})
 
 	ctx := context.Background()
-	req := EnterpriseNetworkConfigurationRequest{
-		Name: Ptr("updated_configuration_one"),
+	req := NetworkConfigurationRequest{
+		Name: Ptr("updated-configuration-one"),
 		NetworkSettingsIDs: []string{
 			"456789ABDCEF123",
-			"56789ABDCEF1234",
 		},
 		ComputeService: Ptr(ComputeService("none")),
 	}
@@ -236,17 +269,54 @@ func TestEnterpriseService_UpdateEnterpriseNetworkConfiguration(t *testing.T) {
 		t.Errorf("Enterprise.UpdateEnterpriseNetworkConfiguration returned error %v", err)
 	}
 
-	want := &EnterpriseNetworkConfiguration{
+	want := &NetworkConfiguration{
 		ID:                 Ptr("123456789ABCDEF"),
-		Name:               Ptr("updated_configuration_one"),
+		Name:               Ptr("updated configuration one"),
 		ComputeService:     Ptr(ComputeService("none")),
-		NetworkSettingsIDs: []string{"456789ABDCEF123", "56789ABDCEF1234"},
+		NetworkSettingsIDs: []string{"456789ABDCEF123"},
 		CreatedOn:          &Timestamp{time.Date(2024, 12, 10, 19, 00, 15, 0, time.UTC)},
 	}
 	if !cmp.Equal(configuration, want) {
 		t.Errorf("Enterprise.UpdateEnterpriseNetworkConfiguration mismatch (-want +get)\n%s", cmp.Diff(want, configuration))
 	}
 
+	validationTest := []struct {
+		name    string
+		request NetworkConfigurationRequest
+		want    string
+	}{
+		{
+			name: "invalid network settings id",
+			request: NetworkConfigurationRequest{
+				Name:               Ptr(""),
+				NetworkSettingsIDs: []string{"56789ABDCEF1234"},
+			},
+			want: "validation failed: must be between 1 and 100 characters",
+		},
+		{
+			name: "invalid network settings id",
+			request: NetworkConfigurationRequest{
+				Name: Ptr("updated-configuration-one"),
+			},
+			want: "validation failed: exactly one network settings id must be specified",
+		},
+		{
+			name: "invalid compute service",
+			request: NetworkConfigurationRequest{
+				Name:               Ptr("updated-configuration-one"),
+				ComputeService:     Ptr(ComputeService("something")),
+				NetworkSettingsIDs: []string{"56789ABDCEF1234"},
+			},
+			want: "validation failed: compute service can only be one of: none, actions",
+		},
+	}
+	for _, tc := range validationTest {
+		_, _, err = client.Enterprise.UpdateEnterpriseNetworkConfiguration(ctx, "e", "123456789ABCDEF", tc.request)
+		if err == nil || err.Error() != tc.want {
+			t.Errorf("expected error to be %v, got %v", tc.want, err)
+		}
+	}
+
 	const methodName = "UpdateEnterpriseNetworkConfiguration"
 	testBadOptions(t, methodName, func() error {
 		_, _, err = client.Enterprise.UpdateEnterpriseNetworkConfiguration(ctx, "\ne", "123456789ABCDEF", req)
@@ -308,7 +378,7 @@ func TestEnterpriseService_GetEnterpriseNetworkSettingsResource(t *testing.T) {
 		t.Errorf("Enterprise.GetEnterpriseNetworkSettingsResource returned error %v", err)
 	}
 
-	want := &EnterpriseNetworkSettingsResource{
+	want := &NetworkSettingsResource{
 		ID:                     Ptr("220F78DACB92BBFBC5E6F22DE1CCF52309D"),
 		NetworkConfigurationID: Ptr("934E208B3EE0BD60CF5F752C426BFB53562"),
 		Name:                   Ptr("my_network_settings"),
diff --git a/github/event_types_test.go b/github/event_types_test.go
index 947f9702..296c1d35 100644
--- a/github/event_types_test.go
+++ b/github/event_types_test.go
@@ -9637,11 +9637,12 @@ func TestRepositoryRulesetEvent_Unmarshal(t *testing.T) {
 								MergeMethodRebase,
 								MergeMethodMerge,
 							},
-							DismissStaleReviewsOnPush:      false,
-							RequireCodeOwnerReview:         false,
-							RequireLastPushApproval:        false,
-							RequiredApprovingReviewCount:   2,
-							RequiredReviewThreadResolution: false,
+							AutomaticCopilotCodeReviewEnabled: Ptr(false),
+							DismissStaleReviewsOnPush:         false,
+							RequireCodeOwnerReview:            false,
+							RequireLastPushApproval:           false,
+							RequiredApprovingReviewCount:      2,
+							RequiredReviewThreadResolution:    false,
 						},
 						CodeScanning: &CodeScanningRuleParameters{
 							CodeScanningTools: []*RuleCodeScanningTool{
@@ -9699,11 +9700,12 @@ func TestRepositoryRulesetEvent_Unmarshal(t *testing.T) {
 								MergeMethodSquash,
 								MergeMethodRebase,
 							},
-							DismissStaleReviewsOnPush:      false,
-							RequireCodeOwnerReview:         false,
-							RequireLastPushApproval:        false,
-							RequiredApprovingReviewCount:   2,
-							RequiredReviewThreadResolution: false,
+							AutomaticCopilotCodeReviewEnabled: Ptr(false),
+							DismissStaleReviewsOnPush:         false,
+							RequireCodeOwnerReview:            false,
+							RequireLastPushApproval:           false,
+							RequiredApprovingReviewCount:      2,
+							RequiredReviewThreadResolution:    false,
 						},
 						CodeScanning: &CodeScanningRuleParameters{
 							CodeScanningTools: []*RuleCodeScanningTool{
@@ -9753,11 +9755,12 @@ func TestRepositoryRulesetEvent_Unmarshal(t *testing.T) {
 											MergeMethodSquash,
 											MergeMethodRebase,
 										},
-										DismissStaleReviewsOnPush:      false,
-										RequireCodeOwnerReview:         false,
-										RequireLastPushApproval:        false,
-										RequiredApprovingReviewCount:   2,
-										RequiredReviewThreadResolution: false,
+										AutomaticCopilotCodeReviewEnabled: Ptr(false),
+										DismissStaleReviewsOnPush:         false,
+										RequireCodeOwnerReview:            false,
+										RequireLastPushApproval:           false,
+										RequiredApprovingReviewCount:      2,
+										RequiredReviewThreadResolution:    false,
 									},
 								},
 								Changes: &RepositoryRulesetChangedRule{
@@ -10746,6 +10749,7 @@ func TestMergeGroupEvent_Marshal(t *testing.T) {
 
 	u := &MergeGroupEvent{
 		Action: Ptr("a"),
+		Reason: Ptr("r"),
 		MergeGroup: &MergeGroup{
 			HeadSHA:    Ptr("hs"),
 			HeadRef:    Ptr("hr"),
@@ -10886,6 +10890,7 @@ func TestMergeGroupEvent_Marshal(t *testing.T) {
 
 	want := `{
 		"action": "a",
+		"reason": "r",
 		"merge_group": {
 			"head_sha": "hs",
 			"head_ref": "hr",
diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go
index 66132f57..b2e42329 100644
--- a/github/github-accessors_test.go
+++ b/github/github-accessors_test.go
@@ -11118,132 +11118,6 @@ func TestEnterprise_GetWebsiteURL(tt *testing.T) {
 	e.GetWebsiteURL()
 }
 
-func TestEnterpriseNetworkConfiguration_GetComputeService(tt *testing.T) {
-	tt.Parallel()
-	e := &EnterpriseNetworkConfiguration{}
-	e.GetComputeService()
-	e = nil
-	e.GetComputeService()
-}
-
-func TestEnterpriseNetworkConfiguration_GetCreatedOn(tt *testing.T) {
-	tt.Parallel()
-	var zeroValue Timestamp
-	e := &EnterpriseNetworkConfiguration{CreatedOn: &zeroValue}
-	e.GetCreatedOn()
-	e = &EnterpriseNetworkConfiguration{}
-	e.GetCreatedOn()
-	e = nil
-	e.GetCreatedOn()
-}
-
-func TestEnterpriseNetworkConfiguration_GetID(tt *testing.T) {
-	tt.Parallel()
-	var zeroValue string
-	e := &EnterpriseNetworkConfiguration{ID: &zeroValue}
-	e.GetID()
-	e = &EnterpriseNetworkConfiguration{}
-	e.GetID()
-	e = nil
-	e.GetID()
-}
-
-func TestEnterpriseNetworkConfiguration_GetName(tt *testing.T) {
-	tt.Parallel()
-	var zeroValue string
-	e := &EnterpriseNetworkConfiguration{Name: &zeroValue}
-	e.GetName()
-	e = &EnterpriseNetworkConfiguration{}
-	e.GetName()
-	e = nil
-	e.GetName()
-}
-
-func TestEnterpriseNetworkConfigurationRequest_GetComputeService(tt *testing.T) {
-	tt.Parallel()
-	e := &EnterpriseNetworkConfigurationRequest{}
-	e.GetComputeService()
-	e = nil
-	e.GetComputeService()
-}
-
-func TestEnterpriseNetworkConfigurationRequest_GetName(tt *testing.T) {
-	tt.Parallel()
-	var zeroValue string
-	e := &EnterpriseNetworkConfigurationRequest{Name: &zeroValue}
-	e.GetName()
-	e = &EnterpriseNetworkConfigurationRequest{}
-	e.GetName()
-	e = nil
-	e.GetName()
-}
-
-func TestEnterpriseNetworkConfigurations_GetTotalCount(tt *testing.T) {
-	tt.Parallel()
-	var zeroValue int64
-	e := &EnterpriseNetworkConfigurations{TotalCount: &zeroValue}
-	e.GetTotalCount()
-	e = &EnterpriseNetworkConfigurations{}
-	e.GetTotalCount()
-	e = nil
-	e.GetTotalCount()
-}
-
-func TestEnterpriseNetworkSettingsResource_GetID(tt *testing.T) {
-	tt.Parallel()
-	var zeroValue string
-	e := &EnterpriseNetworkSettingsResource{ID: &zeroValue}
-	e.GetID()
-	e = &EnterpriseNetworkSettingsResource{}
-	e.GetID()
-	e = nil
-	e.GetID()
-}
-
-func TestEnterpriseNetworkSettingsResource_GetName(tt *testing.T) {
-	tt.Parallel()
-	var zeroValue string
-	e := &EnterpriseNetworkSettingsResource{Name: &zeroValue}
-	e.GetName()
-	e = &EnterpriseNetworkSettingsResource{}
-	e.GetName()
-	e = nil
-	e.GetName()
-}
-
-func TestEnterpriseNetworkSettingsResource_GetNetworkConfigurationID(tt *testing.T) {
-	tt.Parallel()
-	var zeroValue string
-	e := &EnterpriseNetworkSettingsResource{NetworkConfigurationID: &zeroValue}
-	e.GetNetworkConfigurationID()
-	e = &EnterpriseNetworkSettingsResource{}
-	e.GetNetworkConfigurationID()
-	e = nil
-	e.GetNetworkConfigurationID()
-}
-
-func TestEnterpriseNetworkSettingsResource_GetRegion(tt *testing.T) {
-	tt.Parallel()
-	var zeroValue string
-	e := &EnterpriseNetworkSettingsResource{Region: &zeroValue}
-	e.GetRegion()
-	e = &EnterpriseNetworkSettingsResource{}
-	e.GetRegion()
-	e = nil
-	e.GetRegion()
-}
-
-func TestEnterpriseNetworkSettingsResource_GetSubnetID(tt *testing.T) {
-	tt.Parallel()
-	var zeroValue string
-	e := &EnterpriseNetworkSettingsResource{SubnetID: &zeroValue}
-	e.GetSubnetID()
-	e = &EnterpriseNetworkSettingsResource{}
-	e.GetSubnetID()
-	e = nil
-	e.GetSubnetID()
-}
-
 func TestEnterpriseRunnerGroup_GetAllowsPublicRepositories(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue bool
@@ -18571,6 +18445,17 @@ func TestMergeGroupEvent_GetOrg(tt *testing.T) {
 	m.GetOrg()
 }
 
+func TestMergeGroupEvent_GetReason(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	m := &MergeGroupEvent{Reason: &zeroValue}
+	m.GetReason()
+	m = &MergeGroupEvent{}
+	m.GetReason()
+	m = nil
+	m.GetReason()
+}
+
 func TestMergeGroupEvent_GetRepo(tt *testing.T) {
 	tt.Parallel()
 	m := &MergeGroupEvent{}
@@ -19172,6 +19057,132 @@ func TestMostRecentInstance_GetState(tt *testing.T) {
 	m.GetState()
 }
 
+func TestNetworkConfiguration_GetComputeService(tt *testing.T) {
+	tt.Parallel()
+	n := &NetworkConfiguration{}
+	n.GetComputeService()
+	n = nil
+	n.GetComputeService()
+}
+
+func TestNetworkConfiguration_GetCreatedOn(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue Timestamp
+	n := &NetworkConfiguration{CreatedOn: &zeroValue}
+	n.GetCreatedOn()
+	n = &NetworkConfiguration{}
+	n.GetCreatedOn()
+	n = nil
+	n.GetCreatedOn()
+}
+
+func TestNetworkConfiguration_GetID(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	n := &NetworkConfiguration{ID: &zeroValue}
+	n.GetID()
+	n = &NetworkConfiguration{}
+	n.GetID()
+	n = nil
+	n.GetID()
+}
+
+func TestNetworkConfiguration_GetName(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	n := &NetworkConfiguration{Name: &zeroValue}
+	n.GetName()
+	n = &NetworkConfiguration{}
+	n.GetName()
+	n = nil
+	n.GetName()
+}
+
+func TestNetworkConfigurationRequest_GetComputeService(tt *testing.T) {
+	tt.Parallel()
+	n := &NetworkConfigurationRequest{}
+	n.GetComputeService()
+	n = nil
+	n.GetComputeService()
+}
+
+func TestNetworkConfigurationRequest_GetName(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	n := &NetworkConfigurationRequest{Name: &zeroValue}
+	n.GetName()
+	n = &NetworkConfigurationRequest{}
+	n.GetName()
+	n = nil
+	n.GetName()
+}
+
+func TestNetworkConfigurations_GetTotalCount(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue int64
+	n := &NetworkConfigurations{TotalCount: &zeroValue}
+	n.GetTotalCount()
+	n = &NetworkConfigurations{}
+	n.GetTotalCount()
+	n = nil
+	n.GetTotalCount()
+}
+
+func TestNetworkSettingsResource_GetID(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	n := &NetworkSettingsResource{ID: &zeroValue}
+	n.GetID()
+	n = &NetworkSettingsResource{}
+	n.GetID()
+	n = nil
+	n.GetID()
+}
+
+func TestNetworkSettingsResource_GetName(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	n := &NetworkSettingsResource{Name: &zeroValue}
+	n.GetName()
+	n = &NetworkSettingsResource{}
+	n.GetName()
+	n = nil
+	n.GetName()
+}
+
+func TestNetworkSettingsResource_GetNetworkConfigurationID(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	n := &NetworkSettingsResource{NetworkConfigurationID: &zeroValue}
+	n.GetNetworkConfigurationID()
+	n = &NetworkSettingsResource{}
+	n.GetNetworkConfigurationID()
+	n = nil
+	n.GetNetworkConfigurationID()
+}
+
+func TestNetworkSettingsResource_GetRegion(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	n := &NetworkSettingsResource{Region: &zeroValue}
+	n.GetRegion()
+	n = &NetworkSettingsResource{}
+	n.GetRegion()
+	n = nil
+	n.GetRegion()
+}
+
+func TestNetworkSettingsResource_GetSubnetID(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	n := &NetworkSettingsResource{SubnetID: &zeroValue}
+	n.GetSubnetID()
+	n = &NetworkSettingsResource{}
+	n.GetSubnetID()
+	n = nil
+	n.GetSubnetID()
+}
+
 func TestNewPullRequest_GetBase(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue string
@@ -20499,6 +20510,28 @@ func TestPackage_GetCreatedAt(tt *testing.T) {
 	p.GetCreatedAt()
 }
 
+func TestPackage_GetDescription(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &Package{Description: &zeroValue}
+	p.GetDescription()
+	p = &Package{}
+	p.GetDescription()
+	p = nil
+	p.GetDescription()
+}
+
+func TestPackage_GetEcosystem(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &Package{Ecosystem: &zeroValue}
+	p.GetEcosystem()
+	p = &Package{}
+	p.GetEcosystem()
+	p = nil
+	p.GetEcosystem()
+}
+
 func TestPackage_GetHTMLURL(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue string
@@ -20532,6 +20565,17 @@ func TestPackage_GetName(tt *testing.T) {
 	p.GetName()
 }
 
+func TestPackage_GetNamespace(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &Package{Namespace: &zeroValue}
+	p.GetNamespace()
+	p = &Package{}
+	p.GetNamespace()
+	p = nil
+	p.GetNamespace()
+}
+
 func TestPackage_GetOwner(tt *testing.T) {
 	tt.Parallel()
 	p := &Package{}
@@ -20567,14 +20611,6 @@ func TestPackage_GetRegistry(tt *testing.T) {
 	p.GetRegistry()
 }
 
-func TestPackage_GetRepository(tt *testing.T) {
-	tt.Parallel()
-	p := &Package{}
-	p.GetRepository()
-	p = nil
-	p.GetRepository()
-}
-
 func TestPackage_GetUpdatedAt(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue Timestamp
@@ -20670,6 +20706,58 @@ func TestPackageEvent_GetSender(tt *testing.T) {
 	p.GetSender()
 }
 
+func TestPackageEventContainerMetadata_GetLabels(tt *testing.T) {
+	tt.Parallel()
+	zeroValue := map[string]any{}
+	p := &PackageEventContainerMetadata{Labels: zeroValue}
+	p.GetLabels()
+	p = &PackageEventContainerMetadata{}
+	p.GetLabels()
+	p = nil
+	p.GetLabels()
+}
+
+func TestPackageEventContainerMetadata_GetManifest(tt *testing.T) {
+	tt.Parallel()
+	zeroValue := map[string]any{}
+	p := &PackageEventContainerMetadata{Manifest: zeroValue}
+	p.GetManifest()
+	p = &PackageEventContainerMetadata{}
+	p.GetManifest()
+	p = nil
+	p.GetManifest()
+}
+
+func TestPackageEventContainerMetadata_GetTag(tt *testing.T) {
+	tt.Parallel()
+	p := &PackageEventContainerMetadata{}
+	p.GetTag()
+	p = nil
+	p.GetTag()
+}
+
+func TestPackageEventContainerMetadataTag_GetDigest(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageEventContainerMetadataTag{Digest: &zeroValue}
+	p.GetDigest()
+	p = &PackageEventContainerMetadataTag{}
+	p.GetDigest()
+	p = nil
+	p.GetDigest()
+}
+
+func TestPackageEventContainerMetadataTag_GetName(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageEventContainerMetadataTag{Name: &zeroValue}
+	p.GetName()
+	p = &PackageEventContainerMetadataTag{}
+	p.GetName()
+	p = nil
+	p.GetName()
+}
+
 func TestPackageFile_GetAuthor(tt *testing.T) {
 	tt.Parallel()
 	p := &PackageFile{}
@@ -20851,76 +20939,428 @@ func TestPackageMetadata_GetPackageType(tt *testing.T) {
 	p.GetPackageType()
 }
 
-func TestPackageRegistry_GetAboutURL(tt *testing.T) {
+func TestPackageNPMMetadata_GetAuthor(tt *testing.T) {
 	tt.Parallel()
-	var zeroValue string
-	p := &PackageRegistry{AboutURL: &zeroValue}
-	p.GetAboutURL()
-	p = &PackageRegistry{}
-	p.GetAboutURL()
+	zeroValue := map[string]string{}
+	p := &PackageNPMMetadata{Author: zeroValue}
+	p.GetAuthor()
+	p = &PackageNPMMetadata{}
+	p.GetAuthor()
 	p = nil
-	p.GetAboutURL()
+	p.GetAuthor()
 }
 
-func TestPackageRegistry_GetName(tt *testing.T) {
+func TestPackageNPMMetadata_GetBin(tt *testing.T) {
 	tt.Parallel()
-	var zeroValue string
-	p := &PackageRegistry{Name: &zeroValue}
-	p.GetName()
-	p = &PackageRegistry{}
-	p.GetName()
+	zeroValue := map[string]any{}
+	p := &PackageNPMMetadata{Bin: zeroValue}
+	p.GetBin()
+	p = &PackageNPMMetadata{}
+	p.GetBin()
 	p = nil
-	p.GetName()
+	p.GetBin()
 }
 
-func TestPackageRegistry_GetType(tt *testing.T) {
+func TestPackageNPMMetadata_GetBugs(tt *testing.T) {
 	tt.Parallel()
-	var zeroValue string
-	p := &PackageRegistry{Type: &zeroValue}
-	p.GetType()
-	p = &PackageRegistry{}
-	p.GetType()
+	zeroValue := map[string]string{}
+	p := &PackageNPMMetadata{Bugs: zeroValue}
+	p.GetBugs()
+	p = &PackageNPMMetadata{}
+	p.GetBugs()
 	p = nil
-	p.GetType()
+	p.GetBugs()
 }
 
-func TestPackageRegistry_GetURL(tt *testing.T) {
+func TestPackageNPMMetadata_GetCommitOID(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue string
-	p := &PackageRegistry{URL: &zeroValue}
-	p.GetURL()
-	p = &PackageRegistry{}
-	p.GetURL()
+	p := &PackageNPMMetadata{CommitOID: &zeroValue}
+	p.GetCommitOID()
+	p = &PackageNPMMetadata{}
+	p.GetCommitOID()
 	p = nil
-	p.GetURL()
+	p.GetCommitOID()
 }
 
-func TestPackageRegistry_GetVendor(tt *testing.T) {
+func TestPackageNPMMetadata_GetDeletedByID(tt *testing.T) {
 	tt.Parallel()
-	var zeroValue string
-	p := &PackageRegistry{Vendor: &zeroValue}
-	p.GetVendor()
-	p = &PackageRegistry{}
-	p.GetVendor()
+	var zeroValue int64
+	p := &PackageNPMMetadata{DeletedByID: &zeroValue}
+	p.GetDeletedByID()
+	p = &PackageNPMMetadata{}
+	p.GetDeletedByID()
 	p = nil
-	p.GetVendor()
+	p.GetDeletedByID()
 }
 
-func TestPackageRelease_GetAuthor(tt *testing.T) {
+func TestPackageNPMMetadata_GetDependencies(tt *testing.T) {
 	tt.Parallel()
-	p := &PackageRelease{}
-	p.GetAuthor()
+	zeroValue := map[string]string{}
+	p := &PackageNPMMetadata{Dependencies: zeroValue}
+	p.GetDependencies()
+	p = &PackageNPMMetadata{}
+	p.GetDependencies()
 	p = nil
-	p.GetAuthor()
+	p.GetDependencies()
 }
 
-func TestPackageRelease_GetCreatedAt(tt *testing.T) {
+func TestPackageNPMMetadata_GetDescription(tt *testing.T) {
 	tt.Parallel()
-	var zeroValue Timestamp
-	p := &PackageRelease{CreatedAt: &zeroValue}
-	p.GetCreatedAt()
-	p = &PackageRelease{}
-	p.GetCreatedAt()
+	var zeroValue string
+	p := &PackageNPMMetadata{Description: &zeroValue}
+	p.GetDescription()
+	p = &PackageNPMMetadata{}
+	p.GetDescription()
+	p = nil
+	p.GetDescription()
+}
+
+func TestPackageNPMMetadata_GetDevDependencies(tt *testing.T) {
+	tt.Parallel()
+	zeroValue := map[string]string{}
+	p := &PackageNPMMetadata{DevDependencies: zeroValue}
+	p.GetDevDependencies()
+	p = &PackageNPMMetadata{}
+	p.GetDevDependencies()
+	p = nil
+	p.GetDevDependencies()
+}
+
+func TestPackageNPMMetadata_GetDirectories(tt *testing.T) {
+	tt.Parallel()
+	zeroValue := map[string]string{}
+	p := &PackageNPMMetadata{Directories: zeroValue}
+	p.GetDirectories()
+	p = &PackageNPMMetadata{}
+	p.GetDirectories()
+	p = nil
+	p.GetDirectories()
+}
+
+func TestPackageNPMMetadata_GetDist(tt *testing.T) {
+	tt.Parallel()
+	zeroValue := map[string]string{}
+	p := &PackageNPMMetadata{Dist: zeroValue}
+	p.GetDist()
+	p = &PackageNPMMetadata{}
+	p.GetDist()
+	p = nil
+	p.GetDist()
+}
+
+func TestPackageNPMMetadata_GetEngines(tt *testing.T) {
+	tt.Parallel()
+	zeroValue := map[string]string{}
+	p := &PackageNPMMetadata{Engines: zeroValue}
+	p.GetEngines()
+	p = &PackageNPMMetadata{}
+	p.GetEngines()
+	p = nil
+	p.GetEngines()
+}
+
+func TestPackageNPMMetadata_GetGitHead(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageNPMMetadata{GitHead: &zeroValue}
+	p.GetGitHead()
+	p = &PackageNPMMetadata{}
+	p.GetGitHead()
+	p = nil
+	p.GetGitHead()
+}
+
+func TestPackageNPMMetadata_GetHasShrinkwrap(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue bool
+	p := &PackageNPMMetadata{HasShrinkwrap: &zeroValue}
+	p.GetHasShrinkwrap()
+	p = &PackageNPMMetadata{}
+	p.GetHasShrinkwrap()
+	p = nil
+	p.GetHasShrinkwrap()
+}
+
+func TestPackageNPMMetadata_GetHomepage(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageNPMMetadata{Homepage: &zeroValue}
+	p.GetHomepage()
+	p = &PackageNPMMetadata{}
+	p.GetHomepage()
+	p = nil
+	p.GetHomepage()
+}
+
+func TestPackageNPMMetadata_GetID(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageNPMMetadata{ID: &zeroValue}
+	p.GetID()
+	p = &PackageNPMMetadata{}
+	p.GetID()
+	p = nil
+	p.GetID()
+}
+
+func TestPackageNPMMetadata_GetInstallationCommand(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageNPMMetadata{InstallationCommand: &zeroValue}
+	p.GetInstallationCommand()
+	p = &PackageNPMMetadata{}
+	p.GetInstallationCommand()
+	p = nil
+	p.GetInstallationCommand()
+}
+
+func TestPackageNPMMetadata_GetLicense(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageNPMMetadata{License: &zeroValue}
+	p.GetLicense()
+	p = &PackageNPMMetadata{}
+	p.GetLicense()
+	p = nil
+	p.GetLicense()
+}
+
+func TestPackageNPMMetadata_GetMain(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageNPMMetadata{Main: &zeroValue}
+	p.GetMain()
+	p = &PackageNPMMetadata{}
+	p.GetMain()
+	p = nil
+	p.GetMain()
+}
+
+func TestPackageNPMMetadata_GetMan(tt *testing.T) {
+	tt.Parallel()
+	zeroValue := map[string]any{}
+	p := &PackageNPMMetadata{Man: zeroValue}
+	p.GetMan()
+	p = &PackageNPMMetadata{}
+	p.GetMan()
+	p = nil
+	p.GetMan()
+}
+
+func TestPackageNPMMetadata_GetName(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageNPMMetadata{Name: &zeroValue}
+	p.GetName()
+	p = &PackageNPMMetadata{}
+	p.GetName()
+	p = nil
+	p.GetName()
+}
+
+func TestPackageNPMMetadata_GetNodeVersion(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageNPMMetadata{NodeVersion: &zeroValue}
+	p.GetNodeVersion()
+	p = &PackageNPMMetadata{}
+	p.GetNodeVersion()
+	p = nil
+	p.GetNodeVersion()
+}
+
+func TestPackageNPMMetadata_GetNPMUser(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageNPMMetadata{NPMUser: &zeroValue}
+	p.GetNPMUser()
+	p = &PackageNPMMetadata{}
+	p.GetNPMUser()
+	p = nil
+	p.GetNPMUser()
+}
+
+func TestPackageNPMMetadata_GetNPMVersion(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageNPMMetadata{NPMVersion: &zeroValue}
+	p.GetNPMVersion()
+	p = &PackageNPMMetadata{}
+	p.GetNPMVersion()
+	p = nil
+	p.GetNPMVersion()
+}
+
+func TestPackageNPMMetadata_GetOptionalDependencies(tt *testing.T) {
+	tt.Parallel()
+	zeroValue := map[string]string{}
+	p := &PackageNPMMetadata{OptionalDependencies: zeroValue}
+	p.GetOptionalDependencies()
+	p = &PackageNPMMetadata{}
+	p.GetOptionalDependencies()
+	p = nil
+	p.GetOptionalDependencies()
+}
+
+func TestPackageNPMMetadata_GetPeerDependencies(tt *testing.T) {
+	tt.Parallel()
+	zeroValue := map[string]string{}
+	p := &PackageNPMMetadata{PeerDependencies: zeroValue}
+	p.GetPeerDependencies()
+	p = &PackageNPMMetadata{}
+	p.GetPeerDependencies()
+	p = nil
+	p.GetPeerDependencies()
+}
+
+func TestPackageNPMMetadata_GetPublishedViaActions(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue bool
+	p := &PackageNPMMetadata{PublishedViaActions: &zeroValue}
+	p.GetPublishedViaActions()
+	p = &PackageNPMMetadata{}
+	p.GetPublishedViaActions()
+	p = nil
+	p.GetPublishedViaActions()
+}
+
+func TestPackageNPMMetadata_GetReadme(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageNPMMetadata{Readme: &zeroValue}
+	p.GetReadme()
+	p = &PackageNPMMetadata{}
+	p.GetReadme()
+	p = nil
+	p.GetReadme()
+}
+
+func TestPackageNPMMetadata_GetReleaseID(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue int64
+	p := &PackageNPMMetadata{ReleaseID: &zeroValue}
+	p.GetReleaseID()
+	p = &PackageNPMMetadata{}
+	p.GetReleaseID()
+	p = nil
+	p.GetReleaseID()
+}
+
+func TestPackageNPMMetadata_GetRepository(tt *testing.T) {
+	tt.Parallel()
+	zeroValue := map[string]string{}
+	p := &PackageNPMMetadata{Repository: zeroValue}
+	p.GetRepository()
+	p = &PackageNPMMetadata{}
+	p.GetRepository()
+	p = nil
+	p.GetRepository()
+}
+
+func TestPackageNPMMetadata_GetScripts(tt *testing.T) {
+	tt.Parallel()
+	zeroValue := map[string]any{}
+	p := &PackageNPMMetadata{Scripts: zeroValue}
+	p.GetScripts()
+	p = &PackageNPMMetadata{}
+	p.GetScripts()
+	p = nil
+	p.GetScripts()
+}
+
+func TestPackageNPMMetadata_GetVersion(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageNPMMetadata{Version: &zeroValue}
+	p.GetVersion()
+	p = &PackageNPMMetadata{}
+	p.GetVersion()
+	p = nil
+	p.GetVersion()
+}
+
+func TestPackageNugetMetadata_GetName(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageNugetMetadata{Name: &zeroValue}
+	p.GetName()
+	p = &PackageNugetMetadata{}
+	p.GetName()
+	p = nil
+	p.GetName()
+}
+
+func TestPackageRegistry_GetAboutURL(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageRegistry{AboutURL: &zeroValue}
+	p.GetAboutURL()
+	p = &PackageRegistry{}
+	p.GetAboutURL()
+	p = nil
+	p.GetAboutURL()
+}
+
+func TestPackageRegistry_GetName(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageRegistry{Name: &zeroValue}
+	p.GetName()
+	p = &PackageRegistry{}
+	p.GetName()
+	p = nil
+	p.GetName()
+}
+
+func TestPackageRegistry_GetType(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageRegistry{Type: &zeroValue}
+	p.GetType()
+	p = &PackageRegistry{}
+	p.GetType()
+	p = nil
+	p.GetType()
+}
+
+func TestPackageRegistry_GetURL(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageRegistry{URL: &zeroValue}
+	p.GetURL()
+	p = &PackageRegistry{}
+	p.GetURL()
+	p = nil
+	p.GetURL()
+}
+
+func TestPackageRegistry_GetVendor(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageRegistry{Vendor: &zeroValue}
+	p.GetVendor()
+	p = &PackageRegistry{}
+	p.GetVendor()
+	p = nil
+	p.GetVendor()
+}
+
+func TestPackageRelease_GetAuthor(tt *testing.T) {
+	tt.Parallel()
+	p := &PackageRelease{}
+	p.GetAuthor()
+	p = nil
+	p.GetAuthor()
+}
+
+func TestPackageRelease_GetCreatedAt(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue Timestamp
+	p := &PackageRelease{CreatedAt: &zeroValue}
+	p.GetCreatedAt()
+	p = &PackageRelease{}
+	p.GetCreatedAt()
 	p = nil
 	p.GetCreatedAt()
 }
@@ -21032,17 +21472,6 @@ func TestPackageVersion_GetAuthor(tt *testing.T) {
 	p.GetAuthor()
 }
 
-func TestPackageVersion_GetBody(tt *testing.T) {
-	tt.Parallel()
-	var zeroValue string
-	p := &PackageVersion{Body: &zeroValue}
-	p.GetBody()
-	p = &PackageVersion{}
-	p.GetBody()
-	p = nil
-	p.GetBody()
-}
-
 func TestPackageVersion_GetBodyHTML(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue string
@@ -21054,6 +21483,14 @@ func TestPackageVersion_GetBodyHTML(tt *testing.T) {
 	p.GetBodyHTML()
 }
 
+func TestPackageVersion_GetContainerMetadata(tt *testing.T) {
+	tt.Parallel()
+	p := &PackageVersion{}
+	p.GetContainerMetadata()
+	p = nil
+	p.GetContainerMetadata()
+}
+
 func TestPackageVersion_GetCreatedAt(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue Timestamp
@@ -21065,6 +21502,28 @@ func TestPackageVersion_GetCreatedAt(tt *testing.T) {
 	p.GetCreatedAt()
 }
 
+func TestPackageVersion_GetDeletedAt(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue Timestamp
+	p := &PackageVersion{DeletedAt: &zeroValue}
+	p.GetDeletedAt()
+	p = &PackageVersion{}
+	p.GetDeletedAt()
+	p = nil
+	p.GetDeletedAt()
+}
+
+func TestPackageVersion_GetDescription(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageVersion{Description: &zeroValue}
+	p.GetDescription()
+	p = &PackageVersion{}
+	p.GetDescription()
+	p = nil
+	p.GetDescription()
+}
+
 func TestPackageVersion_GetDraft(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue bool
@@ -21109,6 +21568,17 @@ func TestPackageVersion_GetInstallationCommand(tt *testing.T) {
 	p.GetInstallationCommand()
 }
 
+func TestPackageVersion_GetLicense(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageVersion{License: &zeroValue}
+	p.GetLicense()
+	p = &PackageVersion{}
+	p.GetLicense()
+	p = nil
+	p.GetLicense()
+}
+
 func TestPackageVersion_GetManifest(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue string
@@ -21120,14 +21590,6 @@ func TestPackageVersion_GetManifest(tt *testing.T) {
 	p.GetManifest()
 }
 
-func TestPackageVersion_GetMetadata(tt *testing.T) {
-	tt.Parallel()
-	p := &PackageVersion{}
-	p.GetMetadata()
-	p = nil
-	p.GetMetadata()
-}
-
 func TestPackageVersion_GetName(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue string
@@ -21139,6 +21601,14 @@ func TestPackageVersion_GetName(tt *testing.T) {
 	p.GetName()
 }
 
+func TestPackageVersion_GetNPMMetadata(tt *testing.T) {
+	tt.Parallel()
+	p := &PackageVersion{}
+	p.GetNPMMetadata()
+	p = nil
+	p.GetNPMMetadata()
+}
+
 func TestPackageVersion_GetPackageHTMLURL(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue string
@@ -21150,6 +21620,17 @@ func TestPackageVersion_GetPackageHTMLURL(tt *testing.T) {
 	p.GetPackageHTMLURL()
 }
 
+func TestPackageVersion_GetPackageURL(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageVersion{PackageURL: &zeroValue}
+	p.GetPackageURL()
+	p = &PackageVersion{}
+	p.GetPackageURL()
+	p = nil
+	p.GetPackageURL()
+}
+
 func TestPackageVersion_GetPrerelease(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue bool
@@ -21169,6 +21650,28 @@ func TestPackageVersion_GetRelease(tt *testing.T) {
 	p.GetRelease()
 }
 
+func TestPackageVersion_GetRubyMetadata(tt *testing.T) {
+	tt.Parallel()
+	zeroValue := map[string]any{}
+	p := &PackageVersion{RubyMetadata: zeroValue}
+	p.GetRubyMetadata()
+	p = &PackageVersion{}
+	p.GetRubyMetadata()
+	p = nil
+	p.GetRubyMetadata()
+}
+
+func TestPackageVersion_GetSourceURL(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageVersion{SourceURL: &zeroValue}
+	p.GetSourceURL()
+	p = &PackageVersion{}
+	p.GetSourceURL()
+	p = nil
+	p.GetSourceURL()
+}
+
 func TestPackageVersion_GetSummary(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue string
@@ -21246,6 +21749,99 @@ func TestPackageVersion_GetVersion(tt *testing.T) {
 	p.GetVersion()
 }
 
+func TestPackageVersionBody_GetInfo(tt *testing.T) {
+	tt.Parallel()
+	p := &PackageVersionBody{}
+	p.GetInfo()
+	p = nil
+	p.GetInfo()
+}
+
+func TestPackageVersionBody_GetRepo(tt *testing.T) {
+	tt.Parallel()
+	p := &PackageVersionBody{}
+	p.GetRepo()
+	p = nil
+	p.GetRepo()
+}
+
+func TestPackageVersionBodyInfo_GetCollection(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue bool
+	p := &PackageVersionBodyInfo{Collection: &zeroValue}
+	p.GetCollection()
+	p = &PackageVersionBodyInfo{}
+	p.GetCollection()
+	p = nil
+	p.GetCollection()
+}
+
+func TestPackageVersionBodyInfo_GetMode(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue int64
+	p := &PackageVersionBodyInfo{Mode: &zeroValue}
+	p.GetMode()
+	p = &PackageVersionBodyInfo{}
+	p.GetMode()
+	p = nil
+	p.GetMode()
+}
+
+func TestPackageVersionBodyInfo_GetName(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageVersionBodyInfo{Name: &zeroValue}
+	p.GetName()
+	p = &PackageVersionBodyInfo{}
+	p.GetName()
+	p = nil
+	p.GetName()
+}
+
+func TestPackageVersionBodyInfo_GetOID(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageVersionBodyInfo{OID: &zeroValue}
+	p.GetOID()
+	p = &PackageVersionBodyInfo{}
+	p.GetOID()
+	p = nil
+	p.GetOID()
+}
+
+func TestPackageVersionBodyInfo_GetPath(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageVersionBodyInfo{Path: &zeroValue}
+	p.GetPath()
+	p = &PackageVersionBodyInfo{}
+	p.GetPath()
+	p = nil
+	p.GetPath()
+}
+
+func TestPackageVersionBodyInfo_GetSize(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue int64
+	p := &PackageVersionBodyInfo{Size: &zeroValue}
+	p.GetSize()
+	p = &PackageVersionBodyInfo{}
+	p.GetSize()
+	p = nil
+	p.GetSize()
+}
+
+func TestPackageVersionBodyInfo_GetType(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue string
+	p := &PackageVersionBodyInfo{Type: &zeroValue}
+	p.GetType()
+	p = &PackageVersionBodyInfo{}
+	p.GetType()
+	p = nil
+	p.GetType()
+}
+
 func TestPage_GetAction(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue string
@@ -25204,6 +25800,17 @@ func TestPullRequestReviewThreadEvent_GetThread(tt *testing.T) {
 	p.GetThread()
 }
 
+func TestPullRequestRuleParameters_GetAutomaticCopilotCodeReviewEnabled(tt *testing.T) {
+	tt.Parallel()
+	var zeroValue bool
+	p := &PullRequestRuleParameters{AutomaticCopilotCodeReviewEnabled: &zeroValue}
+	p.GetAutomaticCopilotCodeReviewEnabled()
+	p = &PullRequestRuleParameters{}
+	p.GetAutomaticCopilotCodeReviewEnabled()
+	p = nil
+	p.GetAutomaticCopilotCodeReviewEnabled()
+}
+
 func TestPullRequestTargetEvent_GetAction(tt *testing.T) {
 	tt.Parallel()
 	var zeroValue string
diff --git a/github/github-stringify_test.go b/github/github-stringify_test.go
index e0944471..5abc381a 100644
--- a/github/github-stringify_test.go
+++ b/github/github-stringify_test.go
@@ -1136,17 +1136,19 @@ func TestPackage_String(t *testing.T) {
 		Name:           Ptr(""),
 		PackageType:    Ptr(""),
 		HTMLURL:        Ptr(""),
+		Visibility:     Ptr(""),
+		Owner:          &User{},
 		CreatedAt:      &Timestamp{},
 		UpdatedAt:      &Timestamp{},
-		Owner:          &User{},
+		Namespace:      Ptr(""),
+		Description:    Ptr(""),
+		Ecosystem:      Ptr(""),
 		PackageVersion: &PackageVersion{},
 		Registry:       &PackageRegistry{},
 		URL:            Ptr(""),
 		VersionCount:   Ptr(int64(0)),
-		Visibility:     Ptr(""),
-		Repository:     &Repository{},
 	}
-	want := `github.Package{ID:0, Name:"", PackageType:"", HTMLURL:"", CreatedAt:github.Timestamp{0001-01-01 00:00:00 +0000 UTC}, UpdatedAt:github.Timestamp{0001-01-01 00:00:00 +0000 UTC}, Owner:github.User{}, PackageVersion:github.PackageVersion{}, Registry:github.PackageRegistry{}, URL:"", VersionCount:0, Visibility:"", Repository:github.Repository{}}`
+	want := `github.Package{ID:0, Name:"", PackageType:"", HTMLURL:"", Visibility:"", Owner:github.User{}, CreatedAt:github.Timestamp{0001-01-01 00:00:00 +0000 UTC}, UpdatedAt:github.Timestamp{0001-01-01 00:00:00 +0000 UTC}, Namespace:"", Description:"", Ecosystem:"", PackageVersion:github.PackageVersion{}, Registry:github.PackageRegistry{}, URL:"", VersionCount:0}`
 	if got := v.String(); got != want {
 		t.Errorf("Package.String = %v, want %v", got, want)
 	}
@@ -1163,6 +1165,29 @@ func TestPackageContainerMetadata_String(t *testing.T) {
 	}
 }
 
+func TestPackageEventContainerMetadata_String(t *testing.T) {
+	t.Parallel()
+	v := PackageEventContainerMetadata{
+		Tag: &PackageEventContainerMetadataTag{},
+	}
+	want := `github.PackageEventContainerMetadata{Tag:github.PackageEventContainerMetadataTag{}}`
+	if got := v.String(); got != want {
+		t.Errorf("PackageEventContainerMetadata.String = %v, want %v", got, want)
+	}
+}
+
+func TestPackageEventContainerMetadataTag_String(t *testing.T) {
+	t.Parallel()
+	v := PackageEventContainerMetadataTag{
+		Name:   Ptr(""),
+		Digest: Ptr(""),
+	}
+	want := `github.PackageEventContainerMetadataTag{Name:"", Digest:""}`
+	if got := v.String(); got != want {
+		t.Errorf("PackageEventContainerMetadataTag.String = %v, want %v", got, want)
+	}
+}
+
 func TestPackageFile_String(t *testing.T) {
 	t.Parallel()
 	v := PackageFile{
@@ -1197,6 +1222,49 @@ func TestPackageMetadata_String(t *testing.T) {
 	}
 }
 
+func TestPackageNPMMetadata_String(t *testing.T) {
+	t.Parallel()
+	v := PackageNPMMetadata{
+		Name:                Ptr(""),
+		Version:             Ptr(""),
+		NPMUser:             Ptr(""),
+		Description:         Ptr(""),
+		GitHead:             Ptr(""),
+		Homepage:            Ptr(""),
+		License:             Ptr(""),
+		Main:                Ptr(""),
+		ID:                  Ptr(""),
+		NodeVersion:         Ptr(""),
+		NPMVersion:          Ptr(""),
+		HasShrinkwrap:       Ptr(false),
+		Keywords:            []string{""},
+		Files:               []string{""},
+		OS:                  []string{""},
+		CPU:                 []string{""},
+		Readme:              Ptr(""),
+		InstallationCommand: Ptr(""),
+		ReleaseID:           Ptr(int64(0)),
+		CommitOID:           Ptr(""),
+		PublishedViaActions: Ptr(false),
+		DeletedByID:         Ptr(int64(0)),
+	}
+	want := `github.PackageNPMMetadata{Name:"", Version:"", NPMUser:"", Description:"", GitHead:"", Homepage:"", License:"", Main:"", ID:"", NodeVersion:"", NPMVersion:"", HasShrinkwrap:false, Keywords:[""], Files:[""], OS:[""], CPU:[""], Readme:"", InstallationCommand:"", ReleaseID:0, CommitOID:"", PublishedViaActions:false, DeletedByID:0}`
+	if got := v.String(); got != want {
+		t.Errorf("PackageNPMMetadata.String = %v, want %v", got, want)
+	}
+}
+
+func TestPackageNugetMetadata_String(t *testing.T) {
+	t.Parallel()
+	v := PackageNugetMetadata{
+		Name: Ptr(""),
+	}
+	want := `github.PackageNugetMetadata{Name:""}`
+	if got := v.String(); got != want {
+		t.Errorf("PackageNugetMetadata.String = %v, want %v", got, want)
+	}
+}
+
 func TestPackageRegistry_String(t *testing.T) {
 	t.Parallel()
 	v := PackageRegistry{
@@ -1237,9 +1305,15 @@ func TestPackageVersion_String(t *testing.T) {
 	t.Parallel()
 	v := PackageVersion{
 		ID:                  Ptr(int64(0)),
+		Name:                Ptr(""),
+		URL:                 Ptr(""),
+		PackageHTMLURL:      Ptr(""),
+		License:             Ptr(""),
+		Description:         Ptr(""),
+		CreatedAt:           &Timestamp{},
+		UpdatedAt:           &Timestamp{},
 		Version:             Ptr(""),
 		Summary:             Ptr(""),
-		Body:                Ptr(""),
 		BodyHTML:            Ptr(""),
 		Release:             &PackageRelease{},
 		Manifest:            Ptr(""),
@@ -1249,21 +1323,49 @@ func TestPackageVersion_String(t *testing.T) {
 		TargetOID:           Ptr(""),
 		Draft:               Ptr(false),
 		Prerelease:          Ptr(false),
-		CreatedAt:           &Timestamp{},
-		UpdatedAt:           &Timestamp{},
+		ContainerMetadata:   &PackageEventContainerMetadata{},
+		NPMMetadata:         &PackageNPMMetadata{},
+		PackageURL:          Ptr(""),
 		Author:              &User{},
+		SourceURL:           Ptr(""),
 		InstallationCommand: Ptr(""),
-		Metadata:            &PackageMetadata{},
-		PackageHTMLURL:      Ptr(""),
-		Name:                Ptr(""),
-		URL:                 Ptr(""),
+		DeletedAt:           &Timestamp{},
 	}
-	want := `github.PackageVersion{ID:0, Version:"", Summary:"", Body:"", BodyHTML:"", Release:github.PackageRelease{}, Manifest:"", HTMLURL:"", TagName:"", TargetCommitish:"", TargetOID:"", Draft:false, Prerelease:false, CreatedAt:github.Timestamp{0001-01-01 00:00:00 +0000 UTC}, UpdatedAt:github.Timestamp{0001-01-01 00:00:00 +0000 UTC}, Author:github.User{}, InstallationCommand:"", Metadata:github.PackageMetadata{}, PackageHTMLURL:"", Name:"", URL:""}`
+	want := `github.PackageVersion{ID:0, Name:"", URL:"", PackageHTMLURL:"", License:"", Description:"", CreatedAt:github.Timestamp{0001-01-01 00:00:00 +0000 UTC}, UpdatedAt:github.Timestamp{0001-01-01 00:00:00 +0000 UTC}, Version:"", Summary:"", BodyHTML:"", Release:github.PackageRelease{}, Manifest:"", HTMLURL:"", TagName:"", TargetCommitish:"", TargetOID:"", Draft:false, Prerelease:false, ContainerMetadata:github.PackageEventContainerMetadata{}, NPMMetadata:github.PackageNPMMetadata{}, PackageURL:"", Author:github.User{}, SourceURL:"", InstallationCommand:"", DeletedAt:github.Timestamp{0001-01-01 00:00:00 +0000 UTC}}`
 	if got := v.String(); got != want {
 		t.Errorf("PackageVersion.String = %v, want %v", got, want)
 	}
 }
 
+func TestPackageVersionBody_String(t *testing.T) {
+	t.Parallel()
+	v := PackageVersionBody{
+		Repo: &Repository{},
+		Info: &PackageVersionBodyInfo{},
+	}
+	want := `github.PackageVersionBody{Repo:github.Repository{}, Info:github.PackageVersionBodyInfo{}}`
+	if got := v.String(); got != want {
+		t.Errorf("PackageVersionBody.String = %v, want %v", got, want)
+	}
+}
+
+func TestPackageVersionBodyInfo_String(t *testing.T) {
+	t.Parallel()
+	v := PackageVersionBodyInfo{
+		Type:       Ptr(""),
+		OID:        Ptr(""),
+		Mode:       Ptr(int64(0)),
+		Name:       Ptr(""),
+		Path:       Ptr(""),
+		Size:       Ptr(int64(0)),
+		Collection: Ptr(false),
+	}
+	want := `github.PackageVersionBodyInfo{Type:"", OID:"", Mode:0, Name:"", Path:"", Size:0, Collection:false}`
+	if got := v.String(); got != want {
+		t.Errorf("PackageVersionBodyInfo.String = %v, want %v", got, want)
+	}
+}
+
 func TestPageStats_String(t *testing.T) {
 	t.Parallel()
 	v := PageStats{
diff --git a/github/orgs_network_configurations_test.go b/github/orgs_network_configurations_test.go
new file mode 100644
index 00000000..51fec33f
--- /dev/null
+++ b/github/orgs_network_configurations_test.go
@@ -0,0 +1,489 @@
+// Copyright 2025 The go-github AUTHORS. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package github
+
+import (
+	"context"
+	"fmt"
+	"net/http"
+	"testing"
+	"time"
+
+	"github.com/google/go-cmp/cmp"
+)
+
+func TestOrganizationsService_ListOrgsNetworkConfigurations(t *testing.T) {
+	t.Parallel()
+	client, mux, _ := setup(t)
+
+	mux.HandleFunc("/orgs/o/settings/network-configurations", func(w http.ResponseWriter, r *http.Request) {
+		testMethod(t, r, "GET")
+		testFormValues(t, r, values{"page": "1", "per_page": "3"})
+		fmt.Fprintf(w, `{
+		  "total_count": 3,
+		  "network_configurations": [
+			{
+			  "id": "123456789ABCDEF",
+			  "name": "Network Configuration One",
+			  "compute_service": "actions",
+			  "network_settings_ids": [
+				"23456789ABDCEF1",
+				"3456789ABDCEF12"
+			  ],
+			  "created_on": "2024-04-09T17:30:15Z"
+			},
+			{
+			  "id": "456789ABDCEF123",
+			  "name": "Network Configuration Two",
+			  "compute_service": "none",
+			  "network_settings_ids": [
+				"56789ABDCEF1234",
+				"6789ABDCEF12345"
+			  ],
+			  "created_on": "2024-11-02T4:30:30Z"
+			},
+			{
+			  "id": "789ABDCEF123456",
+			  "name": "Network Configuration Three",
+			  "compute_service": "codespaces",
+			  "network_settings_ids": [
+				"56789ABDCEF1234",
+				"6789ABDCEF12345"
+			  ],
+			  "created_on": "2024-12-10T19:30:45Z"
+			}
+		  ]
+		}`)
+	})
+
+	ctx := context.Background()
+
+	opts := &ListOptions{Page: 1, PerPage: 3}
+	configurations, _, err := client.Organizations.ListNetworkConfigurations(ctx, "o", opts)
+	if err != nil {
+		t.Errorf("Organizations.ListNetworkConfigurations returned error %v", err)
+	}
+	want := &NetworkConfigurations{
+		TotalCount: Ptr(int64(3)),
+		NetworkConfigurations: []*NetworkConfiguration{
+			{
+				ID:             Ptr("123456789ABCDEF"),
+				Name:           Ptr("Network Configuration One"),
+				ComputeService: Ptr(ComputeService("actions")),
+				NetworkSettingsIDs: []string{
+					"23456789ABDCEF1",
+					"3456789ABDCEF12",
+				},
+				CreatedOn: &Timestamp{time.Date(2024, 4, 9, 17, 30, 15, 0, time.UTC)},
+			},
+			{
+				ID:             Ptr("456789ABDCEF123"),
+				Name:           Ptr("Network Configuration Two"),
+				ComputeService: Ptr(ComputeService("none")),
+				NetworkSettingsIDs: []string{
+					"56789ABDCEF1234",
+					"6789ABDCEF12345",
+				},
+				CreatedOn: &Timestamp{time.Date(2024, 11, 2, 4, 30, 30, 0, time.UTC)},
+			},
+			{
+				ID:             Ptr("789ABDCEF123456"),
+				Name:           Ptr("Network Configuration Three"),
+				ComputeService: Ptr(ComputeService("codespaces")),
+				NetworkSettingsIDs: []string{
+					"56789ABDCEF1234",
+					"6789ABDCEF12345",
+				},
+				CreatedOn: &Timestamp{time.Date(2024, 12, 10, 19, 30, 45, 0, time.UTC)},
+			},
+		},
+	}
+	if !cmp.Equal(want, configurations) {
+		t.Errorf("Organizations.ListNetworkConfigurations mismatch (-want +got):\n%s", cmp.Diff(want, configurations))
+	}
+
+	const methodName = "ListNetworkConfigurations"
+	testBadOptions(t, methodName, func() (err error) {
+		_, _, err = client.Organizations.ListNetworkConfigurations(ctx, "\no", opts)
+		return err
+	})
+
+	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
+		got, resp, err := client.Organizations.ListNetworkConfigurations(ctx, "o", opts)
+		if got != nil {
+			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
+		}
+		return resp, err
+	})
+}
+
+func TestOrganizationsService_CreateOrgsNetworkConfiguration(t *testing.T) {
+	t.Parallel()
+	client, mux, _ := setup(t)
+
+	mux.HandleFunc("/orgs/o/settings/network-configurations", func(w http.ResponseWriter, r *http.Request) {
+		testMethod(t, r, "POST")
+		fmt.Fprintf(w, `{
+		  "id": "456789ABDCEF123",
+		  "name": "network-configuration-two",
+		  "compute_service": "none",
+		  "network_settings_ids": [
+			"56789ABDCEF1234"
+		  ],
+		  "created_on": "2024-11-02T4:30:30Z"
+		}`)
+	})
+
+	ctx := context.Background()
+
+	req := NetworkConfigurationRequest{
+		Name:           Ptr("network-configuration-two"),
+		ComputeService: Ptr(ComputeService("none")),
+		NetworkSettingsIDs: []string{
+			"56789ABDCEF1234",
+		},
+	}
+
+	configuration, _, err := client.Organizations.CreateNetworkConfiguration(ctx, "o", req)
+	if err != nil {
+		t.Errorf("Organizations.CreateNetworkConfiguration returned error %v", err)
+	}
+
+	want := &NetworkConfiguration{
+		ID:             Ptr("456789ABDCEF123"),
+		Name:           Ptr("network-configuration-two"),
+		ComputeService: Ptr(ComputeService("none")),
+		NetworkSettingsIDs: []string{
+			"56789ABDCEF1234",
+		},
+		CreatedOn: &Timestamp{time.Date(2024, 11, 2, 4, 30, 30, 0, time.UTC)},
+	}
+
+	if !cmp.Equal(want, configuration) {
+		t.Errorf("Organizations.CreateNetworkConfiguration mismatch (-want +got):\n%s", cmp.Diff(want, configuration))
+	}
+
+	validationTests := []struct {
+		name    string
+		request NetworkConfigurationRequest
+		want    string
+	}{
+		{
+			name: "invalid network configuration name length",
+			request: NetworkConfigurationRequest{
+				Name:           Ptr(""),
+				ComputeService: Ptr(ComputeService("none")),
+				NetworkSettingsIDs: []string{
+					"56789ABDCEF1234",
+				},
+			},
+			want: "validation failed: must be between 1 and 100 characters",
+		},
+		{
+			name: "invalid network configuration name",
+			// may only contain upper and lowercase letters a-z, numbers 0-9, '.', '-', and '_'.
+			request: NetworkConfigurationRequest{
+				Name: Ptr("network configuration two"),
+				NetworkSettingsIDs: []string{
+					"56789ABDCEF1234",
+				},
+			},
+			want: "validation failed: may only contain upper and lowercase letters a-z, numbers 0-9, '.', '-', and '_'",
+		},
+		{
+			name: "invalid network settings ids",
+			request: NetworkConfigurationRequest{
+				Name:           Ptr("network-configuration-two"),
+				ComputeService: Ptr(ComputeService("none")),
+				NetworkSettingsIDs: []string{
+					"56789ABDCEF1234",
+					"3456789ABDCEF12",
+				},
+			},
+			want: "validation failed: exactly one network settings id must be specified",
+		},
+		{
+			name: "invalid compute service",
+			request: NetworkConfigurationRequest{
+				Name:           Ptr("network-configuration-two"),
+				ComputeService: Ptr(ComputeService("codespaces")),
+				NetworkSettingsIDs: []string{
+					"56789ABDCEF1234",
+				},
+			},
+			want: "validation failed: compute service can only be one of: none, actions",
+		},
+	}
+
+	for _, tc := range validationTests {
+		_, _, err := client.Organizations.CreateNetworkConfiguration(ctx, "o", tc.request)
+		if err == nil || err.Error() != tc.want {
+			t.Errorf("expected error to be %v, got %v", tc.want, err)
+		}
+	}
+
+	const methodName = "CreateNetworkConfiguration"
+	testBadOptions(t, methodName, func() (err error) {
+		_, _, err = client.Organizations.CreateNetworkConfiguration(ctx, "\no", req)
+		return err
+	})
+
+	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
+		got, resp, err := client.Organizations.CreateNetworkConfiguration(ctx, "o", req)
+		if got != nil {
+			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
+		}
+		return resp, err
+	})
+}
+
+func TestOrganizationsService_GetOrgsNetworkConfiguration(t *testing.T) {
+	t.Parallel()
+	client, mux, _ := setup(t)
+
+	mux.HandleFunc("/orgs/o/settings/network-configurations/789ABDCEF123456", func(w http.ResponseWriter, r *http.Request) {
+		testMethod(t, r, "GET")
+		fmt.Fprintf(w, `{
+			 "id": "789ABDCEF123456",
+			  "name": "Network Configuration Three",
+			  "compute_service": "codespaces",
+			  "network_settings_ids": [
+				"56789ABDCEF1234",
+				"6789ABDCEF12345"
+			  ],
+			  "created_on": "2024-12-10T19:30:45Z"
+		}`)
+	})
+
+	ctx := context.Background()
+
+	configuration, _, err := client.Organizations.GetNetworkConfiguration(ctx, "o", "789ABDCEF123456")
+	if err != nil {
+		t.Errorf("Organizations.GetNetworkConfiguration returned error: %v", err)
+	}
+	want := &NetworkConfiguration{
+		ID:             Ptr("789ABDCEF123456"),
+		Name:           Ptr("Network Configuration Three"),
+		ComputeService: Ptr(ComputeService("codespaces")),
+		NetworkSettingsIDs: []string{
+			"56789ABDCEF1234",
+			"6789ABDCEF12345",
+		},
+		CreatedOn: &Timestamp{time.Date(2024, 12, 10, 19, 30, 45, 0, time.UTC)},
+	}
+	if !cmp.Equal(want, configuration) {
+		t.Errorf("Organizations.GetNetworkConfiguration mismatch (-want +got):\n%s", cmp.Diff(want, configuration))
+	}
+
+	const methodName = "GetNetworkConfiguration"
+	testBadOptions(t, methodName, func() (err error) {
+		_, _, err = client.Organizations.GetNetworkConfiguration(ctx, "\no", "789ABDCEF123456")
+		return err
+	})
+
+	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
+		got, resp, err := client.Organizations.GetNetworkConfiguration(ctx, "o", "789ABDCEF123456")
+		if got != nil {
+			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
+		}
+		return resp, err
+	})
+}
+
+func TestOrganizationsService_UpdateOrgsNetworkConfiguration(t *testing.T) {
+	t.Parallel()
+	client, mux, _ := setup(t)
+
+	mux.HandleFunc("/orgs/o/settings/network-configurations/789ABDCEF123456", func(w http.ResponseWriter, r *http.Request) {
+		testMethod(t, r, "PATCH")
+		fmt.Fprintf(w, `{
+		  "id": "789ABDCEF123456",
+		  "name": "Network Configuration Three Update",
+		  "compute_service": "actions",
+		  "network_settings_ids": [
+			"56789ABDCEF1234",
+			"6789ABDCEF12345"
+		  ],
+		  "created_on": "2024-12-10T19:30:45Z"
+		}`)
+	})
+
+	ctx := context.Background()
+
+	req := NetworkConfigurationRequest{
+		Name:           Ptr("network-configuration-three-update"),
+		ComputeService: Ptr(ComputeService("actions")),
+		NetworkSettingsIDs: []string{
+			"56789ABDCEF1234",
+		},
+	}
+	configuration, _, err := client.Organizations.UpdateNetworkConfiguration(ctx, "o", "789ABDCEF123456", req)
+	if err != nil {
+		t.Errorf("Organizations.UpdateNetworkConfiguration returned error: %v", err)
+	}
+
+	want := &NetworkConfiguration{
+		ID:             Ptr("789ABDCEF123456"),
+		Name:           Ptr("Network Configuration Three Update"),
+		ComputeService: Ptr(ComputeService("actions")),
+		NetworkSettingsIDs: []string{
+			"56789ABDCEF1234",
+			"6789ABDCEF12345",
+		},
+		CreatedOn: &Timestamp{time.Date(2024, 12, 10, 19, 30, 45, 0, time.UTC)},
+	}
+	if !cmp.Equal(want, configuration) {
+		t.Errorf("Organizations.UpdateNetworkConfiguration mismatch (-want +got):\n%s", cmp.Diff(want, configuration))
+	}
+
+	validationTests := []struct {
+		name    string
+		request NetworkConfigurationRequest
+		want    string
+	}{
+		{
+			name: "invalid network configuration name length",
+			request: NetworkConfigurationRequest{
+				Name:           Ptr(""),
+				ComputeService: Ptr(ComputeService("none")),
+				NetworkSettingsIDs: []string{
+					"56789ABDCEF1234",
+				},
+			},
+			want: "validation failed: must be between 1 and 100 characters",
+		},
+		{
+			name: "invalid network configuration name",
+			// may only contain upper and lowercase letters a-z, numbers 0-9, '.', '-', and '_'.
+			request: NetworkConfigurationRequest{
+				Name: Ptr("network configuration three update"),
+				NetworkSettingsIDs: []string{
+					"56789ABDCEF1234",
+				},
+			},
+			want: "validation failed: may only contain upper and lowercase letters a-z, numbers 0-9, '.', '-', and '_'",
+		},
+		{
+			name: "invalid network settings ids",
+			request: NetworkConfigurationRequest{
+				Name:           Ptr("network-configuration-three-update"),
+				ComputeService: Ptr(ComputeService("none")),
+				NetworkSettingsIDs: []string{
+					"56789ABDCEF1234",
+					"3456789ABDCEF12",
+				},
+			},
+			want: "validation failed: exactly one network settings id must be specified",
+		},
+		{
+			name: "invalid compute service",
+			request: NetworkConfigurationRequest{
+				Name:           Ptr("network-configuration-three-update"),
+				ComputeService: Ptr(ComputeService("codespaces")),
+				NetworkSettingsIDs: []string{
+					"56789ABDCEF1234",
+				},
+			},
+			want: "validation failed: compute service can only be one of: none, actions",
+		},
+	}
+
+	for _, tc := range validationTests {
+		_, _, err := client.Organizations.UpdateNetworkConfiguration(ctx, "o", "789ABDCEF123456", tc.request)
+		if err == nil || err.Error() != tc.want {
+			t.Errorf("expected error to be %v, got %v", tc.want, err)
+		}
+	}
+
+	const methodName = "UpdateNetworkConfiguration"
+	testBadOptions(t, methodName, func() (err error) {
+		_, _, err = client.Organizations.UpdateNetworkConfiguration(ctx, "\no", "789ABDCEF123456", req)
+		return err
+	})
+
+	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
+		got, resp, err := client.Organizations.UpdateNetworkConfiguration(ctx, "o", "789ABDCEF123456", req)
+		if got != nil {
+			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
+		}
+		return resp, err
+	})
+}
+
+func TestOrganizationsService_DeleteOrgsNetworkConfiguration(t *testing.T) {
+	t.Parallel()
+	client, mux, _ := setup(t)
+
+	mux.HandleFunc("/orgs/o/settings/network-configurations/789ABDCEF123456", func(w http.ResponseWriter, r *http.Request) {
+		testMethod(t, r, "DELETE")
+	})
+
+	ctx := context.Background()
+	_, err := client.Organizations.DeleteNetworkConfigurations(ctx, "o", "789ABDCEF123456")
+	if err != nil {
+		t.Errorf("Organizations.DeleteNetworkConfigurations returned error %v", err)
+	}
+
+	const methodName = "DeleteNetworkConfigurations"
+	testBadOptions(t, methodName, func() error {
+		_, err = client.Organizations.DeleteNetworkConfigurations(ctx, "\ne", "123456789ABCDEF")
+		return err
+	})
+
+	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
+		return client.Organizations.DeleteNetworkConfigurations(ctx, "e", "123456789ABCDEF")
+	})
+}
+
+func TestOrganizationsService_GetOrgsNetworkConfigurationResource(t *testing.T) {
+	t.Parallel()
+	client, mux, _ := setup(t)
+
+	mux.HandleFunc("/orgs/o/settings/network-settings/789ABDCEF123456", func(w http.ResponseWriter, r *http.Request) {
+		testMethod(t, r, "GET")
+		fmt.Fprintf(w, `{
+		  "id": "220F78DACB92BBFBC5E6F22DE1CCF52309D",
+		  "network_configuration_id": "934E208B3EE0BD60CF5F752C426BFB53562",
+		  "name": "my_network_settings",
+		  "subnet_id": "/subscriptions/14839728-3ad9-43ab-bd2b-fa6ad0f75e2a/resourceGroups/my-rg/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/my-subnet",
+		  "region": "germanywestcentral"
+		}
+		`)
+	})
+
+	ctx := context.Background()
+
+	resource, _, err := client.Organizations.GetNetworkConfigurationResource(ctx, "o", "789ABDCEF123456")
+	if err != nil {
+		t.Errorf("Organizations.GetNetworkConfigurationResource returned error %v", err)
+	}
+
+	want := &NetworkSettingsResource{
+		ID:                     Ptr("220F78DACB92BBFBC5E6F22DE1CCF52309D"),
+		Name:                   Ptr("my_network_settings"),
+		NetworkConfigurationID: Ptr("934E208B3EE0BD60CF5F752C426BFB53562"),
+		SubnetID:               Ptr("/subscriptions/14839728-3ad9-43ab-bd2b-fa6ad0f75e2a/resourceGroups/my-rg/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/my-subnet"),
+		Region:                 Ptr("germanywestcentral"),
+	}
+
+	if !cmp.Equal(want, resource) {
+		t.Errorf("Organizations.GetNetworkConfigurationResource mismatch (-want +got):\n%s", cmp.Diff(want, resource))
+	}
+
+	const methodName = "GetNetworkConfiguration"
+	testBadOptions(t, methodName, func() (err error) {
+		_, _, err = client.Organizations.GetNetworkConfigurationResource(ctx, "\no", "789ABDCEF123456")
+		return err
+	})
+
+	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
+		got, resp, err := client.Organizations.GetNetworkConfigurationResource(ctx, "o", "789ABDCEF123456")
+		if got != nil {
+			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
+		}
+		return resp, err
+	})
+}
diff --git a/github/orgs_packages_test.go b/github/orgs_packages_test.go
index 836584a1..1bc72bc7 100644
--- a/github/orgs_packages_test.go
+++ b/github/orgs_packages_test.go
@@ -7,6 +7,7 @@ package github
 
 import (
 	"context"
+	"encoding/json"
 	"io"
 	"net/http"
 	"testing"
@@ -232,6 +233,15 @@ func TestOrganizationsService_ListPackagesVersions(t *testing.T) {
 	t.Parallel()
 	client, mux, _ := setup(t)
 
+	m := `{
+		"package_type": "container",
+		"container": {
+			"tags": [
+			"latest"
+			]
+		}
+	}`
+
 	// don't url escape the package name here since mux will convert it to a slash automatically
 	mux.HandleFunc("/orgs/o/packages/container/hello%2Fhello_docker/versions", func(w http.ResponseWriter, r *http.Request) {
 		testMethod(t, r, "GET")
@@ -245,14 +255,7 @@ func TestOrganizationsService_ListPackagesVersions(t *testing.T) {
 			  "created_at": `+referenceTimeStr+`,
 			  "updated_at": `+referenceTimeStr+`,
 			  "html_url": "https://github.com/users/octocat/packages/container/hello%2Fhello_docker/45763",
-			  "metadata": {
-				"package_type": "container",
-				"container": {
-				  "tags": [
-					"latest"
-				  ]
-				}
-			  }
+			  "metadata": `+m+`
 			}]`)
 		if err != nil {
 			t.Fatal("Failed to write test response: ", err)
@@ -276,12 +279,7 @@ func TestOrganizationsService_ListPackagesVersions(t *testing.T) {
 		CreatedAt:      &Timestamp{referenceTime},
 		UpdatedAt:      &Timestamp{referenceTime},
 		HTMLURL:        Ptr("https://github.com/users/octocat/packages/container/hello%2Fhello_docker/45763"),
-		Metadata: &PackageMetadata{
-			PackageType: Ptr("container"),
-			Container: &PackageContainerMetadata{
-				Tags: []string{"latest"},
-			},
-		},
+		Metadata:       json.RawMessage(m),
 	}}
 	if !cmp.Equal(packages, want) {
 		t.Errorf("Organizations.PackageGetAllVersions returned %+v, want %+v", packages, want)
@@ -306,6 +304,15 @@ func TestOrganizationsService_PackageGetVersion(t *testing.T) {
 	t.Parallel()
 	client, mux, _ := setup(t)
 
+	m := `{
+		"package_type": "container",
+		"container": {
+			"tags": [
+			"latest"
+			]
+		}
+	}`
+
 	// don't url escape the package name here since mux will convert it to a slash automatically
 	mux.HandleFunc("/orgs/o/packages/container/hello%2Fhello_docker/versions/45763", func(w http.ResponseWriter, r *http.Request) {
 		testMethod(t, r, "GET")
@@ -318,14 +325,7 @@ func TestOrganizationsService_PackageGetVersion(t *testing.T) {
 			  "created_at": `+referenceTimeStr+`,
 			  "updated_at": `+referenceTimeStr+`,
 			  "html_url": "https://github.com/users/octocat/packages/container/hello%2Fhello_docker/45763",
-			  "metadata": {
-				"package_type": "container",
-				"container": {
-				  "tags": [
-					"latest"
-				  ]
-				}
-			  }
+			  "metadata": `+m+`
 			}`)
 		if err != nil {
 			t.Fatal("Failed to write test response: ", err)
@@ -346,12 +346,7 @@ func TestOrganizationsService_PackageGetVersion(t *testing.T) {
 		CreatedAt:      &Timestamp{referenceTime},
 		UpdatedAt:      &Timestamp{referenceTime},
 		HTMLURL:        Ptr("https://github.com/users/octocat/packages/container/hello%2Fhello_docker/45763"),
-		Metadata: &PackageMetadata{
-			PackageType: Ptr("container"),
-			Container: &PackageContainerMetadata{
-				Tags: []string{"latest"},
-			},
-		},
+		Metadata:       json.RawMessage(m),
 	}
 	if !cmp.Equal(packages, want) {
 		t.Errorf("Organizations.PackageGetVersion returned %+v, want %+v", packages, want)
diff --git a/github/packages_test.go b/github/packages_test.go
index 718998f7..414ba503 100644
--- a/github/packages_test.go
+++ b/github/packages_test.go
@@ -5,7 +5,11 @@
 
 package github
 
-import "testing"
+import (
+	"encoding/json"
+	"reflect"
+	"testing"
+)
 
 func TestPackageRegistry_Marshal(t *testing.T) {
 	t.Parallel()
@@ -181,12 +185,22 @@ func TestPackageVersion_Marshal(t *testing.T) {
 	t.Parallel()
 	testJSONMarshal(t, &PackageVersion{}, "{}")
 
+	metadata, _ := json.Marshal([]string{"a", "b"})
+
 	o := &PackageVersion{
-		ID:       Ptr(int64(1)),
-		Version:  Ptr("ver"),
-		Summary:  Ptr("sum"),
-		Body:     Ptr("body"),
-		BodyHTML: Ptr("btnhtml"),
+		ID:             Ptr(int64(1)),
+		Name:           Ptr("n"),
+		URL:            Ptr("url"),
+		PackageHTMLURL: Ptr("phurl"),
+		License:        Ptr("l"),
+		Description:    Ptr("d"),
+		CreatedAt:      &Timestamp{referenceTime},
+		UpdatedAt:      &Timestamp{referenceTime},
+		Metadata:       metadata,
+		Version:        Ptr("ver"),
+		Summary:        Ptr("sum"),
+		Body:           json.RawMessage(`"body"`),
+		BodyHTML:       Ptr("btnhtml"),
 		Release: &PackageRelease{
 			URL:             Ptr("url"),
 			HTMLURL:         Ptr("hurl"),
@@ -226,8 +240,17 @@ func TestPackageVersion_Marshal(t *testing.T) {
 		TargetOID:       Ptr("tid"),
 		Draft:           Ptr(true),
 		Prerelease:      Ptr(true),
-		CreatedAt:       &Timestamp{referenceTime},
-		UpdatedAt:       &Timestamp{referenceTime},
+		ContainerMetadata: &PackageEventContainerMetadata{
+			Labels: map[string]any{"l1": true, "l2": "a"},
+		},
+		DockerMetadata: []interface{}{"a", "b"},
+		NPMMetadata: Ptr(PackageNPMMetadata{
+			Name: Ptr("n"),
+		}),
+		NugetMetadata: []*PackageNugetMetadata{
+			{Name: Ptr("n")},
+		},
+		RubyMetadata: map[string]any{"k1": "v1", "k2": "v2"},
 		PackageFiles: []*PackageFile{
 			{
 				DownloadURL: Ptr("durl"),
@@ -263,6 +286,7 @@ func TestPackageVersion_Marshal(t *testing.T) {
 				UpdatedAt: &Timestamp{referenceTime},
 			},
 		},
+		PackageURL: Ptr("purl"),
 		Author: &User{
 			Login:           Ptr("l"),
 			ID:              Ptr(int64(1)),
@@ -283,11 +307,21 @@ func TestPackageVersion_Marshal(t *testing.T) {
 			CreatedAt:       &Timestamp{referenceTime},
 			SuspendedAt:     &Timestamp{referenceTime},
 		},
+		SourceURL:           Ptr("surl"),
 		InstallationCommand: Ptr("ic"),
+		DeletedAt:           &Timestamp{referenceTime},
 	}
 
 	want := `{
 		"id": 1,
+		"name": "n",
+		"url": "url",
+		"package_html_url": "phurl",
+		"license": "l",
+		"description": "d",
+		"created_at": ` + referenceTimeStr + `,
+		"updated_at": ` + referenceTimeStr + `,
+		"metadata": ["a", "b"],
 		"version": "ver",
 		"summary": "sum",
 		"body": "body",
@@ -331,8 +365,21 @@ func TestPackageVersion_Marshal(t *testing.T) {
 		"target_oid": "tid",
 		"draft": true,
 		"prerelease": true,
-		"created_at": ` + referenceTimeStr + `,
-		"updated_at": ` + referenceTimeStr + `,
+		"container_metadata": {
+			"labels": {
+				"l1": true,
+				"l2": "a"
+			}
+		},
+		"docker_metadata": ["a", "b"],
+		"npm_metadata": {
+			"name": "n"
+		},
+		"nuget_metadata": [{"name": "n"}],
+		"ruby_metadata": {
+			"k1": "v1",
+			"k2": "v2"
+		},
 		"package_files": [
 			{
 				"download_url": "durl",
@@ -368,6 +415,7 @@ func TestPackageVersion_Marshal(t *testing.T) {
 				"updated_at": ` + referenceTimeStr + `
 			}
 		],
+		"package_url": "purl",
 		"author": {
 			"login": "l",
 			"id": 1,
@@ -388,12 +436,230 @@ func TestPackageVersion_Marshal(t *testing.T) {
 			"suspended_at": ` + referenceTimeStr + `,
 			"url": "u"
 		},
-		"installation_command": "ic"
+		"source_url": "surl",
+		"installation_command": "ic",
+		"deleted_at": ` + referenceTimeStr + `
 	}`
 
 	testJSONMarshal(t, o, want)
 }
 
+func TestPackageVersion_GetBody(t *testing.T) {
+	t.Parallel()
+
+	tests := map[string]struct {
+		pv        *PackageVersion
+		wantValue string
+		wantOk    bool
+	}{
+		"pv nil": {
+			pv:        nil,
+			wantValue: "",
+			wantOk:    false,
+		},
+		"body nil": {
+			pv: &PackageVersion{
+				Body: nil,
+			},
+			wantValue: "",
+			wantOk:    false,
+		},
+		"invalid body": {
+			pv: &PackageVersion{
+				Body: json.RawMessage(`{
+					"repository": {
+						"name": "n"
+					},
+					"info": {
+						"type": "t"
+					}
+				}`),
+			},
+			wantValue: "",
+			wantOk:    false,
+		},
+		"valid body": {
+			pv: &PackageVersion{
+				Body: json.RawMessage(`"body"`),
+			},
+			wantValue: "body",
+			wantOk:    true,
+		},
+	}
+
+	for name, test := range tests {
+		t.Run(name, func(t *testing.T) {
+			t.Parallel()
+
+			resValue, resOk := test.pv.GetBody()
+
+			if resValue != test.wantValue || resOk != test.wantOk {
+				t.Errorf("PackageVersion.GetBody() - got: %v, %v; want: %v, %v", resValue, resOk, test.wantValue, test.wantOk)
+			}
+		})
+	}
+}
+
+func TestPackageVersion_GetBodyAsPackageVersionBody(t *testing.T) {
+	t.Parallel()
+
+	tests := map[string]struct {
+		pv        *PackageVersion
+		wantValue *PackageVersionBody
+		wantOk    bool
+	}{
+		"pv nil": {
+			pv:        nil,
+			wantValue: nil,
+			wantOk:    false,
+		},
+		"body nil": {
+			pv: &PackageVersion{
+				Body: nil,
+			},
+			wantValue: nil,
+			wantOk:    false,
+		},
+		"invalid body": {
+			pv: &PackageVersion{
+				Body: json.RawMessage(`"body"`),
+			},
+			wantValue: nil,
+			wantOk:    false,
+		},
+		"valid body": {
+			pv: &PackageVersion{
+				Body: json.RawMessage(`{
+					"repository": {
+						"name": "n"
+					},
+					"info": {
+						"type": "t"
+					}
+				}`),
+			},
+			wantValue: &PackageVersionBody{
+				Repo: &Repository{
+					Name: Ptr("n"),
+				},
+				Info: &PackageVersionBodyInfo{
+					Type: Ptr("t"),
+				},
+			},
+			wantOk: true,
+		},
+	}
+
+	for name, test := range tests {
+		t.Run(name, func(t *testing.T) {
+			t.Parallel()
+
+			resValue, resOk := test.pv.GetBodyAsPackageVersionBody()
+
+			if !reflect.DeepEqual(resValue, test.wantValue) || resOk != test.wantOk {
+				t.Errorf("PackageVersion.GetBodyAsPackageVersionBody() - got: %v, %v; want: %v, %v", resValue, resOk, test.wantValue, test.wantOk)
+			}
+		})
+	}
+}
+
+func TestPackageVersion_GetMetadata(t *testing.T) {
+	t.Parallel()
+
+	tests := map[string]struct {
+		pv        *PackageVersion
+		wantValue *PackageMetadata
+		wantOk    bool
+	}{
+		"pv nil": {
+			pv:        nil,
+			wantValue: nil,
+			wantOk:    false,
+		},
+		"metadata nil": {
+			pv: &PackageVersion{
+				Metadata: nil,
+			},
+			wantValue: nil,
+			wantOk:    false,
+		},
+		"invalid metadata": {
+			pv: &PackageVersion{
+				Metadata: json.RawMessage(`[]`),
+			},
+			wantValue: nil,
+			wantOk:    false,
+		},
+		"valid metadata": {
+			pv: &PackageVersion{
+				Metadata: json.RawMessage(`{
+					"package_type": "container",
+					"container": {
+						"tags": ["a"]
+					}
+				}`),
+			},
+			wantValue: &PackageMetadata{
+				PackageType: Ptr("container"),
+				Container: &PackageContainerMetadata{
+					Tags: []string{"a"},
+				},
+			},
+			wantOk: true,
+		},
+	}
+
+	for name, test := range tests {
+		t.Run(name, func(t *testing.T) {
+			t.Parallel()
+
+			resValue, resOk := test.pv.GetMetadata()
+
+			if !reflect.DeepEqual(resValue, test.wantValue) || resOk != test.wantOk {
+				t.Errorf("PackageVersion.GetMetadata() - got: %v, %v; want: %v, %v", resValue, resOk, test.wantValue, test.wantOk)
+			}
+		})
+	}
+}
+
+func TestPackageVersion_GetRawMetadata(t *testing.T) {
+	t.Parallel()
+
+	tests := map[string]struct {
+		pv   *PackageVersion
+		want json.RawMessage
+	}{
+		"pv nil": {
+			pv:   nil,
+			want: nil,
+		},
+		"metadata nil": {
+			pv: &PackageVersion{
+				Metadata: nil,
+			},
+			want: json.RawMessage{},
+		},
+		"valid metadata": {
+			pv: &PackageVersion{
+				Metadata: json.RawMessage(`"a"`),
+			},
+			want: json.RawMessage(`"a"`),
+		},
+	}
+
+	for name, test := range tests {
+		t.Run(name, func(t *testing.T) {
+			t.Parallel()
+
+			res := test.pv.GetRawMetadata()
+
+			if string(res) != string(test.want) {
+				t.Errorf("PackageVersion.GetRawMetadata() - got: %v; want: %v", res, test.want)
+			}
+		})
+	}
+}
+
 func TestPackage_Marshal(t *testing.T) {
 	t.Parallel()
 	testJSONMarshal(t, &Package{}, "{}")
@@ -403,8 +669,6 @@ func TestPackage_Marshal(t *testing.T) {
 		Name:        Ptr("name"),
 		PackageType: Ptr("pt"),
 		HTMLURL:     Ptr("hurl"),
-		CreatedAt:   &Timestamp{referenceTime},
-		UpdatedAt:   &Timestamp{referenceTime},
 		Visibility:  Ptr("private"),
 		Owner: &User{
 			Login:           Ptr("l"),
@@ -426,11 +690,16 @@ func TestPackage_Marshal(t *testing.T) {
 			CreatedAt:       &Timestamp{referenceTime},
 			SuspendedAt:     &Timestamp{referenceTime},
 		},
+		CreatedAt:   &Timestamp{referenceTime},
+		UpdatedAt:   &Timestamp{referenceTime},
+		Namespace:   Ptr("n"),
+		Description: Ptr("d"),
+		Ecosystem:   Ptr("e"),
 		PackageVersion: &PackageVersion{
 			ID:       Ptr(int64(1)),
 			Version:  Ptr("ver"),
 			Summary:  Ptr("sum"),
-			Body:     Ptr("body"),
+			Body:     json.RawMessage(`"body"`),
 			BodyHTML: Ptr("btnhtml"),
 			Release: &PackageRelease{
 				URL:             Ptr("url"),
@@ -537,6 +806,8 @@ func TestPackage_Marshal(t *testing.T) {
 			URL:      Ptr("url"),
 			Vendor:   Ptr("vendor"),
 		},
+		URL:          Ptr("url"),
+		VersionCount: Ptr(int64(1)),
 	}
 
 	want := `{
@@ -544,8 +815,6 @@ func TestPackage_Marshal(t *testing.T) {
 		"name": "name",
 		"package_type": "pt",
 		"html_url": "hurl",
-		"created_at": ` + referenceTimeStr + `,
-		"updated_at": ` + referenceTimeStr + `,
 		"visibility": "private",
 		"owner": {
 			"login": "l",
@@ -567,6 +836,11 @@ func TestPackage_Marshal(t *testing.T) {
 			"suspended_at": ` + referenceTimeStr + `,
 			"url": "u"
 		},
+		"created_at": ` + referenceTimeStr + `,
+		"updated_at": ` + referenceTimeStr + `,
+		"namespace": "n",
+		"description": "d",
+		"ecosystem": "e",
 		"package_version": {
 			"id": 1,
 			"version": "ver",
@@ -677,8 +951,341 @@ func TestPackage_Marshal(t *testing.T) {
 			"type": "type",
 			"url": "url",
 			"vendor": "vendor"
+		},
+		"url": "url",
+		"version_count": 1
+	}`
+
+	testJSONMarshal(t, o, want)
+}
+
+func TestPackageMetadata_Marshal(t *testing.T) {
+	t.Parallel()
+	testJSONMarshal(t, &PackageMetadata{}, "{}")
+
+	o := &PackageMetadata{
+		PackageType: Ptr("pt"),
+		Container: Ptr(PackageContainerMetadata{
+			Tags: []string{"a"},
+		}),
+	}
+
+	want := `{
+		"package_type": "pt",
+		"container": {
+			"tags": ["a"]
 		}
 	}`
 
 	testJSONMarshal(t, o, want)
 }
+
+func TestPackageContainerMetadata_Marshal(t *testing.T) {
+	t.Parallel()
+	testJSONMarshal(t, &PackageContainerMetadata{}, "{}")
+
+	o := &PackageContainerMetadata{
+		Tags: []string{"a", "b"},
+	}
+
+	want := `{
+		"tags": ["a","b"]
+	}`
+
+	testJSONMarshal(t, o, want)
+}
+
+func TestPackageVersionBody_Marshal(t *testing.T) {
+	t.Parallel()
+	testJSONMarshal(t, &PackageVersionBody{}, "{}")
+
+	o := &PackageVersionBody{
+		Repo: Ptr(Repository{
+			ID: Ptr(int64(1)),
+		}),
+		Info: Ptr(PackageVersionBodyInfo{
+			Type: Ptr("t"),
+		}),
+	}
+
+	want := `{
+		"repository": {
+			"id": 1
+		},
+		"info": {
+			"type": "t"
+		}
+	}`
+
+	testJSONMarshal(t, o, want)
+}
+
+func TestPackageVersionBodyInfo_Marshal(t *testing.T) {
+	t.Parallel()
+	testJSONMarshal(t, &PackageVersionBodyInfo{}, "{}")
+
+	o := &PackageVersionBodyInfo{
+		Type:       Ptr("t"),
+		OID:        Ptr("o"),
+		Mode:       Ptr(int64(1)),
+		Name:       Ptr("n"),
+		Path:       Ptr("p"),
+		Size:       Ptr(int64(1)),
+		Collection: Ptr(true),
+	}
+
+	want := `{
+		"type": "t",
+		"oid": "o",
+		"mode": 1,
+		"name": "n",
+		"path": "p",
+		"size": 1,
+		"collection": true
+	}`
+
+	testJSONMarshal(t, o, want)
+}
+
+func TestPackageEventContainerMetadata_Marshal(t *testing.T) {
+	t.Parallel()
+	testJSONMarshal(t, &PackageContainerMetadata{}, "{}")
+
+	o := &PackageEventContainerMetadata{
+		Labels: map[string]any{
+			"k": "v",
+		},
+		Manifest: map[string]any{
+			"k": 1,
+		},
+		Tag: &PackageEventContainerMetadataTag{
+			Name:   Ptr("n"),
+			Digest: Ptr("d"),
+		},
+	}
+
+	want := `{
+		"labels": {
+			"k": "v"
+		},
+		"manifest": {
+			"k": 1
+		},
+		"tag": {
+			"name": "n",
+			"digest": "d"
+		}
+	}`
+
+	testJSONMarshal(t, o, want)
+}
+
+func TestPackageEventContainerMetadataTag_Marshal(t *testing.T) {
+	t.Parallel()
+
+	testJSONMarshal(t, &PackageEventContainerMetadataTag{}, "{}")
+
+	o := &PackageEventContainerMetadataTag{
+		Name:   Ptr("n"),
+		Digest: Ptr("d"),
+	}
+
+	want := `{
+		"name": "n",
+		"digest": "d"
+	}`
+
+	testJSONMarshal(t, o, want)
+}
+
+func TestPackageNugetMetadata_Marshal(t *testing.T) {
+	t.Parallel()
+
+	o, _ := json.Marshal(map[string]string{
+		"k1": "v1",
+		"k2": "v2",
+	})
+
+	tests := map[string]struct {
+		input *PackageNugetMetadata
+		want  string
+	}{
+		"zero": {
+			input: &PackageNugetMetadata{},
+			want:  "{}",
+		},
+		"string": {
+			input: &PackageNugetMetadata{
+				ID:    json.RawMessage(`1`),
+				Name:  Ptr("n"),
+				Value: json.RawMessage(`"s"`),
+			},
+			want: `{
+				"id": 1,
+				"name": "n",
+				"value": "s"
+			}`,
+		},
+		"int": {
+			input: &PackageNugetMetadata{
+				ID:    json.RawMessage(`1`),
+				Name:  Ptr("n"),
+				Value: json.RawMessage(`1`),
+			},
+			want: `{
+				"id": 1,
+				"name": "n",
+				"value": 1
+			}`,
+		},
+		"object": {
+			input: &PackageNugetMetadata{
+				ID:    json.RawMessage(`1`),
+				Name:  Ptr("n"),
+				Value: o,
+			},
+			want: `{
+				"id": 1,
+				"name": "n",
+				"value": {
+					"k1": "v1",
+					"k2": "v2"
+				}
+			}`,
+		},
+	}
+
+	for name, test := range tests {
+		t.Run(name, func(t *testing.T) {
+			t.Parallel()
+			testJSONMarshal(t, test.input, test.want)
+		})
+	}
+}
+
+func TestPackageNPMMetadata_Marshal(t *testing.T) {
+	t.Parallel()
+
+	tests := map[string]struct {
+		input *PackageNPMMetadata
+		want  string
+	}{
+		"zero": {
+			input: &PackageNPMMetadata{},
+			want:  "{}",
+		},
+		"string": {
+			input: &PackageNPMMetadata{
+				Name:                 Ptr("n"),
+				Version:              Ptr("v"),
+				NPMUser:              Ptr("nu"),
+				Description:          Ptr("d"),
+				GitHead:              Ptr("gh"),
+				Homepage:             Ptr("h"),
+				License:              Ptr("l"),
+				Main:                 Ptr("m"),
+				ID:                   Ptr("id"),
+				NodeVersion:          Ptr("nv"),
+				NPMVersion:           Ptr("npmv"),
+				Readme:               Ptr("r"),
+				InstallationCommand:  Ptr("ic"),
+				CommitOID:            Ptr("coid"),
+				HasShrinkwrap:        Ptr(true),
+				PublishedViaActions:  Ptr(true),
+				ReleaseID:            Ptr(int64(1)),
+				DeletedByID:          Ptr(int64(1)),
+				Author:               map[string]string{"k1": "v1"},
+				Bugs:                 map[string]string{"k1": "v1"},
+				Dependencies:         map[string]string{"k1": "v1"},
+				DevDependencies:      map[string]string{"k1": "v1"},
+				PeerDependencies:     map[string]string{"k1": "v1"},
+				OptionalDependencies: map[string]string{"k1": "v1"},
+				Dist:                 map[string]string{"k1": "v1"},
+				Repository:           map[string]string{"k1": "v1"},
+				Engines:              map[string]string{"k1": "v1"},
+				Directories:          map[string]string{"k1": "v1"},
+				Scripts:              map[string]interface{}{"k1": 1},
+				Bin:                  map[string]interface{}{"k1": true},
+				Man:                  map[string]interface{}{"k1": "v1"},
+				Keywords:             []string{"kw1", "kw2"},
+				Files:                []string{"f1", "f2"},
+				OS:                   []string{"os1", "os2"},
+				CPU:                  []string{"cpu1", "cpu2"},
+				Maintainers:          []interface{}{"m1", "m2"},
+				Contributors:         []interface{}{"c1", "c2"},
+			},
+			want: `{
+				"name": "n",
+				"version": "v",
+				"npm_user": "nu",
+				"description": "d",
+				"git_head": "gh",
+				"homepage": "h",
+				"license": "l",
+				"main": "m",
+				"ID": "id",
+				"node_version": "nv",
+				"npm_version": "npmv",
+				"readme": "r",
+				"installation_command": "ic",
+				"commit_oid": "coid",
+				"has_shrinkwrap": true,
+				"published_via_actions": true,
+				"release_id": 1,
+				"deleted_by_id": 1,
+				"author": {
+					"k1": "v1"
+				},
+				"bugs": {
+					"k1": "v1"
+				},
+				"dependencies": {
+					"k1": "v1"
+				},
+				"dev_dependencies": {
+					"k1": "v1"
+				},
+				"peer_dependencies": {
+					"k1": "v1"
+				},
+				"optional_dependencies": {
+					"k1": "v1"
+				},
+				"dist": {
+					"k1": "v1"
+				},
+				"repository": {
+					"k1": "v1"
+				},
+				"engines": {
+					"k1": "v1"
+				},
+				"directories": {
+					"k1": "v1"
+				},
+				"scripts": {
+					"k1": 1
+				},
+				"bin": {
+					"k1": true
+				},
+				"man": {
+					"k1": "v1"
+				},
+				"keywords": ["kw1", "kw2"],
+				"files": ["f1", "f2"],
+				"os": ["os1", "os2"],
+				"cpu": ["cpu1", "cpu2"],
+				"maintainers": ["m1", "m2"],
+				"contributors": ["c1", "c2"]
+			}`,
+		},
+	}
+
+	for name, test := range tests {
+		t.Run(name, func(t *testing.T) {
+			t.Parallel()
+			testJSONMarshal(t, test.input, test.want)
+		})
+	}
+}
diff --git a/github/rules_test.go b/github/rules_test.go
index ec58db11..afd679cc 100644
--- a/github/rules_test.go
+++ b/github/rules_test.go
@@ -59,11 +59,12 @@ func TestRulesetRules(t *testing.T) {
 						MergeMethodSquash,
 						MergeMethodRebase,
 					},
-					DismissStaleReviewsOnPush:      true,
-					RequireCodeOwnerReview:         true,
-					RequireLastPushApproval:        true,
-					RequiredApprovingReviewCount:   2,
-					RequiredReviewThreadResolution: true,
+					AutomaticCopilotCodeReviewEnabled: nil,
+					DismissStaleReviewsOnPush:         true,
+					RequireCodeOwnerReview:            true,
+					RequireLastPushApproval:           true,
+					RequiredApprovingReviewCount:      2,
+					RequiredReviewThreadResolution:    true,
 				},
 				RequiredStatusChecks: &RequiredStatusChecksRuleParameters{
 					RequiredStatusChecks: []*RuleStatusCheck{
@@ -149,11 +150,12 @@ func TestRulesetRules(t *testing.T) {
 						MergeMethodSquash,
 						MergeMethodRebase,
 					},
-					DismissStaleReviewsOnPush:      true,
-					RequireCodeOwnerReview:         true,
-					RequireLastPushApproval:        true,
-					RequiredApprovingReviewCount:   2,
-					RequiredReviewThreadResolution: true,
+					AutomaticCopilotCodeReviewEnabled: Ptr(false),
+					DismissStaleReviewsOnPush:         true,
+					RequireCodeOwnerReview:            true,
+					RequireLastPushApproval:           true,
+					RequiredApprovingReviewCount:      2,
+					RequiredReviewThreadResolution:    true,
 				},
 				RequiredStatusChecks: &RequiredStatusChecksRuleParameters{
 					DoNotEnforceOnCreate: Ptr(true),
@@ -234,7 +236,7 @@ func TestRulesetRules(t *testing.T) {
 					},
 				},
 			},
-			`[{"type":"creation"},{"type":"update","parameters":{"update_allows_fetch_and_merge":true}},{"type":"deletion"},{"type":"required_linear_history"},{"type":"merge_queue","parameters":{"check_response_timeout_minutes":5,"grouping_strategy":"ALLGREEN","max_entries_to_build":10,"max_entries_to_merge":20,"merge_method":"squash","min_entries_to_merge":1,"min_entries_to_merge_wait_minutes":15}},{"type":"required_deployments","parameters":{"required_deployment_environments":["test1","test2"]}},{"type":"required_signatures"},{"type":"pull_request","parameters":{"allowed_merge_methods":["squash","rebase"],"dismiss_stale_reviews_on_push":true,"require_code_owner_review":true,"require_last_push_approval":true,"required_approving_review_count":2,"required_review_thread_resolution":true}},{"type":"required_status_checks","parameters":{"do_not_enforce_on_create":true,"required_status_checks":[{"context":"test1","integration_id":1},{"context":"test2","integration_id":2}],"strict_required_status_checks_policy":true}},{"type":"non_fast_forward"},{"type":"commit_message_pattern","parameters":{"name":"cmp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"commit_author_email_pattern","parameters":{"name":"caep","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"committer_email_pattern","parameters":{"name":"cep","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"branch_name_pattern","parameters":{"name":"bp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"tag_name_pattern","parameters":{"name":"tp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"file_path_restriction","parameters":{"restricted_file_paths":["test1","test2"]}},{"type":"max_file_path_length","parameters":{"max_file_path_length":512}},{"type":"file_extension_restriction","parameters":{"restricted_file_extensions":[".exe",".pkg"]}},{"type":"max_file_size","parameters":{"max_file_size":1024}},{"type":"workflows","parameters":{"do_not_enforce_on_create":true,"workflows":[{"path":".github/workflows/test1.yaml","ref":"main","repository_id":1,"sha":"aaaa"},{"path":".github/workflows/test2.yaml","ref":"main","repository_id":2,"sha":"bbbb"}]}},{"type":"code_scanning","parameters":{"code_scanning_tools":[{"alerts_threshold":"all","security_alerts_threshold":"all","tool":"test"},{"alerts_threshold":"none","security_alerts_threshold":"none","tool":"test"}]}}]`,
+			`[{"type":"creation"},{"type":"update","parameters":{"update_allows_fetch_and_merge":true}},{"type":"deletion"},{"type":"required_linear_history"},{"type":"merge_queue","parameters":{"check_response_timeout_minutes":5,"grouping_strategy":"ALLGREEN","max_entries_to_build":10,"max_entries_to_merge":20,"merge_method":"squash","min_entries_to_merge":1,"min_entries_to_merge_wait_minutes":15}},{"type":"required_deployments","parameters":{"required_deployment_environments":["test1","test2"]}},{"type":"required_signatures"},{"type":"pull_request","parameters":{"allowed_merge_methods":["squash","rebase"],"automatic_copilot_code_review_enabled":false,"dismiss_stale_reviews_on_push":true,"require_code_owner_review":true,"require_last_push_approval":true,"required_approving_review_count":2,"required_review_thread_resolution":true}},{"type":"required_status_checks","parameters":{"do_not_enforce_on_create":true,"required_status_checks":[{"context":"test1","integration_id":1},{"context":"test2","integration_id":2}],"strict_required_status_checks_policy":true}},{"type":"non_fast_forward"},{"type":"commit_message_pattern","parameters":{"name":"cmp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"commit_author_email_pattern","parameters":{"name":"caep","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"committer_email_pattern","parameters":{"name":"cep","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"branch_name_pattern","parameters":{"name":"bp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"tag_name_pattern","parameters":{"name":"tp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"file_path_restriction","parameters":{"restricted_file_paths":["test1","test2"]}},{"type":"max_file_path_length","parameters":{"max_file_path_length":512}},{"type":"file_extension_restriction","parameters":{"restricted_file_extensions":[".exe",".pkg"]}},{"type":"max_file_size","parameters":{"max_file_size":1024}},{"type":"workflows","parameters":{"do_not_enforce_on_create":true,"workflows":[{"path":".github/workflows/test1.yaml","ref":"main","repository_id":1,"sha":"aaaa"},{"path":".github/workflows/test2.yaml","ref":"main","repository_id":2,"sha":"bbbb"}]}},{"type":"code_scanning","parameters":{"code_scanning_tools":[{"alerts_threshold":"all","security_alerts_threshold":"all","tool":"test"},{"alerts_threshold":"none","security_alerts_threshold":"none","tool":"test"}]}}]`,
 		},
 	}
 
@@ -724,14 +726,15 @@ func TestRepositoryRule(t *testing.T) {
 						MergeMethodSquash,
 						MergeMethodRebase,
 					},
-					DismissStaleReviewsOnPush:      true,
-					RequireCodeOwnerReview:         true,
-					RequireLastPushApproval:        true,
-					RequiredApprovingReviewCount:   2,
-					RequiredReviewThreadResolution: true,
+					AutomaticCopilotCodeReviewEnabled: Ptr(true),
+					DismissStaleReviewsOnPush:         true,
+					RequireCodeOwnerReview:            true,
+					RequireLastPushApproval:           true,
+					RequiredApprovingReviewCount:      2,
+					RequiredReviewThreadResolution:    true,
 				},
 			},
-			`{"type":"pull_request","parameters":{"allowed_merge_methods":["squash","rebase"],"dismiss_stale_reviews_on_push":true,"require_code_owner_review":true,"require_last_push_approval":true,"required_approving_review_count":2,"required_review_thread_resolution":true}}`,
+			`{"type":"pull_request","parameters":{"allowed_merge_methods":["squash","rebase"],"automatic_copilot_code_review_enabled": true,"dismiss_stale_reviews_on_push":true,"require_code_owner_review":true,"require_last_push_approval":true,"required_approving_review_count":2,"required_review_thread_resolution":true}}`,
 		},
 		{
 			"required_status_checks",
diff --git a/github/users_packages_test.go b/github/users_packages_test.go
index 3d1cffff..3776e94f 100644
--- a/github/users_packages_test.go
+++ b/github/users_packages_test.go
@@ -7,6 +7,7 @@ package github
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"testing"
@@ -340,6 +341,15 @@ func TestUsersService_Authenticated_ListPackagesVersions(t *testing.T) {
 	t.Parallel()
 	client, mux, _ := setup(t)
 
+	m := `{
+		"package_type": "container",
+		"container": {
+			"tags": [
+			"latest"
+			]
+		}
+	}`
+
 	mux.HandleFunc("/user/packages/container/hello_docker/versions", func(w http.ResponseWriter, r *http.Request) {
 		testMethod(t, r, "GET")
 		fmt.Fprint(w, `[
@@ -351,14 +361,7 @@ func TestUsersService_Authenticated_ListPackagesVersions(t *testing.T) {
 			  "created_at": `+referenceTimeStr+`,
 			  "updated_at": `+referenceTimeStr+`,
 			  "html_url": "https://github.com/users/octocat/packages/container/hello_docker/45763",
-			  "metadata": {
-				"package_type": "container",
-				"container": {
-				  "tags": [
-					"latest"
-				  ]
-				}
-			  }
+			  "metadata": `+m+`
 			}]`)
 	})
 
@@ -379,12 +382,7 @@ func TestUsersService_Authenticated_ListPackagesVersions(t *testing.T) {
 		CreatedAt:      &Timestamp{referenceTime},
 		UpdatedAt:      &Timestamp{referenceTime},
 		HTMLURL:        Ptr("https://github.com/users/octocat/packages/container/hello_docker/45763"),
-		Metadata: &PackageMetadata{
-			PackageType: Ptr("container"),
-			Container: &PackageContainerMetadata{
-				Tags: []string{"latest"},
-			},
-		},
+		Metadata:       json.RawMessage(m),
 	}}
 	if !cmp.Equal(packages, want) {
 		t.Errorf("Users.PackageGetAllVersions returned %+v, want %+v", packages, want)
@@ -409,6 +407,15 @@ func TestUsersService_specifiedUser_ListPackagesVersions(t *testing.T) {
 	t.Parallel()
 	client, mux, _ := setup(t)
 
+	m := `{
+		"package_type": "container",
+		"container": {
+			"tags": [
+			"latest"
+			]
+		}
+	}`
+
 	mux.HandleFunc("/users/u/packages/container/hello_docker/versions", func(w http.ResponseWriter, r *http.Request) {
 		testMethod(t, r, "GET")
 		fmt.Fprint(w, `[
@@ -420,14 +427,7 @@ func TestUsersService_specifiedUser_ListPackagesVersions(t *testing.T) {
 			  "created_at": `+referenceTimeStr+`,
 			  "updated_at": `+referenceTimeStr+`,
 			  "html_url": "https://github.com/users/octocat/packages/container/hello_docker/45763",
-			  "metadata": {
-				"package_type": "container",
-				"container": {
-				  "tags": [
-					"latest"
-				  ]
-				}
-			  }
+			  "metadata": `+m+`
 			}]`)
 	})
 
@@ -448,12 +448,7 @@ func TestUsersService_specifiedUser_ListPackagesVersions(t *testing.T) {
 		CreatedAt:      &Timestamp{referenceTime},
 		UpdatedAt:      &Timestamp{referenceTime},
 		HTMLURL:        Ptr("https://github.com/users/octocat/packages/container/hello_docker/45763"),
-		Metadata: &PackageMetadata{
-			PackageType: Ptr("container"),
-			Container: &PackageContainerMetadata{
-				Tags: []string{"latest"},
-			},
-		},
+		Metadata:       json.RawMessage(m),
 	}}
 	if !cmp.Equal(packages, want) {
 		t.Errorf("Users.specifiedUser_PackageGetAllVersions returned %+v, want %+v", packages, want)
@@ -478,6 +473,15 @@ func TestUsersService_Authenticated_PackageGetVersion(t *testing.T) {
 	t.Parallel()
 	client, mux, _ := setup(t)
 
+	m := `{
+		"package_type": "container",
+		"container": {
+		"tags": [
+			"latest"
+		]
+		}
+	}`
+
 	mux.HandleFunc("/user/packages/container/hello_docker/versions/45763", func(w http.ResponseWriter, r *http.Request) {
 		testMethod(t, r, "GET")
 		fmt.Fprint(w, `
@@ -489,14 +493,7 @@ func TestUsersService_Authenticated_PackageGetVersion(t *testing.T) {
 			  "created_at": `+referenceTimeStr+`,
 			  "updated_at": `+referenceTimeStr+`,
 			  "html_url": "https://github.com/users/octocat/packages/container/hello_docker/45763",
-			  "metadata": {
-				"package_type": "container",
-				"container": {
-				  "tags": [
-					"latest"
-				  ]
-				}
-			  }
+			  "metadata": `+m+`
 			}`)
 	})
 
@@ -514,12 +511,7 @@ func TestUsersService_Authenticated_PackageGetVersion(t *testing.T) {
 		CreatedAt:      &Timestamp{referenceTime},
 		UpdatedAt:      &Timestamp{referenceTime},
 		HTMLURL:        Ptr("https://github.com/users/octocat/packages/container/hello_docker/45763"),
-		Metadata: &PackageMetadata{
-			PackageType: Ptr("container"),
-			Container: &PackageContainerMetadata{
-				Tags: []string{"latest"},
-			},
-		},
+		Metadata:       json.RawMessage(m),
 	}
 	if !cmp.Equal(packages, want) {
 		t.Errorf("Users.Authenticated_PackageGetVersion returned %+v, want %+v", packages, want)
@@ -544,6 +536,15 @@ func TestUsersService_specifiedUser_PackageGetVersion(t *testing.T) {
 	t.Parallel()
 	client, mux, _ := setup(t)
 
+	m := `{
+		"package_type": "container",
+		"container": {
+			"tags": [
+			"latest"
+			]
+		}
+	}`
+
 	mux.HandleFunc("/users/u/packages/container/hello_docker/versions/45763", func(w http.ResponseWriter, r *http.Request) {
 		testMethod(t, r, "GET")
 		fmt.Fprint(w, `
@@ -555,14 +556,7 @@ func TestUsersService_specifiedUser_PackageGetVersion(t *testing.T) {
 			  "created_at": `+referenceTimeStr+`,
 			  "updated_at": `+referenceTimeStr+`,
 			  "html_url": "https://github.com/users/octocat/packages/container/hello_docker/45763",
-			  "metadata": {
-				"package_type": "container",
-				"container": {
-				  "tags": [
-					"latest"
-				  ]
-				}
-			  }
+			  "metadata": `+m+`
 			}`)
 	})
 
@@ -580,12 +574,7 @@ func TestUsersService_specifiedUser_PackageGetVersion(t *testing.T) {
 		CreatedAt:      &Timestamp{referenceTime},
 		UpdatedAt:      &Timestamp{referenceTime},
 		HTMLURL:        Ptr("https://github.com/users/octocat/packages/container/hello_docker/45763"),
-		Metadata: &PackageMetadata{
-			PackageType: Ptr("container"),
-			Container: &PackageContainerMetadata{
-				Tags: []string{"latest"},
-			},
-		},
+		Metadata:       json.RawMessage(m),
 	}
 	if !cmp.Equal(packages, want) {
 		t.Errorf("Users.specifiedUser_PackageGetVersion returned %+v, want %+v", packages, want)