44 lines
1.2 KiB
Go
44 lines
1.2 KiB
Go
package shared
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"github.com/google/go-github/v62/github"
|
|
)
|
|
|
|
func CreateGitBranch(ctx context.Context, client *github.Client, owner, repo, branch, base string) error {
|
|
master, _, err := client.Git.GetRef(ctx, owner, repo, "refs/heads/"+base)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
branchRef := "refs/heads/" + branch
|
|
_, _, err = client.Git.CreateRef(ctx, owner, repo, &github.Reference{
|
|
Ref: &branchRef,
|
|
Object: master.Object,
|
|
})
|
|
// Allow updating existing branch
|
|
if r, ok := err.(*github.ErrorResponse); !ok || r.Message != "Reference already exists" {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func CreatePullRequest(ctx context.Context, client *github.Client, owner, repo string, pr github.NewPullRequest) error {
|
|
branch := "refs/heads/" + *pr.Head
|
|
_, _, err := client.PullRequests.Create(ctx, owner, repo, &pr)
|
|
if err, ok := err.(*github.ErrorResponse); ok {
|
|
// Clean up PR branch if no change
|
|
for _, e := range err.Errors {
|
|
if strings.HasPrefix(e.Message, "No commits between") {
|
|
_, err := client.Git.DeleteRef(ctx, owner, repo, branch)
|
|
return err
|
|
}
|
|
if strings.HasPrefix(e.Message, "A pull request already exists") {
|
|
return nil
|
|
}
|
|
}
|
|
}
|
|
return err
|
|
}
|