Skip to content

Commit 8a32731

Browse files
authored
feat: Add required_reviewers support to PullRequestRuleParameters (#3806) (#3811)
1 parent d47559a commit 8a32731

File tree

4 files changed

+128
-7
lines changed

4 files changed

+128
-7
lines changed

github/github-accessors.go

Lines changed: 32 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

github/github-accessors_test.go

Lines changed: 38 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

github/rules.go

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,14 @@ const (
130130
MergeQueueMergeMethodSquash MergeQueueMergeMethod = "SQUASH"
131131
)
132132

133+
// RulesetReviewerType represents the type of reviewer in a ruleset required reviewer.
134+
type RulesetReviewerType string
135+
136+
// This is the set of GitHub ruleset reviewer types.
137+
const (
138+
RulesetReviewerTypeTeam RulesetReviewerType = "Team"
139+
)
140+
133141
// PatternRuleOperator models a GitHub pattern rule operator.
134142
type PatternRuleOperator string
135143

@@ -416,13 +424,27 @@ type RequiredDeploymentsRuleParameters struct {
416424

417425
// PullRequestRuleParameters represents the pull_request rule parameters.
418426
type PullRequestRuleParameters struct {
419-
AllowedMergeMethods []PullRequestMergeMethod `json:"allowed_merge_methods"`
420-
AutomaticCopilotCodeReviewEnabled *bool `json:"automatic_copilot_code_review_enabled,omitempty"`
421-
DismissStaleReviewsOnPush bool `json:"dismiss_stale_reviews_on_push"`
422-
RequireCodeOwnerReview bool `json:"require_code_owner_review"`
423-
RequireLastPushApproval bool `json:"require_last_push_approval"`
424-
RequiredApprovingReviewCount int `json:"required_approving_review_count"`
425-
RequiredReviewThreadResolution bool `json:"required_review_thread_resolution"`
427+
AllowedMergeMethods []PullRequestMergeMethod `json:"allowed_merge_methods"`
428+
AutomaticCopilotCodeReviewEnabled *bool `json:"automatic_copilot_code_review_enabled,omitempty"`
429+
DismissStaleReviewsOnPush bool `json:"dismiss_stale_reviews_on_push"`
430+
RequireCodeOwnerReview bool `json:"require_code_owner_review"`
431+
RequireLastPushApproval bool `json:"require_last_push_approval"`
432+
RequiredApprovingReviewCount int `json:"required_approving_review_count"`
433+
RequiredReviewers []*RulesetRequiredReviewer `json:"required_reviewers,omitempty"`
434+
RequiredReviewThreadResolution bool `json:"required_review_thread_resolution"`
435+
}
436+
437+
// RulesetRequiredReviewer represents required reviewer parameters for pull requests in rulesets.
438+
type RulesetRequiredReviewer struct {
439+
MinimumApprovals *int `json:"minimum_approvals,omitempty"`
440+
FilePatterns []string `json:"file_patterns,omitempty"`
441+
Reviewer *RulesetReviewer `json:"reviewer,omitempty"`
442+
}
443+
444+
// RulesetReviewer represents a reviewer in a ruleset required reviewer rule.
445+
type RulesetReviewer struct {
446+
ID *int64 `json:"id,omitempty"`
447+
Type *RulesetReviewerType `json:"type,omitempty"`
426448
}
427449

428450
// RequiredStatusChecksRuleParameters represents the required status checks rule parameters.

github/rules_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -736,6 +736,35 @@ func TestRepositoryRule(t *testing.T) {
736736
},
737737
`{"type":"pull_request","parameters":{"allowed_merge_methods":["squash","rebase"],"automatic_copilot_code_review_enabled": true,"dismiss_stale_reviews_on_push":true,"require_code_owner_review":true,"require_last_push_approval":true,"required_approving_review_count":2,"required_review_thread_resolution":true}}`,
738738
},
739+
{
740+
"pull_request_with_required_reviewers",
741+
&RepositoryRule{
742+
Type: RulesetRuleTypePullRequest,
743+
Parameters: &PullRequestRuleParameters{
744+
AllowedMergeMethods: []PullRequestMergeMethod{
745+
PullRequestMergeMethodMerge,
746+
PullRequestMergeMethodSquash,
747+
PullRequestMergeMethodRebase,
748+
},
749+
DismissStaleReviewsOnPush: false,
750+
RequireCodeOwnerReview: false,
751+
RequireLastPushApproval: false,
752+
RequiredApprovingReviewCount: 0,
753+
RequiredReviewThreadResolution: false,
754+
RequiredReviewers: []*RulesetRequiredReviewer{
755+
{
756+
MinimumApprovals: Ptr(1),
757+
FilePatterns: []string{"*"},
758+
Reviewer: &RulesetReviewer{
759+
ID: Ptr(int64(123456)),
760+
Type: Ptr(RulesetReviewerTypeTeam),
761+
},
762+
},
763+
},
764+
},
765+
},
766+
`{"type":"pull_request","parameters":{"allowed_merge_methods":["merge","squash","rebase"],"dismiss_stale_reviews_on_push":false,"require_code_owner_review":false,"require_last_push_approval":false,"required_approving_review_count":0,"required_reviewers":[{"minimum_approvals":1,"file_patterns":["*"],"reviewer":{"id":123456,"type":"Team"}}],"required_review_thread_resolution":false}}`,
767+
},
739768
{
740769
"required_status_checks",
741770
&RepositoryRule{

0 commit comments

Comments
 (0)