Skip to content

Commit

Permalink
Add CreateOrUpdateCustomPropertyValues for repositories
Browse files Browse the repository at this point in the history
  • Loading branch information
HariCharanK committed Mar 15, 2024
1 parent 169ad4d commit 771cfb5
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 0 deletions.
33 changes: 33 additions & 0 deletions github/repos_properties.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@ import (
"fmt"
)

// CustomPropertyNonNullValue represents a custom property, with a non-null value.
type CustomPropertyNonNullValue struct {
PropertyName string `json:"property_name"`
Value string `json:"value"`
}

// GetAllCustomPropertyValues gets all custom property values that are set for a repository.
//
// GitHub API docs: https://docs.github.com/rest/repos/custom-properties#get-all-custom-property-values-for-a-repository
Expand All @@ -31,3 +37,30 @@ func (s *RepositoriesService) GetAllCustomPropertyValues(ctx context.Context, or

return customPropertyValues, resp, nil
}

// CreateOrUpdateCustomPropertyValues creates new or updates existing custom property values for a repository.
//
// GitHub API docs: https://docs.github.com/en/rest/repos/custom-properties#create-or-update-custom-property-values-for-a-repository
//
//meta:operation PATCH /repos/{owner}/{repo}/properties/values
func (s *RepositoriesService) CreateOrUpdateCustomPropertyValues(ctx context.Context, org, repo string, customPropertyValues []*CustomPropertyNonNullValue) (*Response, error) {
u := fmt.Sprintf("repos/%v/%v/properties/values", org, repo)

params := struct {
CustomPropertyValues []*CustomPropertyNonNullValue `json:"properties"`
}{
CustomPropertyValues: customPropertyValues,
}

req, err := s.client.NewRequest("PATCH", u, params)
if err != nil {
return nil, err
}

resp, err := s.client.Do(ctx, req, nil)
if err != nil {
return resp, err
}

return resp, nil
}
29 changes: 29 additions & 0 deletions github/repos_properties_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,32 @@ func TestRepositoriesService_GetAllCustomPropertyValues(t *testing.T) {
return resp, err
})
}

func TestRepositoriesService_CreateOrUpdateCustomPropertyValues(t *testing.T) {
client, mux, _, teardown := setup()
defer teardown()

// No Content when custom property values are successfully created or updated, StatusCode: 204 (No Content)
mux.HandleFunc("/repos/o/r/properties/values", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "PATCH")
w.WriteHeader(http.StatusNoContent)
})

ctx := context.Background()
customPropertyValues := []*CustomPropertyNonNullValue{
{
PropertyName: "environment",
Value: "production",
},
}
_, err := client.Repositories.CreateOrUpdateCustomPropertyValues(ctx, "o", "r", customPropertyValues)
if err != nil {
t.Errorf("Repositories.CreateOrUpdateCustomPropertyValues returned error: %v", err)
}

const methodName = "CreateOrUpdateCustomPropertyValues"

testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Repositories.CreateOrUpdateCustomPropertyValues(ctx, "o", "r", customPropertyValues)
})
}
5 changes: 5 additions & 0 deletions openapi_operations.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4606,6 +4606,11 @@ openapi_operations:
openapi_files:
- descriptions/api.github.com/api.github.com.json
- descriptions/ghec/ghec.json
- name: PATCH /repos/{owner}/{repo}/properties/values
documentation_url: https://docs.github.com/en/rest/repos/custom-properties#create-or-update-custom-property-values-for-a-repository
openapi_files:
- descriptions/api.github.com/api.github.com.json
- descriptions/ghec/ghec.json
- name: GET /repos/{owner}/{repo}/pulls
documentation_url: https://docs.github.com/rest/pulls/pulls#list-pull-requests
openapi_files:
Expand Down

0 comments on commit 771cfb5

Please sign in to comment.