...

Source file src/github.com/google/go-github/v47/github/issues_labels.go

Documentation: github.com/google/go-github/v47/github

     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  }
   232  

View as plain text