From 7239bddbb7629fecff8fb7a74848fb63c7abc29f Mon Sep 17 00:00:00 2001 From: Ian Spence Date: Wed, 31 Aug 2022 20:52:28 -0400 Subject: [PATCH 1/2] Add support to protect tags with group_id or user_id --- protected_tags.go | 17 +++++++++++++++-- protected_tags_test.go | 24 +++++++++++++++++++++--- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/protected_tags.go b/protected_tags.go index f53c989a6..196492895 100644 --- a/protected_tags.go +++ b/protected_tags.go @@ -46,6 +46,8 @@ type ProtectedTag struct { type TagAccessDescription struct { AccessLevel AccessLevelValue `json:"access_level"` AccessLevelDescription string `json:"access_level_description"` + UserID *int `url:"user_id,omitempty" json:"user_id,omitempty"` + GroupID *int `url:"group_id,omitempty" json:"group_id,omitempty"` } // ListProtectedTagsOptions represents the available ListProtectedTags() @@ -111,8 +113,19 @@ func (s *ProtectedTagsService) GetProtectedTag(pid interface{}, tag string, opti // GitLab API docs: // https://docs.gitlab.com/ee/api/protected_tags.html#protect-repository-tags type ProtectRepositoryTagsOptions struct { - Name *string `url:"name" json:"name"` - CreateAccessLevel *AccessLevelValue `url:"create_access_level,omitempty" json:"create_access_level,omitempty"` + Name *string `url:"name" json:"name"` + CreateAccessLevel *AccessLevelValue `url:"create_access_level,omitempty" json:"create_access_level,omitempty"` + AllowedToCreate *[]ProtectRepositoryTagsPermissionOptions `url:"allowed_to_create,omitempty" json:"allowed_to_create,omitempty"` +} + +// ProtectRepositoryTagsPermissionOptions represents a protected tag permission option. +// +// GitLab API docs: +// https://docs.gitlab.com/ee/api/protected_tags.html#protect-repository-tags +type ProtectRepositoryTagsPermissionOptions struct { + UserID *int `url:"user_id,omitempty" json:"user_id,omitempty"` + GroupID *int `url:"group_id,omitempty" json:"group_id,omitempty"` + AccessLevel *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"` } // ProtectRepositoryTags protects a single repository tag or several project diff --git a/protected_tags_test.go b/protected_tags_test.go index 66337fad3..c4c3b2dd2 100644 --- a/protected_tags_test.go +++ b/protected_tags_test.go @@ -68,7 +68,7 @@ func TestGetProtectedTag(t *testing.T) { mux.HandleFunc(fmt.Sprintf("/api/v4/projects/1/protected_tags/%s", tagName), func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, http.MethodGet) - fmt.Fprint(w, `{"name":"my-awesome-tag", "create_access_levels": [{"access_level": 30, "access_level_description": "Developers + Maintainers"}]}`) + fmt.Fprint(w, `{"name":"my-awesome-tag", "create_access_levels": [{"access_level": 30, "access_level_description": "Developers + Maintainers"},{"access_level": 40, "access_level_description": "Sample Group", "group_id": 300}]}`) }) expected := &ProtectedTag{ @@ -78,6 +78,11 @@ func TestGetProtectedTag(t *testing.T) { AccessLevel: 30, AccessLevelDescription: "Developers + Maintainers", }, + { + AccessLevel: 40, + GroupID: Int(300), + AccessLevelDescription: "Sample Group", + }, }, } @@ -93,7 +98,7 @@ func TestProtectRepositoryTags(t *testing.T) { mux.HandleFunc("/api/v4/projects/1/protected_tags", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, http.MethodPost) - fmt.Fprint(w, `{"name":"my-awesome-tag", "create_access_levels": [{"access_level": 30, "access_level_description": "Developers + Maintainers"}]}`) + fmt.Fprint(w, `{"name":"my-awesome-tag", "create_access_levels": [{"access_level": 30, "access_level_description": "Developers + Maintainers"},{"access_level": 40, "access_level_description": "Sample Group", "group_id": 300}]}`) }) expected := &ProtectedTag{ @@ -103,10 +108,23 @@ func TestProtectRepositoryTags(t *testing.T) { AccessLevel: 30, AccessLevelDescription: "Developers + Maintainers", }, + { + AccessLevel: 40, + GroupID: Int(300), + AccessLevelDescription: "Sample Group", + }, }, } - opt := &ProtectRepositoryTagsOptions{Name: String("my-awesome-tag"), CreateAccessLevel: AccessLevel(30)} + opt := &ProtectRepositoryTagsOptions{ + Name: String("my-awesome-tag"), + CreateAccessLevel: AccessLevel(30), + AllowedToCreate: &[]ProtectRepositoryTagsPermissionOptions{ + { + GroupID: Int(300), + }, + }, + } tag, _, err := client.ProtectedTags.ProtectRepositoryTags(1, opt) assert.NoError(t, err, "failed to get response") From 26519c9ab7f5aefefd209a928122c5f42fcc4e13 Mon Sep 17 00:00:00 2001 From: Sander van Harmelen Date: Sat, 29 Oct 2022 14:49:50 +0200 Subject: [PATCH 2/2] Fixup the PR --- protected_tags.go | 14 +++++++------- protected_tags_test.go | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/protected_tags.go b/protected_tags.go index 196492895..4f8fb4e78 100644 --- a/protected_tags.go +++ b/protected_tags.go @@ -44,10 +44,10 @@ type ProtectedTag struct { // GitLab API docs: // https://docs.gitlab.com/ee/api/protected_tags.html type TagAccessDescription struct { + UserID int `json:"user_id"` + GroupID int `json:"group_id"` AccessLevel AccessLevelValue `json:"access_level"` AccessLevelDescription string `json:"access_level_description"` - UserID *int `url:"user_id,omitempty" json:"user_id,omitempty"` - GroupID *int `url:"group_id,omitempty" json:"group_id,omitempty"` } // ListProtectedTagsOptions represents the available ListProtectedTags() @@ -113,16 +113,16 @@ func (s *ProtectedTagsService) GetProtectedTag(pid interface{}, tag string, opti // GitLab API docs: // https://docs.gitlab.com/ee/api/protected_tags.html#protect-repository-tags type ProtectRepositoryTagsOptions struct { - Name *string `url:"name" json:"name"` - CreateAccessLevel *AccessLevelValue `url:"create_access_level,omitempty" json:"create_access_level,omitempty"` - AllowedToCreate *[]ProtectRepositoryTagsPermissionOptions `url:"allowed_to_create,omitempty" json:"allowed_to_create,omitempty"` + Name *string `url:"name,omitempty" json:"name,omitempty"` + CreateAccessLevel *AccessLevelValue `url:"create_access_level,omitempty" json:"create_access_level,omitempty"` + AllowedToCreate *[]*TagsPermissionOptions `url:"allowed_to_create,omitempty" json:"allowed_to_create,omitempty"` } -// ProtectRepositoryTagsPermissionOptions represents a protected tag permission option. +// TagsPermissionOptions represents a protected tag permission option. // // GitLab API docs: // https://docs.gitlab.com/ee/api/protected_tags.html#protect-repository-tags -type ProtectRepositoryTagsPermissionOptions struct { +type TagsPermissionOptions struct { UserID *int `url:"user_id,omitempty" json:"user_id,omitempty"` GroupID *int `url:"group_id,omitempty" json:"group_id,omitempty"` AccessLevel *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"` diff --git a/protected_tags_test.go b/protected_tags_test.go index c4c3b2dd2..94c7a1a44 100644 --- a/protected_tags_test.go +++ b/protected_tags_test.go @@ -80,7 +80,7 @@ func TestGetProtectedTag(t *testing.T) { }, { AccessLevel: 40, - GroupID: Int(300), + GroupID: 300, AccessLevelDescription: "Sample Group", }, }, @@ -110,7 +110,7 @@ func TestProtectRepositoryTags(t *testing.T) { }, { AccessLevel: 40, - GroupID: Int(300), + GroupID: 300, AccessLevelDescription: "Sample Group", }, }, @@ -119,7 +119,7 @@ func TestProtectRepositoryTags(t *testing.T) { opt := &ProtectRepositoryTagsOptions{ Name: String("my-awesome-tag"), CreateAccessLevel: AccessLevel(30), - AllowedToCreate: &[]ProtectRepositoryTagsPermissionOptions{ + AllowedToCreate: &[]*TagsPermissionOptions{ { GroupID: Int(300), },