github.com/google/go-github/v49@v49.1.0/github/issues_labels.go (about) 1 // Copyright 2013 The go-github AUTHORS. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 package github 7 8 import ( 9 "context" 10 "fmt" 11 ) 12 13 // Label represents a GitHub label on an Issue 14 type Label struct { 15 ID *int64 `json:"id,omitempty"` 16 URL *string `json:"url,omitempty"` 17 Name *string `json:"name,omitempty"` 18 Color *string `json:"color,omitempty"` 19 Description *string `json:"description,omitempty"` 20 Default *bool `json:"default,omitempty"` 21 NodeID *string `json:"node_id,omitempty"` 22 } 23 24 func (l Label) String() string { 25 return Stringify(l) 26 } 27 28 // ListLabels lists all labels for a repository. 29 // 30 // GitHub API docs: https://docs.github.com/en/rest/issues/labels#list-labels-for-a-repository 31 func (s *IssuesService) ListLabels(ctx context.Context, owner string, repo string, opts *ListOptions) ([]*Label, *Response, error) { 32 u := fmt.Sprintf("repos/%v/%v/labels", owner, repo) 33 u, err := addOptions(u, opts) 34 if err != nil { 35 return nil, nil, err 36 } 37 38 req, err := s.client.NewRequest("GET", u, nil) 39 if err != nil { 40 return nil, nil, err 41 } 42 43 var labels []*Label 44 resp, err := s.client.Do(ctx, req, &labels) 45 if err != nil { 46 return nil, resp, err 47 } 48 49 return labels, resp, nil 50 } 51 52 // GetLabel gets a single label. 53 // 54 // GitHub API docs: https://docs.github.com/en/rest/issues/labels#get-a-label 55 func (s *IssuesService) GetLabel(ctx context.Context, owner string, repo string, name string) (*Label, *Response, error) { 56 u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name) 57 req, err := s.client.NewRequest("GET", u, nil) 58 if err != nil { 59 return nil, nil, err 60 } 61 62 label := new(Label) 63 resp, err := s.client.Do(ctx, req, label) 64 if err != nil { 65 return nil, resp, err 66 } 67 68 return label, resp, nil 69 } 70 71 // CreateLabel creates a new label on the specified repository. 72 // 73 // GitHub API docs: https://docs.github.com/en/rest/issues/labels#create-a-label 74 func (s *IssuesService) CreateLabel(ctx context.Context, owner string, repo string, label *Label) (*Label, *Response, error) { 75 u := fmt.Sprintf("repos/%v/%v/labels", owner, repo) 76 req, err := s.client.NewRequest("POST", u, label) 77 if err != nil { 78 return nil, nil, err 79 } 80 81 l := new(Label) 82 resp, err := s.client.Do(ctx, req, l) 83 if err != nil { 84 return nil, resp, err 85 } 86 87 return l, resp, nil 88 } 89 90 // EditLabel edits a label. 91 // 92 // GitHub API docs: https://docs.github.com/en/rest/issues/labels#update-a-label 93 func (s *IssuesService) EditLabel(ctx context.Context, owner string, repo string, name string, label *Label) (*Label, *Response, error) { 94 u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name) 95 req, err := s.client.NewRequest("PATCH", u, label) 96 if err != nil { 97 return nil, nil, err 98 } 99 100 l := new(Label) 101 resp, err := s.client.Do(ctx, req, l) 102 if err != nil { 103 return nil, resp, err 104 } 105 106 return l, resp, nil 107 } 108 109 // DeleteLabel deletes a label. 110 // 111 // GitHub API docs: https://docs.github.com/en/rest/issues/labels#delete-a-label 112 func (s *IssuesService) DeleteLabel(ctx context.Context, owner string, repo string, name string) (*Response, error) { 113 u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name) 114 req, err := s.client.NewRequest("DELETE", u, nil) 115 if err != nil { 116 return nil, err 117 } 118 return s.client.Do(ctx, req, nil) 119 } 120 121 // ListLabelsByIssue lists all labels for an issue. 122 // 123 // GitHub API docs: https://docs.github.com/en/rest/issues/labels#list-labels-for-an-issue 124 func (s *IssuesService) ListLabelsByIssue(ctx context.Context, owner string, repo string, number int, opts *ListOptions) ([]*Label, *Response, error) { 125 u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number) 126 u, err := addOptions(u, opts) 127 if err != nil { 128 return nil, nil, err 129 } 130 131 req, err := s.client.NewRequest("GET", u, nil) 132 if err != nil { 133 return nil, nil, err 134 } 135 136 var labels []*Label 137 resp, err := s.client.Do(ctx, req, &labels) 138 if err != nil { 139 return nil, resp, err 140 } 141 142 return labels, resp, nil 143 } 144 145 // AddLabelsToIssue adds labels to an issue. 146 // 147 // GitHub API docs: https://docs.github.com/en/rest/issues/labels#add-labels-to-an-issue 148 func (s *IssuesService) AddLabelsToIssue(ctx context.Context, owner string, repo string, number int, labels []string) ([]*Label, *Response, error) { 149 u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number) 150 req, err := s.client.NewRequest("POST", u, labels) 151 if err != nil { 152 return nil, nil, err 153 } 154 155 var l []*Label 156 resp, err := s.client.Do(ctx, req, &l) 157 if err != nil { 158 return nil, resp, err 159 } 160 161 return l, resp, nil 162 } 163 164 // RemoveLabelForIssue removes a label for an issue. 165 // 166 // GitHub API docs: https://docs.github.com/en/rest/issues/labels#remove-a-label-from-an-issue 167 func (s *IssuesService) RemoveLabelForIssue(ctx context.Context, owner string, repo string, number int, label string) (*Response, error) { 168 u := fmt.Sprintf("repos/%v/%v/issues/%d/labels/%v", owner, repo, number, label) 169 req, err := s.client.NewRequest("DELETE", u, nil) 170 if err != nil { 171 return nil, err 172 } 173 174 return s.client.Do(ctx, req, nil) 175 } 176 177 // ReplaceLabelsForIssue replaces all labels for an issue. 178 // 179 // GitHub API docs: https://docs.github.com/en/rest/issues/labels#set-labels-for-an-issue 180 func (s *IssuesService) ReplaceLabelsForIssue(ctx context.Context, owner string, repo string, number int, labels []string) ([]*Label, *Response, error) { 181 u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number) 182 req, err := s.client.NewRequest("PUT", u, labels) 183 if err != nil { 184 return nil, nil, err 185 } 186 187 var l []*Label 188 resp, err := s.client.Do(ctx, req, &l) 189 if err != nil { 190 return nil, resp, err 191 } 192 193 return l, resp, nil 194 } 195 196 // RemoveLabelsForIssue removes all labels for an issue. 197 // 198 // GitHub API docs: https://docs.github.com/en/rest/issues/labels#remove-all-labels-from-an-issue 199 func (s *IssuesService) RemoveLabelsForIssue(ctx context.Context, owner string, repo string, number int) (*Response, error) { 200 u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number) 201 req, err := s.client.NewRequest("DELETE", u, nil) 202 if err != nil { 203 return nil, err 204 } 205 206 return s.client.Do(ctx, req, nil) 207 } 208 209 // ListLabelsForMilestone lists labels for every issue in a milestone. 210 // 211 // GitHub API docs: https://docs.github.com/en/rest/issues/labels#list-labels-for-issues-in-a-milestone 212 func (s *IssuesService) ListLabelsForMilestone(ctx context.Context, owner string, repo string, number int, opts *ListOptions) ([]*Label, *Response, error) { 213 u := fmt.Sprintf("repos/%v/%v/milestones/%d/labels", owner, repo, number) 214 u, err := addOptions(u, opts) 215 if err != nil { 216 return nil, nil, err 217 } 218 219 req, err := s.client.NewRequest("GET", u, nil) 220 if err != nil { 221 return nil, nil, err 222 } 223 224 var labels []*Label 225 resp, err := s.client.Do(ctx, req, &labels) 226 if err != nil { 227 return nil, resp, err 228 } 229 230 return labels, resp, nil 231 }