pr: remove pending requests
Remove all pending review requests when we merge
This commit is contained in:
@@ -113,6 +113,10 @@ type GiteaReviewRequester interface {
|
||||
RequestReviews(pr *models.PullRequest, reviewer ...string) ([]*models.PullReview, error)
|
||||
}
|
||||
|
||||
type GiteaReviewUnrequester interface {
|
||||
UnrequestReview(org, repo string, id int64, reviwers ...string) error
|
||||
}
|
||||
|
||||
type GiteaReviewer interface {
|
||||
AddReviewComment(pr *models.PullRequest, state models.ReviewStateType, comment string) (*models.PullReview, error)
|
||||
}
|
||||
@@ -144,6 +148,7 @@ type Gitea interface {
|
||||
GiteaComment
|
||||
GiteaRepoFetcher
|
||||
GiteaReviewRequester
|
||||
GiteaReviewUnrequester
|
||||
GiteaReviewer
|
||||
GiteaPRFetcher
|
||||
GiteaCommitFetcher
|
||||
@@ -600,6 +605,14 @@ func (gitea *GiteaTransport) RequestReviews(pr *models.PullRequest, reviewers ..
|
||||
return review.GetPayload(), nil
|
||||
}
|
||||
|
||||
func (gitea *GiteaTransport) UnrequestReview(org, repo string, id int64, reviwers ...string) error {
|
||||
_, err := gitea.client.Repository.RepoDeletePullReviewRequests(
|
||||
repository.NewRepoDeletePullReviewRequestsParams().WithOwner(org).WithRepo(repo).WithIndex(id).WithBody(&models.PullReviewRequestOptions{
|
||||
Reviewers: reviwers,
|
||||
}), gitea.transport.DefaultAuthentication)
|
||||
return err
|
||||
}
|
||||
|
||||
func (gitea *GiteaTransport) AddReviewComment(pr *models.PullRequest, state models.ReviewStateType, comment string) (*models.PullReview, error) {
|
||||
c, err := gitea.client.Repository.RepoCreatePullReview(
|
||||
repository.NewRepoCreatePullReviewParams().
|
||||
|
||||
25
common/pr.go
25
common/pr.go
@@ -210,7 +210,7 @@ func (rs *PRSet) IsApproved(gitea GiteaPRChecker, maintainers MaintainershipData
|
||||
return is_reviewed
|
||||
}
|
||||
|
||||
func (rs *PRSet) Merge(git Git) error {
|
||||
func (rs *PRSet) Merge(gitea GiteaReviewUnrequester, git Git) error {
|
||||
prjgit, err := rs.GetPrjGitPR()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -313,18 +313,33 @@ func (rs *PRSet) Merge(git Git) error {
|
||||
}
|
||||
}
|
||||
|
||||
// FF all non-prj git
|
||||
// FF all non-prj git and unrequest reviews.
|
||||
for _, prinfo := range rs.PRs {
|
||||
// remove pending review requests
|
||||
repo := prinfo.PR.Base.Repo
|
||||
head := prinfo.PR.Head
|
||||
id := prinfo.PR.Index
|
||||
|
||||
reviewers := make([]string, len(prinfo.PR.RequestedReviewers))
|
||||
for idx := range prinfo.PR.RequestedReviewers {
|
||||
r := prinfo.PR.RequestedReviewers[idx]
|
||||
if r != nil {
|
||||
reviewers[idx] = r.UserName
|
||||
}
|
||||
}
|
||||
if err := gitea.UnrequestReview(repo.Owner.UserName, repo.Name, id, reviewers...); err != nil {
|
||||
LogError("Cannot unrequest reviews in PR:", repo.Owner.UserName, repo.Name, id, reviewers, ": ", err)
|
||||
}
|
||||
|
||||
// PrjGit already merged above, so skip here.
|
||||
if rs.IsPrjGitPR(prinfo.PR) {
|
||||
continue
|
||||
}
|
||||
repo := prinfo.PR.Base.Repo
|
||||
head := prinfo.PR.Head
|
||||
|
||||
prinfo.RemoteName, err = git.GitClone(repo.Name, rs.Config.Branch, repo.SSHURL)
|
||||
PanicOnError(err)
|
||||
git.GitExecOrPanic(repo.Name, "fetch", prinfo.RemoteName, head.Sha)
|
||||
git.GitExecOrPanic(repo.Name, "merge", "--ff", head.Sha)
|
||||
|
||||
}
|
||||
|
||||
// push changes
|
||||
|
||||
@@ -33,10 +33,11 @@ import (
|
||||
|
||||
const (
|
||||
AppName = "workflow-pr"
|
||||
GitAuthor = "AutoGits - pr-review"
|
||||
GitEmail = "adam+autogits-pr@zombino.com"
|
||||
)
|
||||
|
||||
var GitAuthor string
|
||||
var GitEmail string
|
||||
|
||||
var ListPROnly bool
|
||||
var PRID int64
|
||||
var CurrentUser *models.User
|
||||
@@ -44,6 +45,9 @@ var GitHandler common.GitHandlerGenerator
|
||||
var Gitea common.Gitea
|
||||
|
||||
func main() {
|
||||
flag.StringVar(&GitAuthor, "git-author", "AutoGits PR Review Bot", "Git commit author")
|
||||
flag.StringVar(&GitEmail, "git-email", "amajer+devel-git@suse.de", "Git commit email")
|
||||
|
||||
workflowConfig := flag.String("config", "", "Repository and workflow definition file")
|
||||
giteaUrl := flag.String("gitea-url", "https://src.opensuse.org", "Gitea instance")
|
||||
rabbitUrl := flag.String("url", "amqps://rabbit.opensuse.org", "URL for RabbitMQ instance")
|
||||
|
||||
@@ -157,7 +157,7 @@ func (o *PullRequestOpened) Process(req *common.PullRequestWebhookEvent, git com
|
||||
common.LogInfo("Reviewed?", prset.IsApproved(Gitea, maintainers))
|
||||
if prset.IsConsistent() && prset.IsApproved(Gitea, maintainers) {
|
||||
common.LogInfo("Merging...")
|
||||
if err = prset.Merge(git); err != nil {
|
||||
if err = prset.Merge(Gitea, git); err != nil {
|
||||
common.LogError("merge error:", err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user