Compare commits
1 Commits
ci_cat_log
...
pr-review-
| Author | SHA256 | Date | |
|---|---|---|---|
|
|
a335d04031 |
@@ -18,15 +18,6 @@ jobs:
|
||||
run: whoami
|
||||
- name: pwd
|
||||
run: pwd
|
||||
- name: free disk space if needed
|
||||
run: |
|
||||
df -h
|
||||
df -H . | tail -n 1 | awk '{ print $5 }' | grep -oE '[0-9]+'
|
||||
test 85 -lt "$(df -H . | tail -n 1 | awk '{ print $5 }' | grep -oE '[0-9]+')" || echo too low space will attempt to clean
|
||||
test 85 -lt "$(df -H . | tail -n 1 | awk '{ print $5 }' | grep -oE '[0-9]+')" || bash -xc 'go clean cache'
|
||||
test 85 -lt "$(df -H . | tail -n 1 | awk '{ print $5 }' | grep -oE '[0-9]+')" || bash -xc 'podman rmi -a -f'
|
||||
df -h
|
||||
df -H . | tail -n 1 | awk '{ print $5 }' | grep -oE '[0-9]+'
|
||||
- name: vars
|
||||
run: |
|
||||
set | grep GITEA_
|
||||
@@ -54,26 +45,6 @@ jobs:
|
||||
- name: Run tests
|
||||
run: py.test-3.11 -v tests
|
||||
working-directory: ./autogits/integration
|
||||
- name: podman ps
|
||||
if: failure()
|
||||
run: podman ps
|
||||
- name: workflow pr log
|
||||
if: failure()
|
||||
run: |
|
||||
echo $(podman-compose logs workflow-pr | wc -l)
|
||||
working-directory: ./autogits/integration
|
||||
- name: workflow pr log
|
||||
if: failure()
|
||||
run: |
|
||||
echo "here are the logs:"
|
||||
podman-compose logs workflow-pr
|
||||
working-directory: ./autogits/integration
|
||||
- name: gitea log
|
||||
if: failure()
|
||||
run: podman logs gitea-test
|
||||
- name: gitea publisher log
|
||||
if: failure()
|
||||
run: podman logs gitea-publisher
|
||||
- name: Make sure the pod is down
|
||||
if: always()
|
||||
run: make down
|
||||
|
||||
@@ -168,12 +168,32 @@ func (data *MaintainershipMap) IsApproved(pkg string, reviews []*models.PullRevi
|
||||
return true
|
||||
}
|
||||
|
||||
for _, review := range reviews {
|
||||
if !review.Stale && review.State == ReviewStateApproved && slices.Contains(reviewers, review.User.UserName) {
|
||||
LogDebug("Reviewed by", review.User.UserName)
|
||||
return true
|
||||
if !data.Config.ReviewRequired {
|
||||
for _, review := range reviews {
|
||||
if !review.Stale && review.State == ReviewStateApproved && slices.Contains(reviewers, review.User.UserName) {
|
||||
LogDebug("Reviewed by", review.User.UserName)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// all maintainers except submitter must approve
|
||||
for _, m := range reviewers {
|
||||
if m == submitter {
|
||||
continue
|
||||
}
|
||||
approved := false
|
||||
for _, review := range reviews {
|
||||
if !review.Stale && review.State == ReviewStateApproved && review.User.UserName == m {
|
||||
approved = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !approved {
|
||||
LogDebug("Missing approval from maintainer:", m)
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -328,7 +328,7 @@ func (rs *PRSet) FindMissingAndExtraReviewers(maintainers MaintainershipData, id
|
||||
if len(rs.PRs) > 1 {
|
||||
noReviewPRCreators = append(noReviewPRCreators, rs.BotUser)
|
||||
}
|
||||
if slices.Contains(noReviewPRCreators, pr.PR.User.UserName) || pr.Reviews.IsReviewedByOneOf(prjMaintainers...) {
|
||||
if slices.Contains(noReviewPRCreators, pr.PR.User.UserName) || pr.Reviews.IsRejectedByOneOf(prjMaintainers...) || (pr.Reviews.IsReviewedByOneOf(prjMaintainers...) && !rs.Config.ReviewRequired) {
|
||||
LogDebug("Project already reviewed by a project maintainer, remove rest")
|
||||
// do not remove reviewers if they are also maintainers
|
||||
prjMaintainers = slices.DeleteFunc(prjMaintainers, func(m string) bool { return slices.Contains(missing, m) })
|
||||
@@ -355,8 +355,8 @@ func (rs *PRSet) FindMissingAndExtraReviewers(maintainers MaintainershipData, id
|
||||
LogDebug("packakge maintainers:", Maintainers)
|
||||
|
||||
missing = slices.Concat(configReviewers.Pkg, configReviewers.PkgOptional)
|
||||
if slices.Contains(noReviewPkgPRCreators, pr.PR.User.UserName) || pr.Reviews.IsReviewedByOneOf(Maintainers...) {
|
||||
// submitter is maintainer or already reviewed
|
||||
if slices.Contains(noReviewPkgPRCreators, pr.PR.User.UserName) || pr.Reviews.IsRejectedByOneOf(Maintainers...) || (pr.Reviews.IsReviewedByOneOf(Maintainers...) && !rs.Config.ReviewRequired) {
|
||||
// submitter is maintainer or already reviewed/rejected
|
||||
LogDebug("Package reviewed by maintainer (or subitter is maintainer), remove the rest of them")
|
||||
// do not remove reviewers if they are also maintainers
|
||||
Maintainers = slices.DeleteFunc(Maintainers, func(m string) bool { return slices.Contains(missing, m) })
|
||||
|
||||
@@ -16,6 +16,8 @@ type ReviewInterface interface {
|
||||
HasPendingReviewBy(reviewer string) bool
|
||||
IsReviewedBy(reviewer string) bool
|
||||
IsReviewedByOneOf(reviewers ...string) bool
|
||||
IsRejectedBy(reviewer string) bool
|
||||
IsRejectedByOneOf(reviewers ...string) bool
|
||||
|
||||
SetRequiredReviewers(reviewers []string)
|
||||
}
|
||||
@@ -230,7 +232,7 @@ func (r *PRReviews) IsReviewedBy(reviewer string) bool {
|
||||
for _, r := range r.Reviews {
|
||||
if r.User.UserName == reviewer && !r.Stale {
|
||||
switch r.State {
|
||||
case ReviewStateApproved, ReviewStateRequestChanges:
|
||||
case ReviewStateApproved:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
@@ -244,6 +246,37 @@ func (r *PRReviews) IsReviewedBy(reviewer string) bool {
|
||||
func (r *PRReviews) IsReviewedByOneOf(reviewers ...string) bool {
|
||||
for _, reviewer := range reviewers {
|
||||
if r.IsReviewedBy(reviewer) {
|
||||
LogDebug(" -- IsReviewedByOneOf: matched ", reviewer)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (r *PRReviews) IsRejectedBy(reviewer string) bool {
|
||||
if r == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
for _, r := range r.Reviews {
|
||||
if r.User.UserName == reviewer && !r.Stale {
|
||||
switch r.State {
|
||||
case ReviewStateRequestChanges:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (r *PRReviews) IsRejectedByOneOf(reviewers ...string) bool {
|
||||
for _, reviewer := range reviewers {
|
||||
if r.IsRejectedBy(reviewer) {
|
||||
LogDebug(" -- IsRejectedByOneOf: matched ", reviewer)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,6 +155,7 @@ index 0000000..e69de29
|
||||
|
||||
|
||||
@pytest.mark.t005
|
||||
# @pytest.mark.xfail(reason="TBD troubleshoot")
|
||||
def test_005_any_maintainer_approval_sufficient(maintainer_env, ownerA_client, ownerBB_client):
|
||||
"""
|
||||
Test scenario:
|
||||
|
||||
Reference in New Issue
Block a user