Repository: google/go-github
Pull request #3511 (2025-03-10 19:24:09)

feat!: Add support for network-configurations endpoints for organization
BREAKING CHANGE: `EnterpriseNetwork*` structs have been replaced with `Network*` structs.

Fixes: #3462.

This pull request introduces support for the hosted compute network configurations for organization  in the go-github library, addressing https://github.com/google/go-github/issues/3462.

Changes Include:

Implementation of API endpoints for managing network-configuration endpoints.
Support for the following operations:
* Get, Create, Update, Delete and List network-configuration of an organization.
* Get network settings resource.
* Corresponding unit tests for each function.

Additional Information:
API Reference: [GitHub REST API: Network Configurations](https://docs.github.com/en/rest/orgs/network-configurations).


jndz2: I have discovered that the request only allows “actions” or “none” for the compute service, but the get operations can return “codespaces”. I think I will tackle this tomorrow. 

https://docs.github.com/en/rest/orgs/network-configurations?apiVersion=2022-11-28#create-a-hosted-compute-network-configuration-for-an-organization & https://docs.github.com/en/rest/orgs/network-configurations?apiVersion=2022-11-28#update-a-hosted-compute-network-configuration-for-an-organization  
codecov[bot]: ## [Codecov](https://app.codecov.io/gh/google/go-github/pull/3511?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.25%. 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 [(`91c9127`)](https://app.codecov.io/gh/google/go-github/commit/91c9127f21a394e06761f134f2a494e90c196356?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    #3511      +/-   ##
==========================================
+ Coverage   91.21%   91.25%   +0.04%     
==========================================
  Files         182      183       +1     
  Lines       15930    16006      +76     
==========================================
+ Hits        14531    14607      +76     
  Misses       1225     1225              
  Partials      174      174              
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/google/go-github/pull/3511?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/example/go.mod b/example/go.mod
index 27045fc9..58560bac 100644
--- a/example/go.mod
+++ b/example/go.mod
@@ -1,15 +1,15 @@
 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/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.32.0
+	golang.org/x/term v0.28.0
 	google.golang.org/appengine v1.6.8
 )
 
@@ -22,7 +22,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 +45,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
@@ -88,7 +89,7 @@ require (
 	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/sys v0.29.0 // indirect
 	golang.org/x/text v0.21.0 // indirect
 	google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect
 	google.golang.org/protobuf v1.34.2 // indirect
diff --git a/example/go.sum b/example/go.sum
index d99bb0d3..1c2cbf5b 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=
@@ -203,6 +203,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 +287,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 +318,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 +362,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.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
+golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
 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=
@@ -394,15 +396,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.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
+golang.org/x/sys v0.29.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.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
+golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
 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=
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/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/github-accessors.go b/github/github-accessors.go
index e2a16527..bb2ee2af 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 {
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/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..4085ea0f 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/getkin/kin-openapi v0.129.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-20241210131133-6b86fb107d80 // indirect
+	github.com/oasdiff/yaml3 v0.0.0-20241210130736-a94c01f36349 // indirect
 	github.com/perimeterx/marshmallow v1.1.5 // indirect
 )
 
diff --git a/tools/go.sum b/tools/go.sum
index ecbe0ac6..4c259e7a 100644
--- a/tools/go.sum
+++ b/tools/go.sum
@@ -6,8 +6,8 @@ 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.129.0 h1:QGYTNcmyP5X0AtFQ2Dkou9DGBJsUETeLH9rFrJXZh30=
+github.com/getkin/kin-openapi v0.129.0/go.mod h1:gmWI+b/J45xqpyK5wJmRRZse5wefA5H0RDMK46kLUtI=
 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-20241210131133-6b86fb107d80 h1:nZspmSkneBbtxU9TopEAE0CY+SBJLxO8LPUlw2vG4pU=
+github.com/oasdiff/yaml v0.0.0-20241210131133-6b86fb107d80/go.mod h1:7tFDb+Y51LcDpn26GccuUgQXUk6t0CXZsivKjyimYX8=
+github.com/oasdiff/yaml3 v0.0.0-20241210130736-a94c01f36349 h1:t05Ww3DxZutOqbMN+7OIuqDwXbhl32HiZGpLy26BAPc=
+github.com/oasdiff/yaml3 v0.0.0-20241210130736-a94c01f36349/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..35d57dbe 100644
--- a/github/event_types_test.go
+++ b/github/event_types_test.go
@@ -10746,6 +10746,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 +10887,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..ec1fe1c1 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
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
+	})
+}