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)
|
RequestReviews(pr *models.PullRequest, reviewer ...string) ([]*models.PullReview, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GiteaReviewUnrequester interface {
|
||||||
|
UnrequestReview(org, repo string, id int64, reviwers ...string) error
|
||||||
|
}
|
||||||
|
|
||||||
type GiteaReviewer interface {
|
type GiteaReviewer interface {
|
||||||
AddReviewComment(pr *models.PullRequest, state models.ReviewStateType, comment string) (*models.PullReview, error)
|
AddReviewComment(pr *models.PullRequest, state models.ReviewStateType, comment string) (*models.PullReview, error)
|
||||||
}
|
}
|
||||||
@@ -144,6 +148,7 @@ type Gitea interface {
|
|||||||
GiteaComment
|
GiteaComment
|
||||||
GiteaRepoFetcher
|
GiteaRepoFetcher
|
||||||
GiteaReviewRequester
|
GiteaReviewRequester
|
||||||
|
GiteaReviewUnrequester
|
||||||
GiteaReviewer
|
GiteaReviewer
|
||||||
GiteaPRFetcher
|
GiteaPRFetcher
|
||||||
GiteaCommitFetcher
|
GiteaCommitFetcher
|
||||||
@@ -600,6 +605,14 @@ func (gitea *GiteaTransport) RequestReviews(pr *models.PullRequest, reviewers ..
|
|||||||
return review.GetPayload(), nil
|
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) {
|
func (gitea *GiteaTransport) AddReviewComment(pr *models.PullRequest, state models.ReviewStateType, comment string) (*models.PullReview, error) {
|
||||||
c, err := gitea.client.Repository.RepoCreatePullReview(
|
c, err := gitea.client.Repository.RepoCreatePullReview(
|
||||||
repository.NewRepoCreatePullReviewParams().
|
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
|
return is_reviewed
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rs *PRSet) Merge(git Git) error {
|
func (rs *PRSet) Merge(gitea GiteaReviewUnrequester, git Git) error {
|
||||||
prjgit, err := rs.GetPrjGitPR()
|
prjgit, err := rs.GetPrjGitPR()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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 {
|
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) {
|
if rs.IsPrjGitPR(prinfo.PR) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
repo := prinfo.PR.Base.Repo
|
|
||||||
head := prinfo.PR.Head
|
|
||||||
|
|
||||||
prinfo.RemoteName, err = git.GitClone(repo.Name, rs.Config.Branch, repo.SSHURL)
|
prinfo.RemoteName, err = git.GitClone(repo.Name, rs.Config.Branch, repo.SSHURL)
|
||||||
PanicOnError(err)
|
PanicOnError(err)
|
||||||
git.GitExecOrPanic(repo.Name, "fetch", prinfo.RemoteName, head.Sha)
|
git.GitExecOrPanic(repo.Name, "fetch", prinfo.RemoteName, head.Sha)
|
||||||
git.GitExecOrPanic(repo.Name, "merge", "--ff", head.Sha)
|
git.GitExecOrPanic(repo.Name, "merge", "--ff", head.Sha)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// push changes
|
// push changes
|
||||||
|
|||||||
@@ -33,10 +33,11 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
AppName = "workflow-pr"
|
AppName = "workflow-pr"
|
||||||
GitAuthor = "AutoGits - pr-review"
|
|
||||||
GitEmail = "adam+autogits-pr@zombino.com"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var GitAuthor string
|
||||||
|
var GitEmail string
|
||||||
|
|
||||||
var ListPROnly bool
|
var ListPROnly bool
|
||||||
var PRID int64
|
var PRID int64
|
||||||
var CurrentUser *models.User
|
var CurrentUser *models.User
|
||||||
@@ -44,6 +45,9 @@ var GitHandler common.GitHandlerGenerator
|
|||||||
var Gitea common.Gitea
|
var Gitea common.Gitea
|
||||||
|
|
||||||
func main() {
|
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")
|
workflowConfig := flag.String("config", "", "Repository and workflow definition file")
|
||||||
giteaUrl := flag.String("gitea-url", "https://src.opensuse.org", "Gitea instance")
|
giteaUrl := flag.String("gitea-url", "https://src.opensuse.org", "Gitea instance")
|
||||||
rabbitUrl := flag.String("url", "amqps://rabbit.opensuse.org", "URL for RabbitMQ 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))
|
common.LogInfo("Reviewed?", prset.IsApproved(Gitea, maintainers))
|
||||||
if prset.IsConsistent() && prset.IsApproved(Gitea, maintainers) {
|
if prset.IsConsistent() && prset.IsApproved(Gitea, maintainers) {
|
||||||
common.LogInfo("Merging...")
|
common.LogInfo("Merging...")
|
||||||
if err = prset.Merge(git); err != nil {
|
if err = prset.Merge(Gitea, git); err != nil {
|
||||||
common.LogError("merge error:", err)
|
common.LogError("merge error:", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user