From 16fa0b53fdaf5e6dea12f3c667682d2b35614ab7 Mon Sep 17 00:00:00 2001 From: Florian Wagner Date: Wed, 16 Mar 2022 08:17:28 +0000 Subject: [PATCH 01/10] add gh actions permission for repos Signed-off-by: GitHub --- example/actionpermissions/main.go | 88 +++++++++++++++++++ github/github-accessors.go | 24 ++++++ github/github-accessors_test.go | 30 +++++++ github/github-stringify_test.go | 12 +++ github/orgs_actions_allowed.go | 4 +- github/repos_actions_allowed.go | 45 ++++++++++ github/repos_actions_allowed_test.go | 85 ++++++++++++++++++ github/repos_actions_permissions.go | 58 +++++++++++++ github/repos_actions_permissions_test.go | 104 +++++++++++++++++++++++ 9 files changed, 448 insertions(+), 2 deletions(-) create mode 100644 example/actionpermissions/main.go create mode 100644 github/repos_actions_allowed.go create mode 100644 github/repos_actions_allowed_test.go create mode 100644 github/repos_actions_permissions.go create mode 100644 github/repos_actions_permissions_test.go diff --git a/example/actionpermissions/main.go b/example/actionpermissions/main.go new file mode 100644 index 00000000000..4de11cf63d6 --- /dev/null +++ b/example/actionpermissions/main.go @@ -0,0 +1,88 @@ +// Copyright 2022 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. + +// The actionpermissions command utilizes go-github as a cli tool for +// changing GitHub Actions related permission settings for a repository +package main + +import ( + "context" + "flag" + "fmt" + "log" + "os" + + "github.com/google/go-github/v43/github" + "golang.org/x/oauth2" +) + +var ( + name = flag.String("name", "", "repo to change Actions permissions.") + owner = flag.String("owner", "", "owner of targeted repo.") +) + +func main() { + flag.Parse() + token := os.Getenv("GITHUB_AUTH_TOKEN") + if token == "" { + log.Fatal("Unauthorized: No token present") + } + if *name == "" { + log.Fatal("No name: repo name must be given") + } + if *owner == "" { + log.Fatal("No owner: owner of repo must be given") + } + ctx := context.Background() + ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token}) + tc := oauth2.NewClient(ctx, ts) + client := github.NewClient(tc) + + actionsPermissionsRepository, _, err := client.Repositories.GetActionsPermissions(ctx, *owner, *name) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("Current ActionsPermissions %s\n", actionsPermissionsRepository.String()) + + actionsPermissionsRepository = &github.ActionsPermissionsRepository{Enabled: Bool(true), AllowedActions: String("selected")} + _, _, err = client.Repositories.EditActionsPermissions(ctx, *owner, *name, *actionsPermissionsRepository) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("Current ActionsPermissions %s\n", actionsPermissionsRepository.String()) + + actionsAllowed, _, err := client.Repositories.GetActionsAllowed(ctx, *owner, *name) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("Current ActionsAllowed %s\n", actionsAllowed.String()) + + actionsAllowed = &github.ActionsAllowed{GithubOwnedAllowed: Bool(true), VerifiedAllowed: Bool(false), PatternsAllowed: []string{"a/b"}} + _, _, err = client.Repositories.EditActionsAllowed(ctx, *owner, *name, *actionsAllowed) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("Current ActionsAllowed %s\n", actionsAllowed.String()) + + actionsPermissionsRepository = &github.ActionsPermissionsRepository{Enabled: Bool(true), AllowedActions: String("all")} + _, _, err = client.Repositories.EditActionsPermissions(ctx, *owner, *name, *actionsPermissionsRepository) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("Current ActionsPermissions %s\n", actionsPermissionsRepository.String()) +} + +// Bool is a helper routine that allocates a new bool value +// to store v and returns a pointer to it. +func Bool(v bool) *bool { return &v } + +// String is a helper routine that allocates a new string value +// to store v and returns a pointer to it. +func String(v string) *string { return &v } diff --git a/github/github-accessors.go b/github/github-accessors.go index ce5fa26ad66..cad631db5f5 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -60,6 +60,30 @@ func (a *ActionsPermissions) GetSelectedActionsURL() string { return *a.SelectedActionsURL } +// GetAllowedActions returns the AllowedActions field if it's non-nil, zero value otherwise. +func (a *ActionsPermissionsRepository) GetAllowedActions() string { + if a == nil || a.AllowedActions == nil { + return "" + } + return *a.AllowedActions +} + +// GetEnabled returns the Enabled field if it's non-nil, zero value otherwise. +func (a *ActionsPermissionsRepository) GetEnabled() bool { + if a == nil || a.Enabled == nil { + return false + } + return *a.Enabled +} + +// GetSelectedActionsURL returns the SelectedActionsURL field if it's non-nil, zero value otherwise. +func (a *ActionsPermissionsRepository) GetSelectedActionsURL() string { + if a == nil || a.SelectedActionsURL == nil { + return "" + } + return *a.SelectedActionsURL +} + // GetURL returns the URL field if it's non-nil, zero value otherwise. func (a *AdminEnforcement) GetURL() string { if a == nil || a.URL == nil { diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go index f0ce54ecea3..a796fe05547 100644 --- a/github/github-accessors_test.go +++ b/github/github-accessors_test.go @@ -73,6 +73,36 @@ func TestActionsPermissions_GetSelectedActionsURL(tt *testing.T) { a.GetSelectedActionsURL() } +func TestActionsPermissionsRepository_GetAllowedActions(tt *testing.T) { + var zeroValue string + a := &ActionsPermissionsRepository{AllowedActions: &zeroValue} + a.GetAllowedActions() + a = &ActionsPermissionsRepository{} + a.GetAllowedActions() + a = nil + a.GetAllowedActions() +} + +func TestActionsPermissionsRepository_GetEnabled(tt *testing.T) { + var zeroValue bool + a := &ActionsPermissionsRepository{Enabled: &zeroValue} + a.GetEnabled() + a = &ActionsPermissionsRepository{} + a.GetEnabled() + a = nil + a.GetEnabled() +} + +func TestActionsPermissionsRepository_GetSelectedActionsURL(tt *testing.T) { + var zeroValue string + a := &ActionsPermissionsRepository{SelectedActionsURL: &zeroValue} + a.GetSelectedActionsURL() + a = &ActionsPermissionsRepository{} + a.GetSelectedActionsURL() + a = nil + a.GetSelectedActionsURL() +} + func TestAdminEnforcement_GetURL(tt *testing.T) { var zeroValue string a := &AdminEnforcement{URL: &zeroValue} diff --git a/github/github-stringify_test.go b/github/github-stringify_test.go index c5bbca9d9e8..142baa21e4d 100644 --- a/github/github-stringify_test.go +++ b/github/github-stringify_test.go @@ -36,6 +36,18 @@ func TestActionsPermissions_String(t *testing.T) { } } +func TestActionsPermissionsRepository_String(t *testing.T) { + v := ActionsPermissionsRepository{ + Enabled: Bool(false), + AllowedActions: String(""), + SelectedActionsURL: String(""), + } + want := `github.ActionsPermissionsRepository{Enabled:false, AllowedActions:"", SelectedActionsURL:""}` + if got := v.String(); got != want { + t.Errorf("ActionsPermissionsRepository.String = %v, want %v", got, want) + } +} + func TestAdminStats_String(t *testing.T) { v := AdminStats{ Issues: &IssueStats{}, diff --git a/github/orgs_actions_allowed.go b/github/orgs_actions_allowed.go index 9032d033b64..687ab2f6672 100644 --- a/github/orgs_actions_allowed.go +++ b/github/orgs_actions_allowed.go @@ -10,9 +10,9 @@ import ( "fmt" ) -// ActionsAllowed represents selected actions that are allowed in an organization. +// ActionsAllowed represents selected actions that are allowed. // -// GitHub API docs: https://docs.github.com/en/rest/reference/actions#get-allowed-actions-for-an-organization +// GitHub API docs: https://docs.github.com/en/rest/reference/actions#set-allowed-actions-and-workflows-for-an-organization--parameters type ActionsAllowed struct { GithubOwnedAllowed *bool `json:"github_owned_allowed,omitempty"` VerifiedAllowed *bool `json:"verified_allowed,omitempty"` diff --git a/github/repos_actions_allowed.go b/github/repos_actions_allowed.go new file mode 100644 index 00000000000..840ab12358b --- /dev/null +++ b/github/repos_actions_allowed.go @@ -0,0 +1,45 @@ +// Copyright 2022 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" +) + +// GetActionsAllowed gets the actions that are allowed in a repository. +// +// GitHub API docs: https://docs.github.com/en/rest/reference/actions#get-allowed-actions-and-workflows-for-a-repository +func (s *RepositoriesService) GetActionsAllowed(ctx context.Context, org string, repo string) (*ActionsAllowed, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/actions/permissions/selected-actions", org, repo) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + actionsAllowed := new(ActionsAllowed) + resp, err := s.client.Do(ctx, req, actionsAllowed) + if err != nil { + return nil, resp, err + } + + return actionsAllowed, resp, nil +} + +// EditActionsAllowed sets the actions that are allowed in a repository. +// +// GitHub API docs: https://docs.github.com/en/rest/reference/actions#set-allowed-actions-and-workflows-for-a-repository +func (s *RepositoriesService) EditActionsAllowed(ctx context.Context, org string, repo string, actionsAllowed ActionsAllowed) (*ActionsAllowed, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/actions/permissions/selected-actions", org, repo) + req, err := s.client.NewRequest("PUT", u, actionsAllowed) + if err != nil { + return nil, nil, err + } + p := new(ActionsAllowed) + resp, err := s.client.Do(ctx, req, p) + return p, resp, err +} diff --git a/github/repos_actions_allowed_test.go b/github/repos_actions_allowed_test.go new file mode 100644 index 00000000000..c58d7b05366 --- /dev/null +++ b/github/repos_actions_allowed_test.go @@ -0,0 +1,85 @@ +// Copyright 2022 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" + "encoding/json" + "fmt" + "net/http" + "testing" + + "github.com/google/go-cmp/cmp" +) + +func TestRepositoryService_GetActionsAllowed(t *testing.T) { + client, mux, _, teardown := setup() + defer teardown() + + mux.HandleFunc("/repos/o/r/actions/permissions/selected-actions", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + fmt.Fprint(w, `{"github_owned_allowed":true, "verified_allowed":false, "patterns_allowed":["a/b"]}`) + }) + + ctx := context.Background() + org, _, err := client.Repositories.GetActionsAllowed(ctx, "o", "r") + if err != nil { + t.Errorf("Repositories.GetActionsAllowed returned error: %v", err) + } + want := &ActionsAllowed{GithubOwnedAllowed: Bool(true), VerifiedAllowed: Bool(false), PatternsAllowed: []string{"a/b"}} + if !cmp.Equal(org, want) { + t.Errorf("Repositories.GetActionsAllowed returned %+v, want %+v", org, want) + } + + const methodName = "GetActionsAllowed" + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Repositories.GetActionsAllowed(ctx, "\n", "\n") + return err + }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Repositories.GetActionsAllowed(ctx, "o", "r") + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) +} + +func TestRepositoriesService_EditActionsAllowed(t *testing.T) { + client, mux, _, teardown := setup() + defer teardown() + input := &ActionsAllowed{GithubOwnedAllowed: Bool(true), VerifiedAllowed: Bool(false), PatternsAllowed: []string{"a/b"}} + + mux.HandleFunc("/repos/o/r/actions/permissions/selected-actions", func(w http.ResponseWriter, r *http.Request) { + v := new(ActionsAllowed) + json.NewDecoder(r.Body).Decode(v) + + testMethod(t, r, "PUT") + if !cmp.Equal(v, input) { + t.Errorf("Request body = %+v, want %+v", v, input) + } + + fmt.Fprint(w, `{"github_owned_allowed":true, "verified_allowed":false, "patterns_allowed":["a/b"]}`) + }) + + ctx := context.Background() + org, _, err := client.Repositories.EditActionsAllowed(ctx, "o", "r", *input) + if err != nil { + t.Errorf("Repositories.EditActionsAllowed returned error: %v", err) + } + + want := &ActionsAllowed{GithubOwnedAllowed: Bool(true), VerifiedAllowed: Bool(false), PatternsAllowed: []string{"a/b"}} + if !cmp.Equal(org, want) { + t.Errorf("Repositories.EditActionsAllowed returned %+v, want %+v", org, want) + } + + const methodName = "EditActionsAllowed" + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Repositories.EditActionsAllowed(ctx, "\n", "\n", *input) + return err + }) +} diff --git a/github/repos_actions_permissions.go b/github/repos_actions_permissions.go new file mode 100644 index 00000000000..4325f82268d --- /dev/null +++ b/github/repos_actions_permissions.go @@ -0,0 +1,58 @@ +// Copyright 2022 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" +) + +// ActionsPermissions represents a policy for repositories and allowed actions in a repository. +// +// GitHub API docs: https://docs.github.com/en/rest/reference/actions#set-github-actions-permissions-for-a-repository--parameters +type ActionsPermissionsRepository struct { + Enabled *bool `json:"enabled,omitempty"` + AllowedActions *string `json:"allowed_actions,omitempty"` + SelectedActionsURL *string `json:"selected_actions_url,omitempty"` +} + +func (a ActionsPermissionsRepository) String() string { + return Stringify(a) +} + +// GetActionsPermissions gets the GitHub Actions permissions policy for repositories and allowed actions in a repository. +// +// GitHub API docs: https://docs.github.com/en/rest/reference/actions#get-github-actions-permissions-for-a-repository +func (s *RepositoriesService) GetActionsPermissions(ctx context.Context, owner string, repo string) (*ActionsPermissionsRepository, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/actions/permissions", owner, repo) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + permissions := new(ActionsPermissionsRepository) + resp, err := s.client.Do(ctx, req, permissions) + if err != nil { + return nil, resp, err + } + + return permissions, resp, nil +} + +// EditActionsPermissions sets the permissions policy for repositories and allowed actions in a repository. +// +// GitHub API docs: https://docs.github.com/en/rest/reference/actions#set-github-actions-permissions-for-a-repository +func (s *RepositoriesService) EditActionsPermissions(ctx context.Context, owner string, repo string, actionsPermissionsRepository ActionsPermissionsRepository) (*ActionsPermissionsRepository, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/actions/permissions", owner, repo) + req, err := s.client.NewRequest("PUT", u, actionsPermissionsRepository) + if err != nil { + return nil, nil, err + } + permissions := new(ActionsPermissionsRepository) + resp, err := s.client.Do(ctx, req, permissions) + return permissions, resp, err +} diff --git a/github/repos_actions_permissions_test.go b/github/repos_actions_permissions_test.go new file mode 100644 index 00000000000..46fa2581509 --- /dev/null +++ b/github/repos_actions_permissions_test.go @@ -0,0 +1,104 @@ +// Copyright 2022 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" + "encoding/json" + "fmt" + "net/http" + "testing" + + "github.com/google/go-cmp/cmp" +) + +func TestRepositoriesService_GetActionsPermissions(t *testing.T) { + client, mux, _, teardown := setup() + defer teardown() + + mux.HandleFunc("/repos/o/r/actions/permissions", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + fmt.Fprint(w, `{"enabled": true, "allowed_actions": "all"}`) + }) + + ctx := context.Background() + org, _, err := client.Repositories.GetActionsPermissions(ctx, "o", "r") + if err != nil { + t.Errorf("Repositories.GetActionsPermissions returned error: %v", err) + } + want := &ActionsPermissionsRepository{Enabled: Bool(true), AllowedActions: String("all")} + if !cmp.Equal(org, want) { + t.Errorf("Repositories.GetActionsPermissions returned %+v, want %+v", org, want) + } + + const methodName = "GetActionsPermissions" + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Repositories.GetActionsPermissions(ctx, "\n", "\n") + return err + }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Repositories.GetActionsPermissions(ctx, "o", "r") + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) +} + +func TestRepositoriesService_EditActionsPermissions(t *testing.T) { + client, mux, _, teardown := setup() + defer teardown() + + input := &ActionsPermissionsRepository{Enabled: Bool(true), AllowedActions: String("selected")} + + mux.HandleFunc("/repos/o/r/actions/permissions", func(w http.ResponseWriter, r *http.Request) { + v := new(ActionsPermissionsRepository) + json.NewDecoder(r.Body).Decode(v) + + testMethod(t, r, "PUT") + if !cmp.Equal(v, input) { + t.Errorf("Request body = %+v, want %+v", v, input) + } + + fmt.Fprint(w, `{"enabled": true, "allowed_actions": "selected"}`) + }) + + ctx := context.Background() + org, _, err := client.Repositories.EditActionsPermissions(ctx, "o", "r", *input) + if err != nil { + t.Errorf("Repositories.EditActionsPermissions returned error: %v", err) + } + + want := &ActionsPermissionsRepository{Enabled: Bool(true), AllowedActions: String("selected")} + if !cmp.Equal(org, want) { + t.Errorf("Repositories.EditActionsPermissions returned %+v, want %+v", org, want) + } + + const methodName = "EditActionsPermissions" + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Repositories.EditActionsPermissions(ctx, "\n", "\n", *input) + return err + }) +} + +func TestActionsPermissionsRepository_Marshal(t *testing.T) { + testJSONMarshal(t, &ActionsPermissions{}, "{}") + + u := &ActionsPermissionsRepository{ + Enabled: Bool(true), + AllowedActions: String("all"), + SelectedActionsURL: String("someURL"), + } + + want := `{ + "enabled": true, + "allowed_actions": "all", + "selected_actions_url": "someURL" + }` + + testJSONMarshal(t, u, want) +} From 6ea25d0f29f8184dfa573404634eaac35487b32f Mon Sep 17 00:00:00 2001 From: Florian Wagner Date: Thu, 24 Mar 2022 12:26:37 +0900 Subject: [PATCH 02/10] Update example/actionpermissions/main.go Co-authored-by: Glenn Lewis <6598971+gmlewis@users.noreply.github.com> --- example/actionpermissions/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/actionpermissions/main.go b/example/actionpermissions/main.go index 4de11cf63d6..d809dabd9d5 100644 --- a/example/actionpermissions/main.go +++ b/example/actionpermissions/main.go @@ -4,7 +4,7 @@ // license that can be found in the LICENSE file. // The actionpermissions command utilizes go-github as a cli tool for -// changing GitHub Actions related permission settings for a repository +// changing GitHub Actions related permission settings for a repository. package main import ( From 6086a7fa9bff235405d6756685fd0b2ecf119841 Mon Sep 17 00:00:00 2001 From: Florian Wagner Date: Thu, 24 Mar 2022 12:28:23 +0900 Subject: [PATCH 03/10] Update github/repos_actions_allowed.go Co-authored-by: Glenn Lewis <6598971+gmlewis@users.noreply.github.com> --- github/repos_actions_allowed.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/repos_actions_allowed.go b/github/repos_actions_allowed.go index 840ab12358b..f808e74f796 100644 --- a/github/repos_actions_allowed.go +++ b/github/repos_actions_allowed.go @@ -13,7 +13,7 @@ import ( // GetActionsAllowed gets the actions that are allowed in a repository. // // GitHub API docs: https://docs.github.com/en/rest/reference/actions#get-allowed-actions-and-workflows-for-a-repository -func (s *RepositoriesService) GetActionsAllowed(ctx context.Context, org string, repo string) (*ActionsAllowed, *Response, error) { +func (s *RepositoriesService) GetActionsAllowed(ctx context.Context, org, repo string) (*ActionsAllowed, *Response, error) { u := fmt.Sprintf("repos/%v/%v/actions/permissions/selected-actions", org, repo) req, err := s.client.NewRequest("GET", u, nil) From a0c4e00e012e523ec966d154149a8325e84f9387 Mon Sep 17 00:00:00 2001 From: Florian Wagner Date: Thu, 24 Mar 2022 12:28:30 +0900 Subject: [PATCH 04/10] Update github/repos_actions_allowed.go Co-authored-by: Glenn Lewis <6598971+gmlewis@users.noreply.github.com> --- github/repos_actions_allowed.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/repos_actions_allowed.go b/github/repos_actions_allowed.go index f808e74f796..217eeeb8d44 100644 --- a/github/repos_actions_allowed.go +++ b/github/repos_actions_allowed.go @@ -33,7 +33,7 @@ func (s *RepositoriesService) GetActionsAllowed(ctx context.Context, org, repo s // EditActionsAllowed sets the actions that are allowed in a repository. // // GitHub API docs: https://docs.github.com/en/rest/reference/actions#set-allowed-actions-and-workflows-for-a-repository -func (s *RepositoriesService) EditActionsAllowed(ctx context.Context, org string, repo string, actionsAllowed ActionsAllowed) (*ActionsAllowed, *Response, error) { +func (s *RepositoriesService) EditActionsAllowed(ctx context.Context, org, repo string, actionsAllowed ActionsAllowed) (*ActionsAllowed, *Response, error) { u := fmt.Sprintf("repos/%v/%v/actions/permissions/selected-actions", org, repo) req, err := s.client.NewRequest("PUT", u, actionsAllowed) if err != nil { From ab1857eddb16f7186cef5ddd16b6566cb2f1478f Mon Sep 17 00:00:00 2001 From: Florian Wagner Date: Thu, 24 Mar 2022 12:29:10 +0900 Subject: [PATCH 05/10] Update github/repos_actions_permissions.go Co-authored-by: Glenn Lewis <6598971+gmlewis@users.noreply.github.com> --- github/repos_actions_permissions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/repos_actions_permissions.go b/github/repos_actions_permissions.go index 4325f82268d..e644b4081ad 100644 --- a/github/repos_actions_permissions.go +++ b/github/repos_actions_permissions.go @@ -46,7 +46,7 @@ func (s *RepositoriesService) GetActionsPermissions(ctx context.Context, owner s // EditActionsPermissions sets the permissions policy for repositories and allowed actions in a repository. // // GitHub API docs: https://docs.github.com/en/rest/reference/actions#set-github-actions-permissions-for-a-repository -func (s *RepositoriesService) EditActionsPermissions(ctx context.Context, owner string, repo string, actionsPermissionsRepository ActionsPermissionsRepository) (*ActionsPermissionsRepository, *Response, error) { +func (s *RepositoriesService) EditActionsPermissions(ctx context.Context, owner, repo string, actionsPermissionsRepository ActionsPermissionsRepository) (*ActionsPermissionsRepository, *Response, error) { u := fmt.Sprintf("repos/%v/%v/actions/permissions", owner, repo) req, err := s.client.NewRequest("PUT", u, actionsPermissionsRepository) if err != nil { From 32583c44170a5c39b7a7d2b58fc67d2a19dd4c8f Mon Sep 17 00:00:00 2001 From: Florian Wagner Date: Thu, 24 Mar 2022 12:29:17 +0900 Subject: [PATCH 06/10] Update github/repos_actions_permissions.go Co-authored-by: Glenn Lewis <6598971+gmlewis@users.noreply.github.com> --- github/repos_actions_permissions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/repos_actions_permissions.go b/github/repos_actions_permissions.go index e644b4081ad..79b49700f6d 100644 --- a/github/repos_actions_permissions.go +++ b/github/repos_actions_permissions.go @@ -26,7 +26,7 @@ func (a ActionsPermissionsRepository) String() string { // GetActionsPermissions gets the GitHub Actions permissions policy for repositories and allowed actions in a repository. // // GitHub API docs: https://docs.github.com/en/rest/reference/actions#get-github-actions-permissions-for-a-repository -func (s *RepositoriesService) GetActionsPermissions(ctx context.Context, owner string, repo string) (*ActionsPermissionsRepository, *Response, error) { +func (s *RepositoriesService) GetActionsPermissions(ctx context.Context, owner, repo string) (*ActionsPermissionsRepository, *Response, error) { u := fmt.Sprintf("repos/%v/%v/actions/permissions", owner, repo) req, err := s.client.NewRequest("GET", u, nil) From 913e7f4c1a39b855e42af05ab8c975231e85d0bc Mon Sep 17 00:00:00 2001 From: Florian Wagner Date: Thu, 24 Mar 2022 12:30:25 +0900 Subject: [PATCH 07/10] Update github/repos_actions_permissions.go Co-authored-by: Glenn Lewis <6598971+gmlewis@users.noreply.github.com> --- github/repos_actions_permissions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/repos_actions_permissions.go b/github/repos_actions_permissions.go index 79b49700f6d..552c332d6cb 100644 --- a/github/repos_actions_permissions.go +++ b/github/repos_actions_permissions.go @@ -10,7 +10,7 @@ import ( "fmt" ) -// ActionsPermissions represents a policy for repositories and allowed actions in a repository. +// ActionsPermissionsRepository represents a policy for repositories and allowed actions in a repository. // // GitHub API docs: https://docs.github.com/en/rest/reference/actions#set-github-actions-permissions-for-a-repository--parameters type ActionsPermissionsRepository struct { From 0c83efa9a49b4c839254cbc718167194a717e543 Mon Sep 17 00:00:00 2001 From: Florian Wagner Date: Thu, 24 Mar 2022 03:39:41 +0000 Subject: [PATCH 08/10] err/success path patterns, linebreaks Signed-off-by: GitHub --- github/repos_actions_allowed.go | 8 ++++++-- github/repos_actions_permissions.go | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/github/repos_actions_allowed.go b/github/repos_actions_allowed.go index 217eeeb8d44..2770fcccf67 100644 --- a/github/repos_actions_allowed.go +++ b/github/repos_actions_allowed.go @@ -15,7 +15,6 @@ import ( // GitHub API docs: https://docs.github.com/en/rest/reference/actions#get-allowed-actions-and-workflows-for-a-repository func (s *RepositoriesService) GetActionsAllowed(ctx context.Context, org, repo string) (*ActionsAllowed, *Response, error) { u := fmt.Sprintf("repos/%v/%v/actions/permissions/selected-actions", org, repo) - req, err := s.client.NewRequest("GET", u, nil) if err != nil { return nil, nil, err @@ -39,7 +38,12 @@ func (s *RepositoriesService) EditActionsAllowed(ctx context.Context, org, repo if err != nil { return nil, nil, err } + p := new(ActionsAllowed) resp, err := s.client.Do(ctx, req, p) - return p, resp, err + if err != nil { + return nil, resp, err + } + + return p, resp, nil } diff --git a/github/repos_actions_permissions.go b/github/repos_actions_permissions.go index 552c332d6cb..bff8c2f5ab4 100644 --- a/github/repos_actions_permissions.go +++ b/github/repos_actions_permissions.go @@ -28,7 +28,6 @@ func (a ActionsPermissionsRepository) String() string { // GitHub API docs: https://docs.github.com/en/rest/reference/actions#get-github-actions-permissions-for-a-repository func (s *RepositoriesService) GetActionsPermissions(ctx context.Context, owner, repo string) (*ActionsPermissionsRepository, *Response, error) { u := fmt.Sprintf("repos/%v/%v/actions/permissions", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) if err != nil { return nil, nil, err @@ -52,7 +51,12 @@ func (s *RepositoriesService) EditActionsPermissions(ctx context.Context, owner, if err != nil { return nil, nil, err } + permissions := new(ActionsPermissionsRepository) resp, err := s.client.Do(ctx, req, permissions) - return permissions, resp, err + if err != nil { + return nil, resp, err + } + + return permissions, resp, nil } From 634f395953078da1d9fbb2fea3551e6d91e628f8 Mon Sep 17 00:00:00 2001 From: Florian Wagner Date: Thu, 24 Mar 2022 03:40:01 +0000 Subject: [PATCH 09/10] reuse exiting functions Signed-off-by: GitHub --- example/actionpermissions/main.go | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/example/actionpermissions/main.go b/example/actionpermissions/main.go index d809dabd9d5..a84a8e5474f 100644 --- a/example/actionpermissions/main.go +++ b/example/actionpermissions/main.go @@ -47,7 +47,7 @@ func main() { fmt.Printf("Current ActionsPermissions %s\n", actionsPermissionsRepository.String()) - actionsPermissionsRepository = &github.ActionsPermissionsRepository{Enabled: Bool(true), AllowedActions: String("selected")} + actionsPermissionsRepository = &github.ActionsPermissionsRepository{Enabled: github.Bool(true), AllowedActions: github.String("selected")} _, _, err = client.Repositories.EditActionsPermissions(ctx, *owner, *name, *actionsPermissionsRepository) if err != nil { log.Fatal(err) @@ -62,7 +62,7 @@ func main() { fmt.Printf("Current ActionsAllowed %s\n", actionsAllowed.String()) - actionsAllowed = &github.ActionsAllowed{GithubOwnedAllowed: Bool(true), VerifiedAllowed: Bool(false), PatternsAllowed: []string{"a/b"}} + actionsAllowed = &github.ActionsAllowed{GithubOwnedAllowed: github.Bool(true), VerifiedAllowed: github.Bool(false), PatternsAllowed: []string{"a/b"}} _, _, err = client.Repositories.EditActionsAllowed(ctx, *owner, *name, *actionsAllowed) if err != nil { log.Fatal(err) @@ -70,7 +70,7 @@ func main() { fmt.Printf("Current ActionsAllowed %s\n", actionsAllowed.String()) - actionsPermissionsRepository = &github.ActionsPermissionsRepository{Enabled: Bool(true), AllowedActions: String("all")} + actionsPermissionsRepository = &github.ActionsPermissionsRepository{Enabled: github.Bool(true), AllowedActions: github.String("all")} _, _, err = client.Repositories.EditActionsPermissions(ctx, *owner, *name, *actionsPermissionsRepository) if err != nil { log.Fatal(err) @@ -78,11 +78,3 @@ func main() { fmt.Printf("Current ActionsPermissions %s\n", actionsPermissionsRepository.String()) } - -// Bool is a helper routine that allocates a new bool value -// to store v and returns a pointer to it. -func Bool(v bool) *bool { return &v } - -// String is a helper routine that allocates a new string value -// to store v and returns a pointer to it. -func String(v string) *string { return &v } From ddff22bede66ad94a9c25d662faeb55adbfa4e7f Mon Sep 17 00:00:00 2001 From: Florian Wagner Date: Fri, 25 Mar 2022 00:45:01 +0000 Subject: [PATCH 10/10] add missing tests Signed-off-by: GitHub --- github/repos_actions_allowed_test.go | 8 ++++++++ github/repos_actions_permissions_test.go | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/github/repos_actions_allowed_test.go b/github/repos_actions_allowed_test.go index c58d7b05366..6736f909f9c 100644 --- a/github/repos_actions_allowed_test.go +++ b/github/repos_actions_allowed_test.go @@ -82,4 +82,12 @@ func TestRepositoriesService_EditActionsAllowed(t *testing.T) { _, _, err = client.Repositories.EditActionsAllowed(ctx, "\n", "\n", *input) return err }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Repositories.EditActionsAllowed(ctx, "o", "r", *input) + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) } diff --git a/github/repos_actions_permissions_test.go b/github/repos_actions_permissions_test.go index 46fa2581509..1d6012f62d2 100644 --- a/github/repos_actions_permissions_test.go +++ b/github/repos_actions_permissions_test.go @@ -83,6 +83,14 @@ func TestRepositoriesService_EditActionsPermissions(t *testing.T) { _, _, err = client.Repositories.EditActionsPermissions(ctx, "\n", "\n", *input) return err }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Repositories.EditActionsPermissions(ctx, "o", "r", *input) + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) } func TestActionsPermissionsRepository_Marshal(t *testing.T) {