-
Notifications
You must be signed in to change notification settings - Fork 19
/
git_client.go
79 lines (67 loc) · 2.26 KB
/
git_client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package internal
import (
"context"
"github.com/google/go-github/v32/github"
"github.com/solo-io/go-utils/pkgmgmtutils/formula_updater_types"
)
// uses real dependencies- i.e. actually communicates with GitHub
func NewGitClient(client *github.Client) formula_updater_types.GitClient {
return &gitClient{
client: client,
}
}
type gitClient struct {
client *github.Client
}
func (g *gitClient) GetRefSha(ctx context.Context, owner string, repo string, ref string) (string, error) {
foundRef, _, err := g.client.Git.GetRef(ctx, owner, repo, ref)
if err != nil {
return "", err
}
return *foundRef.Object.SHA, nil
}
func (g *gitClient) GetReleaseAssetsByTag(ctx context.Context, owner, repo, version string) ([]formula_updater_types.ReleaseAsset, error) {
rr, _, err := g.client.Repositories.GetReleaseByTag(ctx, owner, repo, version)
if err != nil {
return nil, err
}
var releaseAssets []formula_updater_types.ReleaseAsset
for _, asset := range rr.Assets {
releaseAssets = append(releaseAssets, formula_updater_types.ReleaseAsset{
Name: asset.GetName(),
BrowserDownloadUrl: asset.GetBrowserDownloadURL(),
})
}
return releaseAssets, nil
}
func (g *gitClient) CreatePullRequest(
ctx context.Context,
formulaOptions *formula_updater_types.FormulaOptions,
commitMessage string,
branchName string,
) error {
prRepoOwner := formulaOptions.PRRepoOwner
prRepoName := formulaOptions.PRRepoName
prHead := branchName
if prRepoOwner == "" {
prRepoOwner = formulaOptions.RepoOwner
prRepoName = formulaOptions.RepoName
} else if prRepoOwner != formulaOptions.RepoOwner {
// For cross-repo PR, prHead should be in format of "<change repo owner>:branch"
prHead = formulaOptions.RepoOwner + ":" + branchName
}
base := formulaOptions.PRBranch
if base == "" {
base = "master"
}
// Create GitHub Pull Request
// GitHub API docs: https://developer.github.com/v3/pulls/#create-a-pull-request
_, _, err := g.client.PullRequests.Create(ctx, prRepoOwner, prRepoName, &github.NewPullRequest{
Title: github.String(commitMessage),
Head: github.String(prHead),
Base: github.String(base),
Body: github.String(formulaOptions.PRDescription),
MaintainerCanModify: github.Bool(true),
})
return err
}