diff --git a/github/enterprise_rules_test.go b/github/enterprise_rules_test.go index 900934df504..0fcfa0138ff 100644 --- a/github/enterprise_rules_test.go +++ b/github/enterprise_rules_test.go @@ -93,6 +93,7 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgNameRepoName(t *testing.T) "allowed_merge_methods": ["rebase","squash"], "dismiss_stale_reviews_on_push": true, "require_code_owner_review": true, + "require_extra_approval_for_unattributed_changes": true, "require_last_push_approval": true, "required_approving_review_count": 1, "required_review_thread_resolution": true @@ -211,12 +212,13 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgNameRepoName(t *testing.T) }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 1, - RequiredReviewThreadResolution: true, + AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 1, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), @@ -312,12 +314,13 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgNameRepoName(t *testing.T) }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 1, - RequiredReviewThreadResolution: true, + AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 1, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), @@ -517,6 +520,7 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgNameRepoProperty(t *testin "allowed_merge_methods": ["rebase","squash"], "dismiss_stale_reviews_on_push": true, "require_code_owner_review": true, + "require_extra_approval_for_unattributed_changes": true, "require_last_push_approval": true, "required_approving_review_count": 1, "required_review_thread_resolution": true @@ -645,12 +649,13 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgNameRepoProperty(t *testin }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 1, - RequiredReviewThreadResolution: true, + AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 1, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), @@ -756,12 +761,13 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgNameRepoProperty(t *testin }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 1, - RequiredReviewThreadResolution: true, + AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 1, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), @@ -902,6 +908,7 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgIdRepoName(t *testing.T) { "allowed_merge_methods": ["rebase","squash"], "dismiss_stale_reviews_on_push": true, "require_code_owner_review": true, + "require_extra_approval_for_unattributed_changes": true, "require_last_push_approval": true, "required_approving_review_count": 1, "required_review_thread_resolution": true @@ -1019,12 +1026,13 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgIdRepoName(t *testing.T) { }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 1, - RequiredReviewThreadResolution: true, + AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 1, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), @@ -1119,12 +1127,13 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgIdRepoName(t *testing.T) { }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 1, - RequiredReviewThreadResolution: true, + AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 1, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), @@ -1274,6 +1283,7 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgIdRepoProperty(t *testing. "allowed_merge_methods": ["rebase","squash"], "dismiss_stale_reviews_on_push": true, "require_code_owner_review": true, + "require_extra_approval_for_unattributed_changes": true, "require_last_push_approval": true, "required_approving_review_count": 1, "required_review_thread_resolution": true @@ -1401,12 +1411,13 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgIdRepoProperty(t *testing. }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 1, - RequiredReviewThreadResolution: true, + AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 1, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), @@ -1511,12 +1522,13 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgIdRepoProperty(t *testing. }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 1, - RequiredReviewThreadResolution: true, + AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 1, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), diff --git a/github/github-accessors.go b/github/github-accessors.go index ea0beb7c50d..fccea400f8c 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -34790,6 +34790,14 @@ func (p *PullRequestRuleParameters) GetRequiredReviewThreadResolution() bool { return p.RequiredReviewThreadResolution } +// GetRequireExtraApprovalForUnattributedChanges returns the RequireExtraApprovalForUnattributedChanges field. +func (p *PullRequestRuleParameters) GetRequireExtraApprovalForUnattributedChanges() bool { + if p == nil { + return false + } + return p.RequireExtraApprovalForUnattributedChanges +} + // GetRequireLastPushApproval returns the RequireLastPushApproval field. func (p *PullRequestRuleParameters) GetRequireLastPushApproval() bool { if p == nil { diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go index 2ba2665d8ed..2d535f864a0 100644 --- a/github/github-accessors_test.go +++ b/github/github-accessors_test.go @@ -43491,6 +43491,14 @@ func TestPullRequestRuleParameters_GetRequiredReviewThreadResolution(tt *testing p.GetRequiredReviewThreadResolution() } +func TestPullRequestRuleParameters_GetRequireExtraApprovalForUnattributedChanges(tt *testing.T) { + tt.Parallel() + p := &PullRequestRuleParameters{} + p.GetRequireExtraApprovalForUnattributedChanges() + p = nil + p.GetRequireExtraApprovalForUnattributedChanges() +} + func TestPullRequestRuleParameters_GetRequireLastPushApproval(tt *testing.T) { tt.Parallel() p := &PullRequestRuleParameters{} diff --git a/github/orgs_rules_test.go b/github/orgs_rules_test.go index 4b9c601b002..84ff51140ed 100644 --- a/github/orgs_rules_test.go +++ b/github/orgs_rules_test.go @@ -188,6 +188,7 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoNames(t *testing.T) { "allowed_merge_methods": ["rebase","squash"], "dismiss_stale_reviews_on_push": true, "require_code_owner_review": true, + "require_extra_approval_for_unattributed_changes": true, "require_last_push_approval": true, "required_approving_review_count": 1, "required_review_thread_resolution": true @@ -307,12 +308,13 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoNames(t *testing.T) { }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 1, - RequiredReviewThreadResolution: true, + AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 1, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), @@ -409,12 +411,13 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoNames(t *testing.T) { }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 1, - RequiredReviewThreadResolution: true, + AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 1, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), @@ -552,6 +555,7 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoProperty(t *testing.T) "allowed_merge_methods": ["rebase","squash"], "dismiss_stale_reviews_on_push": true, "require_code_owner_review": true, + "require_extra_approval_for_unattributed_changes": true, "require_last_push_approval": true, "required_approving_review_count": 1, "required_review_thread_resolution": true @@ -672,12 +676,13 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoProperty(t *testing.T) }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 1, - RequiredReviewThreadResolution: true, + AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 1, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), @@ -775,12 +780,13 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoProperty(t *testing.T) }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 1, - RequiredReviewThreadResolution: true, + AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 1, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), @@ -911,6 +917,7 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoIDs(t *testing.T) { "allowed_merge_methods": ["rebase","squash"], "dismiss_stale_reviews_on_push": true, "require_code_owner_review": true, + "require_extra_approval_for_unattributed_changes": true, "require_last_push_approval": true, "required_approving_review_count": 1, "required_review_thread_resolution": true @@ -1023,12 +1030,13 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoIDs(t *testing.T) { }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 1, - RequiredReviewThreadResolution: true, + AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 1, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), @@ -1118,12 +1126,13 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoIDs(t *testing.T) { }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 1, - RequiredReviewThreadResolution: true, + AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash}, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 1, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), diff --git a/github/rules.go b/github/rules.go index 8f858b3a8dd..2a227e524a4 100644 --- a/github/rules.go +++ b/github/rules.go @@ -478,14 +478,15 @@ type RequiredDeploymentsRuleParameters struct { // PullRequestRuleParameters represents the pull_request rule parameters. type PullRequestRuleParameters struct { - AllowedMergeMethods []PullRequestMergeMethod `json:"allowed_merge_methods,omitempty"` - DismissalRestriction *DismissalRestriction `json:"dismissal_restriction,omitempty"` - DismissStaleReviewsOnPush bool `json:"dismiss_stale_reviews_on_push"` - RequireCodeOwnerReview bool `json:"require_code_owner_review"` - RequireLastPushApproval bool `json:"require_last_push_approval"` - RequiredApprovingReviewCount int `json:"required_approving_review_count"` - RequiredReviewers []*RulesetRequiredReviewer `json:"required_reviewers,omitempty"` - RequiredReviewThreadResolution bool `json:"required_review_thread_resolution"` + AllowedMergeMethods []PullRequestMergeMethod `json:"allowed_merge_methods,omitempty"` + DismissalRestriction *DismissalRestriction `json:"dismissal_restriction,omitempty"` + DismissStaleReviewsOnPush bool `json:"dismiss_stale_reviews_on_push"` + RequireCodeOwnerReview bool `json:"require_code_owner_review"` + RequireExtraApprovalForUnattributedChanges bool `json:"require_extra_approval_for_unattributed_changes"` + RequireLastPushApproval bool `json:"require_last_push_approval"` + RequiredApprovingReviewCount int `json:"required_approving_review_count"` + RequiredReviewers []*RulesetRequiredReviewer `json:"required_reviewers,omitempty"` + RequiredReviewThreadResolution bool `json:"required_review_thread_resolution"` } // DismissalRestriction represents the people, teams, or apps allowed to dismiss pull request reviews. diff --git a/github/rules_test.go b/github/rules_test.go index ea3e64217d4..d91269db8f5 100644 --- a/github/rules_test.go +++ b/github/rules_test.go @@ -143,11 +143,12 @@ func TestRepositoryRulesetRules(t *testing.T) { }, RequiredSignatures: &EmptyRuleParameters{}, PullRequest: &PullRequestRuleParameters{ - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 2, - RequiredReviewThreadResolution: true, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 2, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ RequiredStatusChecks: []*RuleStatusCheck{ @@ -215,7 +216,7 @@ func TestRepositoryRulesetRules(t *testing.T) { RepositoryTransfer: &EmptyRuleParameters{}, RepositoryVisibility: &RepositoryVisibilityRuleParameters{Internal: false, Private: false, Public: false}, }, - `[{"type":"creation"},{"type":"update"},{"type":"deletion"},{"type":"required_linear_history"},{"type":"merge_queue","parameters":{"check_response_timeout_minutes":5,"grouping_strategy":"ALLGREEN","max_entries_to_build":10,"max_entries_to_merge":20,"merge_method":"SQUASH","min_entries_to_merge":1,"min_entries_to_merge_wait_minutes":15}},{"type":"required_deployments","parameters":{"required_deployment_environments":["test1","test2"]}},{"type":"required_signatures"},{"type":"pull_request","parameters":{"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}},{"type":"required_status_checks","parameters":{"required_status_checks":[{"context":"test1"},{"context":"test2"}],"strict_required_status_checks_policy":true}},{"type":"non_fast_forward"},{"type":"commit_message_pattern","parameters":{"operator":"starts_with","pattern":"test"}},{"type":"commit_author_email_pattern","parameters":{"operator":"starts_with","pattern":"test"}},{"type":"committer_email_pattern","parameters":{"operator":"starts_with","pattern":"test"}},{"type":"branch_name_pattern","parameters":{"operator":"starts_with","pattern":"test"}},{"type":"tag_name_pattern","parameters":{"operator":"starts_with","pattern":"test"}},{"type":"file_path_restriction","parameters":{"restricted_file_paths":["test1","test2"]}},{"type":"max_file_path_length","parameters":{"max_file_path_length":512}},{"type":"file_extension_restriction","parameters":{"restricted_file_extensions":[".exe",".pkg"]}},{"type":"max_file_size","parameters":{"max_file_size":1024}},{"type":"workflows","parameters":{"workflows":[{"path":".github/workflows/test1.yaml"},{"path":".github/workflows/test2.yaml"}]}},{"type":"code_scanning","parameters":{"code_scanning_tools":[{"alerts_threshold":"all","security_alerts_threshold":"all","tool":"test"},{"alerts_threshold":"none","security_alerts_threshold":"none","tool":"test"}]}},{"type":"copilot_code_review","parameters":{"review_on_push":true,"review_draft_pull_requests":false}},{"type":"repository_create"},{"type":"repository_delete"},{"type":"repository_name","parameters":{"negate":false,"pattern":"^test-.+"}},{"type":"repository_transfer"},{"type":"repository_visibility","parameters":{"internal":false,"private":false,"public":false}}]`, + `[{"type":"creation"},{"type":"update"},{"type":"deletion"},{"type":"required_linear_history"},{"type":"merge_queue","parameters":{"check_response_timeout_minutes":5,"grouping_strategy":"ALLGREEN","max_entries_to_build":10,"max_entries_to_merge":20,"merge_method":"SQUASH","min_entries_to_merge":1,"min_entries_to_merge_wait_minutes":15}},{"type":"required_deployments","parameters":{"required_deployment_environments":["test1","test2"]}},{"type":"required_signatures"},{"type":"pull_request","parameters":{"dismiss_stale_reviews_on_push":true,"require_code_owner_review":true,"require_extra_approval_for_unattributed_changes":true,"require_last_push_approval":true,"required_approving_review_count":2,"required_review_thread_resolution":true}},{"type":"required_status_checks","parameters":{"required_status_checks":[{"context":"test1"},{"context":"test2"}],"strict_required_status_checks_policy":true}},{"type":"non_fast_forward"},{"type":"commit_message_pattern","parameters":{"operator":"starts_with","pattern":"test"}},{"type":"commit_author_email_pattern","parameters":{"operator":"starts_with","pattern":"test"}},{"type":"committer_email_pattern","parameters":{"operator":"starts_with","pattern":"test"}},{"type":"branch_name_pattern","parameters":{"operator":"starts_with","pattern":"test"}},{"type":"tag_name_pattern","parameters":{"operator":"starts_with","pattern":"test"}},{"type":"file_path_restriction","parameters":{"restricted_file_paths":["test1","test2"]}},{"type":"max_file_path_length","parameters":{"max_file_path_length":512}},{"type":"file_extension_restriction","parameters":{"restricted_file_extensions":[".exe",".pkg"]}},{"type":"max_file_size","parameters":{"max_file_size":1024}},{"type":"workflows","parameters":{"workflows":[{"path":".github/workflows/test1.yaml"},{"path":".github/workflows/test2.yaml"}]}},{"type":"code_scanning","parameters":{"code_scanning_tools":[{"alerts_threshold":"all","security_alerts_threshold":"all","tool":"test"},{"alerts_threshold":"none","security_alerts_threshold":"none","tool":"test"}]}},{"type":"copilot_code_review","parameters":{"review_on_push":true,"review_draft_pull_requests":false}},{"type":"repository_create"},{"type":"repository_delete"},{"type":"repository_name","parameters":{"negate":false,"pattern":"^test-.+"}},{"type":"repository_transfer"},{"type":"repository_visibility","parameters":{"internal":false,"private":false,"public":false}}]`, }, { "all_rules_with_all_params", @@ -242,11 +243,12 @@ func TestRepositoryRulesetRules(t *testing.T) { PullRequestMergeMethodSquash, PullRequestMergeMethodRebase, }, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 2, - RequiredReviewThreadResolution: true, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 2, + RequiredReviewThreadResolution: true, }, RequiredStatusChecks: &RequiredStatusChecksRuleParameters{ DoNotEnforceOnCreate: new(true), @@ -336,7 +338,7 @@ func TestRepositoryRulesetRules(t *testing.T) { RepositoryTransfer: &EmptyRuleParameters{}, RepositoryVisibility: &RepositoryVisibilityRuleParameters{Internal: false, Private: false, Public: false}, }, - `[{"type":"creation"},{"type":"update","parameters":{"update_allows_fetch_and_merge":true}},{"type":"deletion"},{"type":"required_linear_history"},{"type":"merge_queue","parameters":{"check_response_timeout_minutes":5,"grouping_strategy":"ALLGREEN","max_entries_to_build":10,"max_entries_to_merge":20,"merge_method":"SQUASH","min_entries_to_merge":1,"min_entries_to_merge_wait_minutes":15}},{"type":"required_deployments","parameters":{"required_deployment_environments":["test1","test2"]}},{"type":"required_signatures"},{"type":"pull_request","parameters":{"allowed_merge_methods":["squash","rebase"],"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}},{"type":"required_status_checks","parameters":{"do_not_enforce_on_create":true,"required_status_checks":[{"context":"test1","integration_id":1},{"context":"test2","integration_id":2}],"strict_required_status_checks_policy":true}},{"type":"non_fast_forward"},{"type":"commit_message_pattern","parameters":{"name":"cmp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"commit_author_email_pattern","parameters":{"name":"caep","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"committer_email_pattern","parameters":{"name":"cep","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"branch_name_pattern","parameters":{"name":"bp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"tag_name_pattern","parameters":{"name":"tp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"file_path_restriction","parameters":{"restricted_file_paths":["test1","test2"]}},{"type":"max_file_path_length","parameters":{"max_file_path_length":512}},{"type":"file_extension_restriction","parameters":{"restricted_file_extensions":[".exe",".pkg"]}},{"type":"max_file_size","parameters":{"max_file_size":1024}},{"type":"workflows","parameters":{"do_not_enforce_on_create":true,"workflows":[{"path":".github/workflows/test1.yaml","ref":"main","repository_id":1,"sha":"aaaa"},{"path":".github/workflows/test2.yaml","ref":"main","repository_id":2,"sha":"bbbb"}]}},{"type":"code_scanning","parameters":{"code_scanning_tools":[{"alerts_threshold":"all","security_alerts_threshold":"all","tool":"test"},{"alerts_threshold":"none","security_alerts_threshold":"none","tool":"test"}]}},{"type":"copilot_code_review","parameters":{"review_on_push":true,"review_draft_pull_requests":false}},{"type":"repository_create"},{"type":"repository_delete"},{"type":"repository_name","parameters":{"negate":false,"pattern":"^test-.+"}},{"type":"repository_transfer"},{"type":"repository_visibility","parameters":{"internal":false,"private":false,"public":false}}]`, + `[{"type":"creation"},{"type":"update","parameters":{"update_allows_fetch_and_merge":true}},{"type":"deletion"},{"type":"required_linear_history"},{"type":"merge_queue","parameters":{"check_response_timeout_minutes":5,"grouping_strategy":"ALLGREEN","max_entries_to_build":10,"max_entries_to_merge":20,"merge_method":"SQUASH","min_entries_to_merge":1,"min_entries_to_merge_wait_minutes":15}},{"type":"required_deployments","parameters":{"required_deployment_environments":["test1","test2"]}},{"type":"required_signatures"},{"type":"pull_request","parameters":{"allowed_merge_methods":["squash","rebase"],"dismiss_stale_reviews_on_push":true,"require_code_owner_review":true,"require_extra_approval_for_unattributed_changes":true,"require_last_push_approval":true,"required_approving_review_count":2,"required_review_thread_resolution":true}},{"type":"required_status_checks","parameters":{"do_not_enforce_on_create":true,"required_status_checks":[{"context":"test1","integration_id":1},{"context":"test2","integration_id":2}],"strict_required_status_checks_policy":true}},{"type":"non_fast_forward"},{"type":"commit_message_pattern","parameters":{"name":"cmp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"commit_author_email_pattern","parameters":{"name":"caep","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"committer_email_pattern","parameters":{"name":"cep","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"branch_name_pattern","parameters":{"name":"bp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"tag_name_pattern","parameters":{"name":"tp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"file_path_restriction","parameters":{"restricted_file_paths":["test1","test2"]}},{"type":"max_file_path_length","parameters":{"max_file_path_length":512}},{"type":"file_extension_restriction","parameters":{"restricted_file_extensions":[".exe",".pkg"]}},{"type":"max_file_size","parameters":{"max_file_size":1024}},{"type":"workflows","parameters":{"do_not_enforce_on_create":true,"workflows":[{"path":".github/workflows/test1.yaml","ref":"main","repository_id":1,"sha":"aaaa"},{"path":".github/workflows/test2.yaml","ref":"main","repository_id":2,"sha":"bbbb"}]}},{"type":"code_scanning","parameters":{"code_scanning_tools":[{"alerts_threshold":"all","security_alerts_threshold":"all","tool":"test"},{"alerts_threshold":"none","security_alerts_threshold":"none","tool":"test"}]}},{"type":"copilot_code_review","parameters":{"review_on_push":true,"review_draft_pull_requests":false}},{"type":"repository_create"},{"type":"repository_delete"},{"type":"repository_name","parameters":{"negate":false,"pattern":"^test-.+"}},{"type":"repository_transfer"},{"type":"repository_visibility","parameters":{"internal":false,"private":false,"public":false}}]`, }, } @@ -532,11 +534,12 @@ func TestBranchRules(t *testing.T) { PullRequestMergeMethodSquash, PullRequestMergeMethodRebase, }, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 2, - RequiredReviewThreadResolution: true, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 2, + RequiredReviewThreadResolution: true, }, }, }, @@ -746,7 +749,7 @@ func TestBranchRules(t *testing.T) { }, }, }, - `[{"type":"creation","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1},{"type":"update","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"update_allows_fetch_and_merge":true}},{"type":"deletion","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1},{"type":"required_linear_history","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1},{"type":"merge_queue","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"check_response_timeout_minutes":5,"grouping_strategy":"ALLGREEN","max_entries_to_build":10,"max_entries_to_merge":20,"merge_method":"SQUASH","min_entries_to_merge":1,"min_entries_to_merge_wait_minutes":15}},{"type":"required_deployments","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"required_deployment_environments":["test1","test2"]}},{"type":"required_signatures","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1},{"type":"pull_request","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"allowed_merge_methods":["squash","rebase"],"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}},{"type":"required_status_checks","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"do_not_enforce_on_create":true,"required_status_checks":[{"context":"test1","integration_id":1},{"context":"test2","integration_id":2}],"strict_required_status_checks_policy":true}},{"type":"non_fast_forward","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1},{"type":"commit_message_pattern","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"name":"cmp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"commit_author_email_pattern","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"name":"caep","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"committer_email_pattern","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"name":"cep","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"branch_name_pattern","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"name":"bp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"tag_name_pattern","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"name":"tp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"file_path_restriction","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"restricted_file_paths":["test1","test2"]}},{"type":"max_file_path_length","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"max_file_path_length":512}},{"type":"file_extension_restriction","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"restricted_file_extensions":[".exe",".pkg"]}},{"type":"max_file_size","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"max_file_size":1024}},{"type":"workflows","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"do_not_enforce_on_create":true,"workflows":[{"path":".github/workflows/test1.yaml","ref":"main","repository_id":1,"sha":"aaaa"},{"path":".github/workflows/test2.yaml","ref":"main","repository_id":2,"sha":"bbbb"}]}},{"type":"code_scanning","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"code_scanning_tools":[{"alerts_threshold":"all","security_alerts_threshold":"all","tool":"test"},{"alerts_threshold":"none","security_alerts_threshold":"none","tool":"test"}]}},{"type":"copilot_code_review","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"review_on_push":true,"review_draft_pull_requests":false}}]`, + `[{"type":"creation","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1},{"type":"update","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"update_allows_fetch_and_merge":true}},{"type":"deletion","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1},{"type":"required_linear_history","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1},{"type":"merge_queue","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"check_response_timeout_minutes":5,"grouping_strategy":"ALLGREEN","max_entries_to_build":10,"max_entries_to_merge":20,"merge_method":"SQUASH","min_entries_to_merge":1,"min_entries_to_merge_wait_minutes":15}},{"type":"required_deployments","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"required_deployment_environments":["test1","test2"]}},{"type":"required_signatures","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1},{"type":"pull_request","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"allowed_merge_methods":["squash","rebase"],"dismiss_stale_reviews_on_push":true,"require_code_owner_review":true,"require_extra_approval_for_unattributed_changes":true,"require_last_push_approval":true,"required_approving_review_count":2,"required_review_thread_resolution":true}},{"type":"required_status_checks","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"do_not_enforce_on_create":true,"required_status_checks":[{"context":"test1","integration_id":1},{"context":"test2","integration_id":2}],"strict_required_status_checks_policy":true}},{"type":"non_fast_forward","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1},{"type":"commit_message_pattern","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"name":"cmp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"commit_author_email_pattern","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"name":"caep","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"committer_email_pattern","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"name":"cep","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"branch_name_pattern","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"name":"bp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"tag_name_pattern","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"name":"tp","negate":false,"operator":"starts_with","pattern":"test"}},{"type":"file_path_restriction","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"restricted_file_paths":["test1","test2"]}},{"type":"max_file_path_length","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"max_file_path_length":512}},{"type":"file_extension_restriction","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"restricted_file_extensions":[".exe",".pkg"]}},{"type":"max_file_size","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"max_file_size":1024}},{"type":"workflows","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"do_not_enforce_on_create":true,"workflows":[{"path":".github/workflows/test1.yaml","ref":"main","repository_id":1,"sha":"aaaa"},{"path":".github/workflows/test2.yaml","ref":"main","repository_id":2,"sha":"bbbb"}]}},{"type":"code_scanning","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"code_scanning_tools":[{"alerts_threshold":"all","security_alerts_threshold":"all","tool":"test"},{"alerts_threshold":"none","security_alerts_threshold":"none","tool":"test"}]}},{"type":"copilot_code_review","ruleset_source_type":"Repository","ruleset_source":"test/test","ruleset_id":1,"parameters":{"review_on_push":true,"review_draft_pull_requests":false}}]`, }, } @@ -886,14 +889,15 @@ func TestRepositoryRule(t *testing.T) { PullRequestMergeMethodSquash, PullRequestMergeMethodRebase, }, - DismissStaleReviewsOnPush: true, - RequireCodeOwnerReview: true, - RequireLastPushApproval: true, - RequiredApprovingReviewCount: 2, - RequiredReviewThreadResolution: true, + DismissStaleReviewsOnPush: true, + RequireCodeOwnerReview: true, + RequireExtraApprovalForUnattributedChanges: true, + RequireLastPushApproval: true, + RequiredApprovingReviewCount: 2, + RequiredReviewThreadResolution: true, }, }, - `{"type":"pull_request","parameters":{"allowed_merge_methods":["squash","rebase"],"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}}`, + `{"type":"pull_request","parameters":{"allowed_merge_methods":["squash","rebase"],"dismiss_stale_reviews_on_push":true,"require_code_owner_review":true,"require_extra_approval_for_unattributed_changes":true,"require_last_push_approval":true,"required_approving_review_count":2,"required_review_thread_resolution":true}}`, }, { "pull_request_with_required_reviewers", @@ -905,11 +909,12 @@ func TestRepositoryRule(t *testing.T) { PullRequestMergeMethodSquash, PullRequestMergeMethodRebase, }, - DismissStaleReviewsOnPush: false, - RequireCodeOwnerReview: false, - RequireLastPushApproval: false, - RequiredApprovingReviewCount: 0, - RequiredReviewThreadResolution: false, + DismissStaleReviewsOnPush: false, + RequireCodeOwnerReview: false, + RequireExtraApprovalForUnattributedChanges: false, + RequireLastPushApproval: false, + RequiredApprovingReviewCount: 0, + RequiredReviewThreadResolution: false, RequiredReviewers: []*RulesetRequiredReviewer{ { MinimumApprovals: new(1), @@ -922,7 +927,7 @@ func TestRepositoryRule(t *testing.T) { }, }, }, - `{"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}}`, + `{"type":"pull_request","parameters":{"allowed_merge_methods":["merge","squash","rebase"],"dismiss_stale_reviews_on_push":false,"require_code_owner_review":false,"require_extra_approval_for_unattributed_changes":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}}`, }, { "pull_request_with_dismissal_restriction", @@ -970,11 +975,12 @@ func TestRepositoryRule(t *testing.T) { PullRequestMergeMethodSquash, PullRequestMergeMethodRebase, }, - DismissStaleReviewsOnPush: false, - RequireCodeOwnerReview: false, - RequireLastPushApproval: false, - RequiredApprovingReviewCount: 0, - RequiredReviewThreadResolution: false, + DismissStaleReviewsOnPush: false, + RequireCodeOwnerReview: false, + RequireExtraApprovalForUnattributedChanges: false, + RequireLastPushApproval: false, + RequiredApprovingReviewCount: 0, + RequiredReviewThreadResolution: false, RequiredReviewers: []*RulesetRequiredReviewer{ { MinimumApprovals: new(1), @@ -987,7 +993,7 @@ func TestRepositoryRule(t *testing.T) { }, }, }, - `{"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}}`, + `{"type":"pull_request","parameters":{"allowed_merge_methods":["merge","squash","rebase"],"dismiss_stale_reviews_on_push":false,"require_code_owner_review":false,"require_extra_approval_for_unattributed_changes":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}}`, }, { "required_status_checks",