autogits/workflow-pr/reviews.go

77 lines
1.4 KiB
Go
Raw Normal View History

2025-01-03 00:46:40 +01:00
package main
import (
2025-02-17 17:49:02 +01:00
"slices"
2025-01-03 00:46:40 +01:00
"src.opensuse.org/autogits/common"
"src.opensuse.org/autogits/common/gitea-generated/models"
)
type PRReviews struct {
reviews []*models.PullReview
reviewers []string
}
2025-01-11 21:37:59 +01:00
func FetchGiteaReviews(rf common.GiteaReviewFetcher, reviewers []string, org, repo string, no int64) (*PRReviews, error) {
2025-01-03 00:46:40 +01:00
reviews, err := rf.GetPullRequestReviews(org, repo, no)
if err != nil {
return nil, err
}
return &PRReviews{
reviews: reviews,
reviewers: reviewers,
}, nil
}
func (r *PRReviews) IsReviewed() bool {
goodReview := false
for _, reviewer := range r.reviewers {
goodReview = false
for _, review := range r.reviews {
if review.User.UserName == reviewer && review.State == common.ReviewStateApproved && !review.Stale {
goodReview = true
break
}
}
if !goodReview {
break
}
}
return goodReview
}
2025-02-17 17:49:02 +01:00
func (r *PRReviews) HasStaleReviewsOnly(reviewer string) bool {
if !slices.Contains(r.reviewers, reviewer) {
return false
}
hasStale := true
hasReviews := false
for _, r := range r.reviews {
if r.User.UserName == reviewer {
hasStale = hasStale && r.Stale
}
}
return false
}
func (r *PRReviews) IsReviewedBy(reviewer string) bool {
if !slices.Contains(r.reviewers, reviewer) {
return false
}
for _, r := range r.reviews {
if r.User.UserName == reviewer && !r.Stale {
return r.State == common.ReviewStateApproved
}
}
return false
}