diff --git a/common/gitea_utils.go b/common/gitea_utils.go index e489926..4e1addf 100644 --- a/common/gitea_utils.go +++ b/common/gitea_utils.go @@ -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(). diff --git a/common/pr.go b/common/pr.go index bef6790..c358a8e 100644 --- a/common/pr.go +++ b/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 diff --git a/workflow-pr/main.go b/workflow-pr/main.go index e223d9b..c303bf0 100644 --- a/workflow-pr/main.go +++ b/workflow-pr/main.go @@ -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") diff --git a/workflow-pr/main_test.go b/workflow-pr/main_test.go index 13904a1..1f33ab3 100644 --- a/workflow-pr/main_test.go +++ b/workflow-pr/main_test.go @@ -194,7 +194,7 @@ func TestCreatePrBranch(t *testing.T) { t.Error(buf.String()) } - os.CopyFS("/tmp/test", os.DirFS(git.GitPath)) + os.CopyFS("/tmp/test", os.DirFS(git.GitPath)) git.GitExecOrPanic("prj", "reset", "--hard", "testingCreated") rev = strings.TrimSpace(git.GitExecWithOutputOrPanic("prj", "submodule", "status", "testRepo"))[1 : len(req.Pull_Request.Head.Sha)+1] if rev != req.Pull_Request.Head.Sha { diff --git a/workflow-pr/pr_processor_opened.go b/workflow-pr/pr_processor_opened.go index 5ce1c6b..7d56e92 100644 --- a/workflow-pr/pr_processor_opened.go +++ b/workflow-pr/pr_processor_opened.go @@ -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) } }