Skip to content

Commit c8a858e

Browse files
authored
feat(internal/github): add support requred for release (#1693)
We are going to need more github functionality in order to tag and release from librarian. This adds all of the functions that should be required. Updates: #1009
1 parent 8f9cfc0 commit c8a858e

File tree

2 files changed

+537
-0
lines changed

2 files changed

+537
-0
lines changed

internal/github/github.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,27 @@ func (c *Client) CreatePullRequest(ctx context.Context, repo *Repository, remote
135135
return pullRequestMetadata, nil
136136
}
137137

138+
// GetLabels fetches the labels for an issue.
139+
func (c *Client) GetLabels(ctx context.Context, number int) ([]string, error) {
140+
slog.Info("Getting labels", "number", number)
141+
labels, _, err := c.Issues.ListLabelsByIssue(ctx, c.repo.Owner, c.repo.Name, number, nil)
142+
if err != nil {
143+
return nil, err
144+
}
145+
var labelNames []string
146+
for _, label := range labels {
147+
labelNames = append(labelNames, *label.Name)
148+
}
149+
return labelNames, nil
150+
}
151+
152+
// ReplaceLabels replaces all labels for an issue.
153+
func (c *Client) ReplaceLabels(ctx context.Context, number int, labels []string) error {
154+
slog.Info("Replacing labels", "number", number, "labels", labels)
155+
_, _, err := c.Issues.ReplaceLabelsForIssue(ctx, c.repo.Owner, c.repo.Name, number, labels)
156+
return err
157+
}
158+
138159
// AddLabelsToIssue adds labels to an existing issue in a GitHub repository.
139160
func (c *Client) AddLabelsToIssue(ctx context.Context, repo *Repository, number int, labels []string) error {
140161
slog.Info("Labels added to issue", "number", number, "labels", labels)
@@ -165,3 +186,56 @@ func FetchGitHubRepoFromRemote(repo gitrepo.Repository) (*Repository, error) {
165186

166187
return nil, fmt.Errorf("could not find an 'origin' remote pointing to a GitHub https URL")
167188
}
189+
190+
// SearchPullRequests searches for pull requests in the repository using the provided raw query.
191+
func (c *Client) SearchPullRequests(ctx context.Context, query string) ([]*PullRequest, error) {
192+
var prs []*PullRequest
193+
opts := &github.SearchOptions{
194+
ListOptions: github.ListOptions{PerPage: 100},
195+
}
196+
for {
197+
result, resp, err := c.Search.Issues(ctx, query, opts)
198+
if err != nil {
199+
return nil, err
200+
}
201+
for _, issue := range result.Issues {
202+
if issue.IsPullRequest() {
203+
pr, _, err := c.PullRequests.Get(ctx, c.repo.Owner, c.repo.Name, issue.GetNumber())
204+
if err != nil {
205+
return nil, err
206+
}
207+
prs = append(prs, pr)
208+
}
209+
}
210+
if resp.NextPage == 0 {
211+
break
212+
}
213+
opts.Page = resp.NextPage
214+
}
215+
return prs, nil
216+
}
217+
218+
// GetPullRequest gets a pull request by its number.
219+
func (c *Client) GetPullRequest(ctx context.Context, number int) (*PullRequest, error) {
220+
pr, _, err := c.PullRequests.Get(ctx, c.repo.Owner, c.repo.Name, number)
221+
return pr, err
222+
}
223+
224+
// CreateRelease creates a tag and release in the repository at the given commitish.
225+
func (c *Client) CreateRelease(ctx context.Context, tagName, name, body, commitish string) (*github.RepositoryRelease, error) {
226+
r, _, err := c.Repositories.CreateRelease(ctx, c.repo.Owner, c.repo.Name, &github.RepositoryRelease{
227+
TagName: &tagName,
228+
Name: &name,
229+
Body: &body,
230+
TargetCommitish: &commitish,
231+
})
232+
return r, err
233+
}
234+
235+
// CreateIssueComment adds a comment to the issue number provided.
236+
func (c *Client) CreateIssueComment(ctx context.Context, number int, comment string) error {
237+
_, _, err := c.Issues.CreateComment(ctx, c.repo.Owner, c.repo.Name, number, &github.IssueComment{
238+
Body: &comment,
239+
})
240+
return err
241+
}

0 commit comments

Comments
 (0)