Repository: crossplane-contrib/provider-gitlab (go)

Issue:
API Deprecations should be handled (right now group -> emails_disabled changed to emails_enabled)
### What happened?

We saw issues concerning the group api, after updating our gitlab instance. In our case, the group api deprecated the `emails_disabled` flag and inverted it as `emails_enabled`. This leads to failing group api requests of the gitlab provider.

For now we used a feature flag to disable the new behaviour. But this won't be the solution for long - I think June / the next major version might be the point were the flag could be removed.

Updating the go gitlab client from 0.86.0 to 0.103.0 would fix the gitlab api side changes, but how do we handle this customer facing? This would lead to breaking changes in the managed resource...

### How can we reproduce it?
Just use the provider with an up to date gitlab instance

### What environment did it happen in?
Crossplane version: not relevant
Crossplane Provider GitLab version: 0.7.0


Pull request:
feat: deprecate emails_disabled in favor of emails_enabled
<!--
Thank you for helping to improve Crossplane!

Please read through https://git.io/fj2m9 if this is your first time opening a
Crossplane pull request. Find us in https://slack.crossplane.io/messages/dev if
you need any help contributing.
-->

### Description of your changes

This PR fixes the Issue with Gitlab 16, where emails_disabled has been renamed to emails_enabled  on groups.
This is a breaking change even though It should have been none breaking as discussed here.
But when implementing the changes it felt awkward to work with 2 fields witch are dependend on each other.
This makes a clean representation of the actual Gitlab-API.

The go-gitlab dependency has been updated to the latest version as well.

<!--
Briefly describe what this pull request does. Be sure to direct your reviewers'
attention to anything that needs special consideration.

We love pull requests that resolve an open Crossplane issue. If yours does, you
can uncomment the below line to indicate which issue your PR fixes, for example
"Fixes #500":

-->
Fixes #141 

I have:

- [x] Read and followed Crossplane's [contribution process].
- [x] Run `make reviewable test` to ensure this PR is ready for review.

### How has this code been tested

<!--
Before reviewers can be confident in the correctness of this pull request, it
needs to tested and shown to be correct. Briefly describe the testing that has
already been done or which is planned for this change.
-->

Tests have been updated to test for emailsEnabled instead of emailsDisabled

[contribution process]: https://git.io/fj2m9


Patch:
diff --git a/apis/groups/v1alpha1/group_types.go b/apis/groups/v1alpha1/group_types.go
index dc588e6..21b8dfc 100644
--- a/apis/groups/v1alpha1/group_types.go
+++ b/apis/groups/v1alpha1/group_types.go
@@ -112,9 +112,15 @@ type GroupParameters struct {
 	SubGroupCreationLevel *SubGroupCreationLevelValue `json:"subgroupCreationLevel,omitempty"`
 
 	// Disable email notifications.
+	//
+	// Deprecated: Use emailsEnabled instead.
 	// +optional
 	EmailsDisabled *bool `json:"emailsDisabled,omitempty"`
 
+	// Enable email notifications.
+	// +optional
+	EmailsEnabled *bool `json:"emailsEnabled,omitempty"`
+
 	// Disable the capability of a group from getting mentioned.
 	// +optional
 	MentionsDisabled *bool `json:"mentionsDisabled,omitempty"`
diff --git a/apis/groups/v1alpha1/zz_generated.deepcopy.go b/apis/groups/v1alpha1/zz_generated.deepcopy.go
index 9318d7e..56a3320 100644
--- a/apis/groups/v1alpha1/zz_generated.deepcopy.go
+++ b/apis/groups/v1alpha1/zz_generated.deepcopy.go
@@ -546,6 +546,11 @@ func (in *GroupParameters) DeepCopyInto(out *GroupParameters) {
 		*out = new(bool)
 		**out = **in
 	}
+	if in.EmailsEnabled != nil {
+		in, out := &in.EmailsEnabled, &out.EmailsEnabled
+		*out = new(bool)
+		**out = **in
+	}
 	if in.MentionsDisabled != nil {
 		in, out := &in.MentionsDisabled, &out.MentionsDisabled
 		*out = new(bool)
diff --git a/apis/projects/v1alpha1/pipelineschedule_types.go b/apis/projects/v1alpha1/pipelineschedule_types.go
index 3fc9c52..11c9026 100644
--- a/apis/projects/v1alpha1/pipelineschedule_types.go
+++ b/apis/projects/v1alpha1/pipelineschedule_types.go
@@ -89,6 +89,7 @@ type LastPipeline struct {
 	SHA    string `json:"sha"`
 	Ref    string `json:"ref"`
 	Status string `json:"status"`
+	WebURL string `json:"webUrl"`
 }
 
 // PipelineVariable represents a pipeline variable.
diff --git a/go.mod b/go.mod
index d1c95c5..388cf87 100644
--- a/go.mod
+++ b/go.mod
@@ -7,7 +7,7 @@ require (
 	github.com/crossplane/crossplane-tools v0.0.0-20230925130601-628280f8bf79
 	github.com/google/go-cmp v0.6.0
 	github.com/pkg/errors v0.9.1
-	github.com/xanzy/go-gitlab v0.86.0
+	github.com/xanzy/go-gitlab v0.107.0
 	gopkg.in/alecthomas/kingpin.v2 v2.2.6
 	k8s.io/api v0.29.1
 	k8s.io/apimachinery v0.29.1
@@ -45,12 +45,12 @@ require (
 	github.com/gobuffalo/flect v1.0.2 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
-	github.com/golang/protobuf v1.5.3 // indirect
+	github.com/golang/protobuf v1.5.4 // indirect
 	github.com/google/go-querystring v1.1.0 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
 	github.com/google/uuid v1.4.0 // indirect
 	github.com/hashicorp/go-cleanhttp v0.5.2
-	github.com/hashicorp/go-retryablehttp v0.7.2 // indirect
+	github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
 	github.com/imdario/mergo v0.3.16 // indirect
 	github.com/inconshreveable/mousetrap v1.1.0 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
@@ -72,15 +72,14 @@ require (
 	go.uber.org/zap v1.26.0
 	golang.org/x/mod v0.14.0 // indirect
 	golang.org/x/net v0.23.0 // indirect
-	golang.org/x/oauth2 v0.15.0 // indirect
-	golang.org/x/sys v0.18.0 // indirect
+	golang.org/x/oauth2 v0.21.0 // indirect
+	golang.org/x/sys v0.20.0 // indirect
 	golang.org/x/term v0.18.0 // indirect
 	golang.org/x/text v0.14.0 // indirect
 	golang.org/x/time v0.5.0 // indirect
 	golang.org/x/tools v0.17.0 // indirect
 	gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
-	google.golang.org/appengine v1.6.8 // indirect
-	google.golang.org/protobuf v1.31.0 // indirect
+	google.golang.org/protobuf v1.34.2 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
diff --git a/go.sum b/go.sum
index cf9c688..6ac0387 100644
--- a/go.sum
+++ b/go.sum
@@ -50,14 +50,11 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
 github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
@@ -72,10 +69,10 @@ github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
 github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
 github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
-github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI=
-github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
-github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0=
-github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
+github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
+github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
+github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU=
+github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=
 github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
 github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
 github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
@@ -141,7 +138,6 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
@@ -149,11 +145,10 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
 github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
 github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
 github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/xanzy/go-gitlab v0.86.0 h1:jR8V9cK9jXRQDb46KOB20NCF3ksY09luaG0IfXE6p7w=
-github.com/xanzy/go-gitlab v0.86.0/go.mod h1:5ryv+MnpZStBH8I/77HuQBsMbBGANtVpLWC15qOjWAw=
+github.com/xanzy/go-gitlab v0.107.0 h1:P2CT9Uy9yN9lJo3FLxpMZ4xj6uWcpnigXsjvqJ6nd2Y=
+github.com/xanzy/go-gitlab v0.107.0/go.mod h1:wKNKh3GkYDMOsGmnfuX+ITCmDuSDWFO0G+C4AygL9RY=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
 go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
 go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
@@ -163,49 +158,36 @@ go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 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.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
 golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
 golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
 golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
 golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
-golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ=
-golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM=
+golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
+golang.org/x/oauth2 v0.21.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-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/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.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
 golang.org/x/sync v0.6.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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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=
-golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
-golang.org/x/sys v0.18.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/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
+golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
 golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
 golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
 golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
@@ -214,7 +196,6 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
 golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc=
 golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -223,16 +204,12 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw=
 gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY=
-google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
-google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f h1:ultW7fxlIvee4HYrtnaRPon9HpEgFk5zYpmfMgtKB5I=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc=
 google.golang.org/grpc v1.61.0 h1:TOvOcuXn30kRao+gfcvsebNEa5iZIiLkisYEkf7R7o0=
 google.golang.org/grpc v1.61.0/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
+google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/package/crds/groups.gitlab.crossplane.io_groups.yaml b/package/crds/groups.gitlab.crossplane.io_groups.yaml
index 003e624..d44f7cf 100644
--- a/package/crds/groups.gitlab.crossplane.io_groups.yaml
+++ b/package/crds/groups.gitlab.crossplane.io_groups.yaml
@@ -82,7 +82,14 @@ spec:
                     description: The group’s description.
                     type: string
                   emailsDisabled:
-                    description: Disable email notifications.
+                    description: |-
+                      Disable email notifications.
+
+
+                      Deprecated: Use emailsEnabled instead.
+                    type: boolean
+                  emailsEnabled:
+                    description: Enable email notifications.
                     type: boolean
                   extraSharedRunnersMinutesLimit:
                     description: Extra pipeline minutes quota for this group (purchased
diff --git a/package/crds/projects.gitlab.crossplane.io_pipelineschedules.yaml b/package/crds/projects.gitlab.crossplane.io_pipelineschedules.yaml
index 3007f7d..0a8b747 100644
--- a/package/crds/projects.gitlab.crossplane.io_pipelineschedules.yaml
+++ b/package/crds/projects.gitlab.crossplane.io_pipelineschedules.yaml
@@ -397,11 +397,14 @@ spec:
                         type: string
                       status:
                         type: string
+                      webUrl:
+                        type: string
                     required:
                     - id
                     - ref
                     - sha
                     - status
+                    - webUrl
                     type: object
                   nextRunAt:
                     format: date-time
diff --git a/pkg/clients/groups/fake/fake.go b/pkg/clients/groups/fake/fake.go
index 9b702a1..13dcc52 100644
--- a/pkg/clients/groups/fake/fake.go
+++ b/pkg/clients/groups/fake/fake.go
@@ -31,7 +31,7 @@ type MockClient struct {
 	MockGetGroup              func(pid interface{}, options ...gitlab.RequestOptionFunc) (*gitlab.Group, *gitlab.Response, error)
 	MockCreateGroup           func(opt *gitlab.CreateGroupOptions, options ...gitlab.RequestOptionFunc) (*gitlab.Group, *gitlab.Response, error)
 	MockUpdateGroup           func(pid interface{}, opt *gitlab.UpdateGroupOptions, options ...gitlab.RequestOptionFunc) (*gitlab.Group, *gitlab.Response, error)
-	MockDeleteGroup           func(pid interface{}, options ...gitlab.RequestOptionFunc) (*gitlab.Response, error)
+	MockDeleteGroup           func(pid interface{}, opt *gitlab.DeleteGroupOptions, options ...gitlab.RequestOptionFunc) (*gitlab.Response, error)
 	MockShareGroupWithGroup   func(gid interface{}, opt *gitlab.ShareGroupWithGroupOptions, options ...gitlab.RequestOptionFunc) (*gitlab.Group, *gitlab.Response, error)
 	MockUnshareGroupFromGroup func(gid interface{}, groupID int, options ...gitlab.RequestOptionFunc) (*gitlab.Response, error)
 
@@ -77,8 +77,8 @@ func (c *MockClient) UpdateGroup(pid interface{}, opt *gitlab.UpdateGroupOptions
 }
 
 // DeleteGroup calls the underlying MockDeleteGroup method
-func (c *MockClient) DeleteGroup(pid interface{}, options ...gitlab.RequestOptionFunc) (*gitlab.Response, error) {
-	return c.MockDeleteGroup(pid)
+func (c *MockClient) DeleteGroup(pid interface{}, opt *gitlab.DeleteGroupOptions, options ...gitlab.RequestOptionFunc) (*gitlab.Response, error) {
+	return c.MockDeleteGroup(pid, opt)
 }
 
 // ShareGroupWithGroup calls the underlying MockShareGroupWithGroup method
diff --git a/pkg/clients/groups/group.go b/pkg/clients/groups/group.go
index 4e9e71f..05e2d1e 100644
--- a/pkg/clients/groups/group.go
+++ b/pkg/clients/groups/group.go
@@ -20,7 +20,7 @@ import (
 	"strings"
 	"time"
 
-	"github.com/xanzy/go-gitlab"
+	gitlab "github.com/xanzy/go-gitlab"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 
 	"github.com/crossplane-contrib/provider-gitlab/apis/groups/v1alpha1"
@@ -36,7 +36,7 @@ type Client interface {
 	GetGroup(gid interface{}, opt *gitlab.GetGroupOptions, options ...gitlab.RequestOptionFunc) (*gitlab.Group, *gitlab.Response, error)
 	CreateGroup(opt *gitlab.CreateGroupOptions, options ...gitlab.RequestOptionFunc) (*gitlab.Group, *gitlab.Response, error)
 	UpdateGroup(gid interface{}, opt *gitlab.UpdateGroupOptions, options ...gitlab.RequestOptionFunc) (*gitlab.Group, *gitlab.Response, error)
-	DeleteGroup(gid interface{}, options ...gitlab.RequestOptionFunc) (*gitlab.Response, error)
+	DeleteGroup(gid interface{}, opt *gitlab.DeleteGroupOptions, options ...gitlab.RequestOptionFunc) (*gitlab.Response, error)
 	ShareGroupWithGroup(gid interface{}, opt *gitlab.ShareGroupWithGroupOptions, options ...gitlab.RequestOptionFunc) (*gitlab.Group, *gitlab.Response, error)
 	UnshareGroupFromGroup(gid interface{}, groupID int, options ...gitlab.RequestOptionFunc) (*gitlab.Response, error)
 }
@@ -144,6 +144,7 @@ func GenerateCreateGroupOptions(name string, p *v1alpha1.GroupParameters) *gitla
 	if p.Name != nil {
 		name = *p.Name
 	}
+
 	group := &gitlab.CreateGroupOptions{
 		Name:                           &name,
 		Path:                           &p.Path,
@@ -156,8 +157,8 @@ func GenerateCreateGroupOptions(name string, p *v1alpha1.GroupParameters) *gitla
 		ProjectCreationLevel:           ProjectCreationLevelValueV1alpha1ToGitlab(p.ProjectCreationLevel),
 		AutoDevopsEnabled:              p.AutoDevopsEnabled,
 		SubGroupCreationLevel:          SubGroupCreationLevelValueV1alpha1ToGitlab(p.SubGroupCreationLevel),
-		EmailsDisabled:                 p.EmailsDisabled,
 		MentionsDisabled:               p.MentionsDisabled,
+		EmailsEnabled:                  p.EmailsEnabled,
 		LFSEnabled:                     p.LFSEnabled,
 		RequestAccessEnabled:           p.RequestAccessEnabled,
 		ParentID:                       p.ParentID,
@@ -174,6 +175,7 @@ func GenerateEditGroupOptions(name string, p *v1alpha1.GroupParameters) *gitlab.
 	if p.Name != nil {
 		name = *p.Name
 	}
+
 	group := &gitlab.UpdateGroupOptions{
 		Name:                           &name,
 		Path:                           &p.Path,
@@ -186,7 +188,7 @@ func GenerateEditGroupOptions(name string, p *v1alpha1.GroupParameters) *gitlab.
 		ProjectCreationLevel:           ProjectCreationLevelValueV1alpha1ToGitlab(p.ProjectCreationLevel),
 		AutoDevopsEnabled:              p.AutoDevopsEnabled,
 		SubGroupCreationLevel:          SubGroupCreationLevelValueV1alpha1ToGitlab(p.SubGroupCreationLevel),
-		EmailsDisabled:                 p.EmailsDisabled,
+		EmailsEnabled:                  p.EmailsEnabled,
 		MentionsDisabled:               p.MentionsDisabled,
 		LFSEnabled:                     p.LFSEnabled,
 		RequestAccessEnabled:           p.RequestAccessEnabled,
diff --git a/pkg/clients/projects/project.go b/pkg/clients/projects/project.go
index 7624078..02b55d7 100644
--- a/pkg/clients/projects/project.go
+++ b/pkg/clients/projects/project.go
@@ -62,7 +62,7 @@ func GenerateObservation(prj *gitlab.Project) v1alpha1.ProjectObservation { //no
 
 	o := v1alpha1.ProjectObservation{
 		ID:                   prj.ID,
-		Public:               prj.Public,
+		Public:               prj.PublicJobs,
 		SSHURLToRepo:         prj.SSHURLToRepo,
 		HTTPURLToRepo:        prj.HTTPURLToRepo,
 		WebURL:               prj.WebURL,
diff --git a/pkg/controller/groups/groups/group.go b/pkg/controller/groups/groups/group.go
index d74435e..45909b8 100644
--- a/pkg/controller/groups/groups/group.go
+++ b/pkg/controller/groups/groups/group.go
@@ -126,6 +126,8 @@ func (e *external) Observe(ctx context.Context, mg resource.Managed) (managed.Ex
 		return managed.ExternalObservation{}, errors.New(errIDNotInt)
 	}
 
+	cr.Spec.ForProvider.EmailsEnabled = lateInitializeEmailsEnabled(cr.Spec.ForProvider.EmailsEnabled, cr.Spec.ForProvider.EmailsDisabled) //nolint:staticcheck
+
 	grp, res, err := e.client.GetGroup(groupID, nil)
 	if err != nil {
 		if clients.IsResponseNotFound(res) {
@@ -234,7 +236,7 @@ func (e *external) Delete(ctx context.Context, mg resource.Managed) error {
 		return errors.New(errNotGroup)
 	}
 
-	_, err := e.client.DeleteGroup(meta.GetExternalName(cr), gitlab.WithContext(ctx))
+	_, err := e.client.DeleteGroup(meta.GetExternalName(cr), &gitlab.DeleteGroupOptions{}, gitlab.WithContext(ctx))
 	return errors.Wrap(err, errDeleteFailed)
 }
 
@@ -273,7 +275,7 @@ func isGroupUpToDate(p *v1alpha1.GroupParameters, g *gitlab.Group) (bool, error)
 	if !clients.IsBoolEqualToBoolPtr(p.AutoDevopsEnabled, g.AutoDevopsEnabled) {
 		return false, nil
 	}
-	if !clients.IsBoolEqualToBoolPtr(p.EmailsDisabled, g.EmailsDisabled) {
+	if !clients.IsBoolEqualToBoolPtr(p.EmailsEnabled, g.EmailsEnabled) {
 		return false, nil
 	}
 	if !clients.IsBoolEqualToBoolPtr(p.MentionsDisabled, g.MentionsDisabled) {
@@ -370,8 +372,8 @@ func lateInitialize(in *v1alpha1.GroupParameters, group *gitlab.Group) error { /
 	if in.AutoDevopsEnabled == nil {
 		in.AutoDevopsEnabled = &group.AutoDevopsEnabled
 	}
-	if in.EmailsDisabled == nil {
-		in.EmailsDisabled = &group.EmailsDisabled
+	if in.EmailsEnabled == nil {
+		in.EmailsEnabled = &group.EmailsEnabled
 	}
 	if in.MentionsDisabled == nil {
 		in.MentionsDisabled = &group.MentionsDisabled
@@ -412,6 +414,15 @@ func lateInitializeSubGroupCreationLevelValue(in *v1alpha1.SubGroupCreationLevel
 	return in
 }
 
+func lateInitializeEmailsEnabled(in *bool, from *bool) *bool {
+	if in == nil && from != nil {
+		value := !(*from)
+		return &value
+	}
+
+	return in
+}
+
 // lateInitializeProjectCreationLevelValue returns in if it's non-nil, otherwise returns from
 // which is the backup for the cases in is nil.
 func lateInitializeProjectCreationLevelValue(in *v1alpha1.ProjectCreationLevelValue, from gitlab.ProjectCreationLevelValue) *v1alpha1.ProjectCreationLevelValue {
diff --git a/pkg/controller/groups/variables/controller.go b/pkg/controller/groups/variables/controller.go
index 8135c05..5b19cac 100644
--- a/pkg/controller/groups/variables/controller.go
+++ b/pkg/controller/groups/variables/controller.go
@@ -235,12 +235,12 @@ func (e *external) updateVariableFromSecret(ctx context.Context, selector *xpv1.
 
 	// Mask variable if it hasn't already been explicitly configured.
 	if params.Masked == nil {
-		params.Masked = gitlab.Bool(true)
+		params.Masked = gitlab.Ptr(true)
 	}
 
 	// Make variable raw if it hasn't already been explicitly configured.
 	if params.Raw == nil {
-		params.Raw = gitlab.Bool(true)
+		params.Raw = gitlab.Ptr(true)
 	}
 
 	value := string(raw)
diff --git a/pkg/controller/projects/pipelineschedules/controller.go b/pkg/controller/projects/pipelineschedules/controller.go
index ec87d23..2286609 100644
--- a/pkg/controller/projects/pipelineschedules/controller.go
+++ b/pkg/controller/projects/pipelineschedules/controller.go
@@ -188,7 +188,7 @@ func (e *external) Create(ctx context.Context, mg resource.Managed) (managed.Ext
 		opt := &gitlab.CreatePipelineScheduleVariableOptions{
 			Key:          &v.Key,   //nolint:gosec
 			Value:        &v.Value, //nolint:gosec
-			VariableType: v.VariableType,
+			VariableType: (*gitlab.VariableTypeValue)(v.VariableType),
 		}
 		_, _, err := e.client.CreatePipelineScheduleVariable(
 			*cr.Spec.ForProvider.ProjectID,
@@ -249,7 +249,7 @@ func (e *external) Update(ctx context.Context, mg resource.Managed) (managed.Ext
 				opt := &gitlab.CreatePipelineScheduleVariableOptions{
 					Key:          &v.Key,   //nolint:gosec
 					Value:        &v.Value, //nolint:gosec
-					VariableType: v.VariableType,
+					VariableType: (*gitlab.VariableTypeValue)(v.VariableType),
 				}
 				_, _, err := e.client.CreatePipelineScheduleVariable(
 					*cr.Spec.ForProvider.ProjectID,
@@ -263,7 +263,7 @@ func (e *external) Update(ctx context.Context, mg resource.Managed) (managed.Ext
 			if notUpdated(v, ps.Variables) {
 				opt := &gitlab.EditPipelineScheduleVariableOptions{
 					Value:        &v.Value, //nolint:gosec
-					VariableType: v.VariableType,
+					VariableType: (*gitlab.VariableTypeValue)(v.VariableType),
 				}
 				_, _, err := e.client.EditPipelineScheduleVariable(
 					*cr.Spec.ForProvider.ProjectID,
@@ -337,8 +337,7 @@ func lateInitialize(cr *v1alpha1.PipelineScheduleParameters, ps *gitlab.Pipeline
 			varr[i] = v1alpha1.PipelineVariable{
 				Key:          vv.Key,
 				Value:        vv.Value,
-				VariableType: &vv.VariableType,
-			}
+				VariableType: (*string)(&vv.VariableType)}
 		}
 		cr.Variables = varr
 	}
@@ -407,7 +406,7 @@ func notUpdated(crv v1alpha1.PipelineVariable, invArr []*gitlab.PipelineVariable
 	}
 
 	if crv.VariableType != nil {
-		victim.VariableType = *crv.VariableType
+		victim.VariableType = gitlab.VariableTypeValue(*crv.VariableType)
 	}
 
 	for _, v := range invArr {
diff --git a/pkg/controller/projects/variables/controller.go b/pkg/controller/projects/variables/controller.go
index 4f9a5ca..034a3d2 100644
--- a/pkg/controller/projects/variables/controller.go
+++ b/pkg/controller/projects/variables/controller.go
@@ -237,12 +237,12 @@ func (e *external) updateVariableFromSecret(ctx context.Context, selector *xpv1.
 
 	// Mask variable if it hasn't already been explicitly configured.
 	if params.Masked == nil {
-		params.Masked = gitlab.Bool(true)
+		params.Masked = gitlab.Ptr(true)
 	}
 
 	// Make variable raw if it hasn't already been explicitly configured.
 	if params.Raw == nil {
-		params.Raw = gitlab.Bool(true)
+		params.Raw = gitlab.Ptr(true)
 	}
 
 	value := string(raw)


Test patch:
diff --git a/pkg/clients/groups/group_test.go b/pkg/clients/groups/group_test.go
index 51e5d4c..1d385fa 100644
--- a/pkg/clients/groups/group_test.go
+++ b/pkg/clients/groups/group_test.go
@@ -46,7 +46,7 @@ var (
 	subGroupCreationLevel          = "maintainer"
 	v1alpha1SubGroupCreationLevel  = v1alpha1.SubGroupCreationLevelValue(subGroupCreationLevel)
 	gitlabSubGroupCreationLevel    = gitlab.SubGroupCreationLevelValue(subGroupCreationLevel)
-	emailsDisabled                 = true
+	emailsEnabled                  = true
 	mentionsDisabled               = true
 	LFSEnabled                     = true
 	requestAccessEnabled           = true
@@ -250,7 +250,7 @@ func TestGenerateCreateGroupOptions(t *testing.T) {
 					ProjectCreationLevel:           &v1alpha1ProjectCreationLevel,
 					AutoDevopsEnabled:              &autoDevopsEnabled,
 					SubGroupCreationLevel:          &v1alpha1SubGroupCreationLevel,
-					EmailsDisabled:                 &emailsDisabled,
+					EmailsEnabled:                  &emailsEnabled,
 					MentionsDisabled:               &mentionsDisabled,
 					LFSEnabled:                     &LFSEnabled,
 					RequestAccessEnabled:           &requestAccessEnabled,
@@ -271,7 +271,7 @@ func TestGenerateCreateGroupOptions(t *testing.T) {
 				ProjectCreationLevel:           &gitlabProjectCreationLevel,
 				AutoDevopsEnabled:              &autoDevopsEnabled,
 				SubGroupCreationLevel:          &gitlabSubGroupCreationLevel,
-				EmailsDisabled:                 &emailsDisabled,
+				EmailsEnabled:                  &emailsEnabled,
 				MentionsDisabled:               &mentionsDisabled,
 				LFSEnabled:                     &LFSEnabled,
 				RequestAccessEnabled:           &requestAccessEnabled,
@@ -335,8 +335,8 @@ func TestGenerateEditGroupOptions(t *testing.T) {
 					ProjectCreationLevel:           &v1alpha1ProjectCreationLevel,
 					AutoDevopsEnabled:              &autoDevopsEnabled,
 					SubGroupCreationLevel:          &v1alpha1SubGroupCreationLevel,
-					EmailsDisabled:                 &emailsDisabled,
 					MentionsDisabled:               &mentionsDisabled,
+					EmailsEnabled:                  &emailsEnabled,
 					LFSEnabled:                     &LFSEnabled,
 					RequestAccessEnabled:           &requestAccessEnabled,
 					ParentID:                       &parentID,
@@ -356,7 +356,7 @@ func TestGenerateEditGroupOptions(t *testing.T) {
 				ProjectCreationLevel:           &gitlabProjectCreationLevel,
 				AutoDevopsEnabled:              &autoDevopsEnabled,
 				SubGroupCreationLevel:          &gitlabSubGroupCreationLevel,
-				EmailsDisabled:                 &emailsDisabled,
+				EmailsEnabled:                  &emailsEnabled,
 				MentionsDisabled:               &mentionsDisabled,
 				LFSEnabled:                     &LFSEnabled,
 				RequestAccessEnabled:           &requestAccessEnabled,
@@ -368,18 +368,18 @@ func TestGenerateEditGroupOptions(t *testing.T) {
 			args: args{
 				name: name,
 				parameters: &v1alpha1.GroupParameters{
-					Path:           path,
-					Description:    &description,
-					Visibility:     &v1alpha1Visibility,
-					EmailsDisabled: &emailsDisabled,
+					Path:          path,
+					Description:   &description,
+					Visibility:    &v1alpha1Visibility,
+					EmailsEnabled: &emailsEnabled,
 				},
 			},
 			want: &gitlab.UpdateGroupOptions{
-				Name:           &name,
-				Path:           &path,
-				Description:    &description,
-				Visibility:     &gitlabVisibility,
-				EmailsDisabled: &emailsDisabled,
+				Name:          &name,
+				Path:          &path,
+				Description:   &description,
+				Visibility:    &gitlabVisibility,
+				EmailsEnabled: &emailsEnabled,
 			},
 		},
 	}
diff --git a/pkg/clients/projects/project_test.go b/pkg/clients/projects/project_test.go
index 2fef566..d47bbaf 100644
--- a/pkg/clients/projects/project_test.go
+++ b/pkg/clients/projects/project_test.go
@@ -234,7 +234,7 @@ func TestGenerateObservation(t *testing.T) {
 			args: args{
 				p: &gitlab.Project{
 					ID:            id,
-					Public:        public,
+					PublicJobs:    public,
 					SSHURLToRepo:  sshURLToRepo,
 					HTTPURLToRepo: httpURLToRepo,
 					WebURL:        webURL,
@@ -385,7 +385,7 @@ func TestGenerateObservation(t *testing.T) {
 			args: args{
 				p: &gitlab.Project{
 					ID:             id,
-					Public:         public,
+					PublicJobs:     public,
 					CreatedAt:      &now,
 					LastActivityAt: &now,
 					Namespace: &gitlab.ProjectNamespace{
diff --git a/pkg/controller/groups/accesstokens/controller_test.go b/pkg/controller/groups/accesstokens/controller_test.go
index e4d307c..0439e14 100644
--- a/pkg/controller/groups/accesstokens/controller_test.go
+++ b/pkg/controller/groups/accesstokens/controller_test.go
@@ -257,7 +257,7 @@ func TestObserve(t *testing.T) {
 					MockGetGroupAccessToken: func(pid interface{}, id int, options ...gitlab.RequestOptionFunc) (*gitlab.GroupAccessToken, *gitlab.Response, error) {
 						return &gitlab.GroupAccessToken{
 							ExpiresAt:   accessTokenObj.ExpiresAt,
-							AccessLevel: *gitlab.AccessLevel(accessTokenObj.AccessLevel),
+							AccessLevel: accessTokenObj.AccessLevel,
 						}, &gitlab.Response{}, nil
 					},
 				},
diff --git a/pkg/controller/groups/groups/group_test.go b/pkg/controller/groups/groups/group_test.go
index db72390..11d20da 100644
--- a/pkg/controller/groups/groups/group_test.go
+++ b/pkg/controller/groups/groups/group_test.go
@@ -114,7 +114,7 @@ func withClientDefaultValues() groupModifier {
 			RequireTwoFactorAuth:           &f,
 			TwoFactorGracePeriod:           &i,
 			AutoDevopsEnabled:              &f,
-			EmailsDisabled:                 &f,
+			EmailsEnabled:                  &f,
 			MentionsDisabled:               &f,
 			LFSEnabled:                     &f,
 			RequestAccessEnabled:           &f,
@@ -212,7 +212,7 @@ func TestObserve(t *testing.T) {
 	v1alpha1VisibilityNew := v1alpha1.VisibilityValue("public")
 	gitlabProjectCreationLevelNew := gitlab.ProjectCreationLevel("noone")
 	v1alpha1ProjectCreationLevelNew := v1alpha1.ProjectCreationLevelValue("noone")
-	gitlabSubGroupCreationLevelNew := gitlab.SubGroupCreationLevel("owner")
+	gitlabSubGroupCreationLevelNew := gitlab.Ptr("owner")
 	v1alpha1SubGroupCreationLevelNew := v1alpha1.SubGroupCreationLevelValue("owner")
 
 	type want struct {
@@ -375,13 +375,13 @@ func TestObserve(t *testing.T) {
 							Description:                    description,
 							Visibility:                     gitlabVisibilityNew,
 							ProjectCreationLevel:           *gitlabProjectCreationLevelNew,
-							SubGroupCreationLevel:          *gitlabSubGroupCreationLevelNew,
+							SubGroupCreationLevel:          gitlab.SubGroupCreationLevelValue(*gitlabSubGroupCreationLevelNew),
 							MembershipLock:                 false,
 							ShareWithGroupLock:             false,
 							RequireTwoFactorAuth:           false,
 							TwoFactorGracePeriod:           0,
 							AutoDevopsEnabled:              false,
-							EmailsDisabled:                 false,
+							EmailsEnabled:                  false,
 							MentionsDisabled:               false,
 							LFSEnabled:                     false,
 							RequestAccessEnabled:           false,
@@ -449,13 +449,13 @@ func TestObserve(t *testing.T) {
 		"Description":                    "description v2",
 		"MembershipLock":                 true,
 		"ProjectCreationLevel":           *gitlabProjectCreationLevelNew,
-		"SubGroupCreationLevel":          *gitlabSubGroupCreationLevelNew,
+		"SubGroupCreationLevel":          gitlab.SubGroupCreationLevelValue(*gitlabSubGroupCreationLevelNew),
 		"Visibility":                     gitlabVisibilityNew,
 		"ShareWithGroupLock":             true,
 		"RequireTwoFactorAuth":           true,
 		"TwoFactorGracePeriod":           1,
 		"AutoDevopsEnabled":              true,
-		"EmailsDisabled":                 true,
+		"EmailsEnabled":                  true,
 		"MentionsDisabled":               true,
 		"LFSEnabled":                     true,
 		"RequestAccessEnabled":           true,
@@ -500,7 +500,7 @@ func TestObserve(t *testing.T) {
 			Name:                  name,
 			Visibility:            gitlab.VisibilityValue(visibility),
 			ProjectCreationLevel:  *gitlab.ProjectCreationLevel(gitlab.ProjectCreationLevelValue(projectCreationLevel)),
-			SubGroupCreationLevel: *gitlab.SubGroupCreationLevel(gitlab.SubGroupCreationLevelValue(subGroupCreationLevel)),
+			SubGroupCreationLevel: *gitlab.Ptr(gitlab.SubGroupCreationLevelValue(subGroupCreationLevel)),
 		}
 		structValue := reflect.ValueOf(gitlabGroup).Elem()
 		structFieldValue := structValue.FieldByName(name)
@@ -865,7 +865,7 @@ func TestDelete(t *testing.T) {
 		"SuccessfulDeletion": {
 			args: args{
 				group: &fake.MockClient{
-					MockDeleteGroup: func(pid interface{}, options ...gitlab.RequestOptionFunc) (*gitlab.Response, error) {
+					MockDeleteGroup: func(pid interface{}, opt *gitlab.DeleteGroupOptions, options ...gitlab.RequestOptionFunc) (*gitlab.Response, error) {
 						return &gitlab.Response{}, nil
 					},
 				},
@@ -879,7 +879,7 @@ func TestDelete(t *testing.T) {
 		"FailedDeletion": {
 			args: args{
 				group: &fake.MockClient{
-					MockDeleteGroup: func(pid interface{}, options ...gitlab.RequestOptionFunc) (*gitlab.Response, error) {
+					MockDeleteGroup: func(pid interface{}, opt *gitlab.DeleteGroupOptions, options ...gitlab.RequestOptionFunc) (*gitlab.Response, error) {
 						return &gitlab.Response{}, errBoom
 					},
 				},
diff --git a/pkg/controller/projects/accesstokens/controller_test.go b/pkg/controller/projects/accesstokens/controller_test.go
index b81e27f..cd407c2 100644
--- a/pkg/controller/projects/accesstokens/controller_test.go
+++ b/pkg/controller/projects/accesstokens/controller_test.go
@@ -257,7 +257,7 @@ func TestObserve(t *testing.T) {
 					MockGetProjectAccessToken: func(pid interface{}, id int, options ...gitlab.RequestOptionFunc) (*gitlab.ProjectAccessToken, *gitlab.Response, error) {
 						return &gitlab.ProjectAccessToken{
 							ExpiresAt:   accessTokenObj.ExpiresAt,
-							AccessLevel: *gitlab.AccessLevel(accessTokenObj.AccessLevel),
+							AccessLevel: accessTokenObj.AccessLevel,
 						}, &gitlab.Response{}, nil
 					},
 				},