Skip to content

Commit 04274a9

Browse files
authored
fix!: Differentiate merge method of pull request and merge queue (#3559)
BREAKING CHANGE: `MergeMethod*` consts have been split into: `PullRequestMergeMethod*` and `MergeQueueMergeMethod*`.
1 parent 5b75aa8 commit 04274a9

File tree

5 files changed

+78
-58
lines changed

5 files changed

+78
-58
lines changed

github/enterprise_rules_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgNameRepoName(t *testing.T)
212212
},
213213
RequiredSignatures: &EmptyRuleParameters{},
214214
PullRequest: &PullRequestRuleParameters{
215-
AllowedMergeMethods: []MergeMethod{MergeMethodRebase, MergeMethodSquash},
215+
AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash},
216216
DismissStaleReviewsOnPush: true,
217217
RequireCodeOwnerReview: true,
218218
RequireLastPushApproval: true,
@@ -313,7 +313,7 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgNameRepoName(t *testing.T)
313313
},
314314
RequiredSignatures: &EmptyRuleParameters{},
315315
PullRequest: &PullRequestRuleParameters{
316-
AllowedMergeMethods: []MergeMethod{MergeMethodRebase, MergeMethodSquash},
316+
AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash},
317317
DismissStaleReviewsOnPush: true,
318318
RequireCodeOwnerReview: true,
319319
RequireLastPushApproval: true,
@@ -602,7 +602,7 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgNameRepoProperty(t *testin
602602
},
603603
RequiredSignatures: &EmptyRuleParameters{},
604604
PullRequest: &PullRequestRuleParameters{
605-
AllowedMergeMethods: []MergeMethod{MergeMethodRebase, MergeMethodSquash},
605+
AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash},
606606
DismissStaleReviewsOnPush: true,
607607
RequireCodeOwnerReview: true,
608608
RequireLastPushApproval: true,
@@ -713,7 +713,7 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgNameRepoProperty(t *testin
713713
},
714714
RequiredSignatures: &EmptyRuleParameters{},
715715
PullRequest: &PullRequestRuleParameters{
716-
AllowedMergeMethods: []MergeMethod{MergeMethodRebase, MergeMethodSquash},
716+
AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash},
717717
DismissStaleReviewsOnPush: true,
718718
RequireCodeOwnerReview: true,
719719
RequireLastPushApproval: true,
@@ -976,7 +976,7 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgIdRepoName(t *testing.T) {
976976
},
977977
RequiredSignatures: &EmptyRuleParameters{},
978978
PullRequest: &PullRequestRuleParameters{
979-
AllowedMergeMethods: []MergeMethod{MergeMethodRebase, MergeMethodSquash},
979+
AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash},
980980
DismissStaleReviewsOnPush: true,
981981
RequireCodeOwnerReview: true,
982982
RequireLastPushApproval: true,
@@ -1076,7 +1076,7 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgIdRepoName(t *testing.T) {
10761076
},
10771077
RequiredSignatures: &EmptyRuleParameters{},
10781078
PullRequest: &PullRequestRuleParameters{
1079-
AllowedMergeMethods: []MergeMethod{MergeMethodRebase, MergeMethodSquash},
1079+
AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash},
10801080
DismissStaleReviewsOnPush: true,
10811081
RequireCodeOwnerReview: true,
10821082
RequireLastPushApproval: true,
@@ -1358,7 +1358,7 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgIdRepoProperty(t *testing.
13581358
},
13591359
RequiredSignatures: &EmptyRuleParameters{},
13601360
PullRequest: &PullRequestRuleParameters{
1361-
AllowedMergeMethods: []MergeMethod{MergeMethodRebase, MergeMethodSquash},
1361+
AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash},
13621362
DismissStaleReviewsOnPush: true,
13631363
RequireCodeOwnerReview: true,
13641364
RequireLastPushApproval: true,
@@ -1468,7 +1468,7 @@ func TestEnterpriseService_CreateRepositoryRuleset_OrgIdRepoProperty(t *testing.
14681468
},
14691469
RequiredSignatures: &EmptyRuleParameters{},
14701470
PullRequest: &PullRequestRuleParameters{
1471-
AllowedMergeMethods: []MergeMethod{MergeMethodRebase, MergeMethodSquash},
1471+
AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash},
14721472
DismissStaleReviewsOnPush: true,
14731473
RequireCodeOwnerReview: true,
14741474
RequireLastPushApproval: true,

github/event_types_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9761,10 +9761,10 @@ func TestRepositoryRulesetEvent_Unmarshal(t *testing.T) {
97619761
Deletion: &EmptyRuleParameters{},
97629762
RequiredLinearHistory: &EmptyRuleParameters{},
97639763
PullRequest: &PullRequestRuleParameters{
9764-
AllowedMergeMethods: []MergeMethod{
9765-
MergeMethodSquash,
9766-
MergeMethodRebase,
9767-
MergeMethodMerge,
9764+
AllowedMergeMethods: []PullRequestMergeMethod{
9765+
PullRequestMergeMethodSquash,
9766+
PullRequestMergeMethodRebase,
9767+
PullRequestMergeMethodMerge,
97689768
},
97699769
AutomaticCopilotCodeReviewEnabled: Ptr(false),
97709770
DismissStaleReviewsOnPush: false,
@@ -9825,9 +9825,9 @@ func TestRepositoryRulesetEvent_Unmarshal(t *testing.T) {
98259825
Deletion: &EmptyRuleParameters{},
98269826
RequiredSignatures: &EmptyRuleParameters{},
98279827
PullRequest: &PullRequestRuleParameters{
9828-
AllowedMergeMethods: []MergeMethod{
9829-
MergeMethodSquash,
9830-
MergeMethodRebase,
9828+
AllowedMergeMethods: []PullRequestMergeMethod{
9829+
PullRequestMergeMethodSquash,
9830+
PullRequestMergeMethodRebase,
98319831
},
98329832
AutomaticCopilotCodeReviewEnabled: Ptr(false),
98339833
DismissStaleReviewsOnPush: false,
@@ -9880,9 +9880,9 @@ func TestRepositoryRulesetEvent_Unmarshal(t *testing.T) {
98809880
Rule: &RepositoryRule{
98819881
Type: RulesetRuleTypePullRequest,
98829882
Parameters: &PullRequestRuleParameters{
9883-
AllowedMergeMethods: []MergeMethod{
9884-
MergeMethodSquash,
9885-
MergeMethodRebase,
9883+
AllowedMergeMethods: []PullRequestMergeMethod{
9884+
PullRequestMergeMethodSquash,
9885+
PullRequestMergeMethodRebase,
98869886
},
98879887
AutomaticCopilotCodeReviewEnabled: Ptr(false),
98889888
DismissStaleReviewsOnPush: false,

github/orgs_rules_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoNames(t *testing.T) {
255255
},
256256
RequiredSignatures: &EmptyRuleParameters{},
257257
PullRequest: &PullRequestRuleParameters{
258-
AllowedMergeMethods: []MergeMethod{MergeMethodRebase, MergeMethodSquash},
258+
AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash},
259259
DismissStaleReviewsOnPush: true,
260260
RequireCodeOwnerReview: true,
261261
RequireLastPushApproval: true,
@@ -352,7 +352,7 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoNames(t *testing.T) {
352352
},
353353
RequiredSignatures: &EmptyRuleParameters{},
354354
PullRequest: &PullRequestRuleParameters{
355-
AllowedMergeMethods: []MergeMethod{MergeMethodRebase, MergeMethodSquash},
355+
AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash},
356356
DismissStaleReviewsOnPush: true,
357357
RequireCodeOwnerReview: true,
358358
RequireLastPushApproval: true,
@@ -615,7 +615,7 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoProperty(t *testing.T)
615615
},
616616
RequiredSignatures: &EmptyRuleParameters{},
617617
PullRequest: &PullRequestRuleParameters{
618-
AllowedMergeMethods: []MergeMethod{MergeMethodRebase, MergeMethodSquash},
618+
AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash},
619619
DismissStaleReviewsOnPush: true,
620620
RequireCodeOwnerReview: true,
621621
RequireLastPushApproval: true,
@@ -718,7 +718,7 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoProperty(t *testing.T)
718718
},
719719
RequiredSignatures: &EmptyRuleParameters{},
720720
PullRequest: &PullRequestRuleParameters{
721-
AllowedMergeMethods: []MergeMethod{MergeMethodRebase, MergeMethodSquash},
721+
AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash},
722722
DismissStaleReviewsOnPush: true,
723723
RequireCodeOwnerReview: true,
724724
RequireLastPushApproval: true,
@@ -966,7 +966,7 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoIDs(t *testing.T) {
966966
},
967967
RequiredSignatures: &EmptyRuleParameters{},
968968
PullRequest: &PullRequestRuleParameters{
969-
AllowedMergeMethods: []MergeMethod{MergeMethodRebase, MergeMethodSquash},
969+
AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash},
970970
DismissStaleReviewsOnPush: true,
971971
RequireCodeOwnerReview: true,
972972
RequireLastPushApproval: true,
@@ -1061,7 +1061,7 @@ func TestOrganizationsService_CreateRepositoryRuleset_RepoIDs(t *testing.T) {
10611061
},
10621062
RequiredSignatures: &EmptyRuleParameters{},
10631063
PullRequest: &PullRequestRuleParameters{
1064-
AllowedMergeMethods: []MergeMethod{MergeMethodRebase, MergeMethodSquash},
1064+
AllowedMergeMethods: []PullRequestMergeMethod{PullRequestMergeMethodRebase, PullRequestMergeMethodSquash},
10651065
DismissStaleReviewsOnPush: true,
10661066
RequireCodeOwnerReview: true,
10671067
RequireLastPushApproval: true,

github/rules.go

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,34 @@ const (
9999
MergeGroupingStrategyHeadGreen MergeGroupingStrategy = "HEADGREEN"
100100
)
101101

102-
// MergeMethod models a GitHub merge method.
103-
type MergeMethod string
102+
// PullRequestMergeMethod is used in PullRequestRuleParameters,
103+
// where the GitHub API expects lowercase merge method values: "merge", "rebase", "squash".
104+
//
105+
// NOTE: GitHub's API inconsistently uses different casing for the same logical values
106+
// across different rules.
107+
//
108+
// TODO: Unify with MergeQueueMergeMethod once the GitHub API uses consistent casing.
109+
type PullRequestMergeMethod string
110+
111+
const (
112+
PullRequestMergeMethodMerge PullRequestMergeMethod = "merge"
113+
PullRequestMergeMethodRebase PullRequestMergeMethod = "rebase"
114+
PullRequestMergeMethodSquash PullRequestMergeMethod = "squash"
115+
)
116+
117+
// MergeQueueMergeMethod is used in MergeQueueRuleParameters,
118+
// where the GitHub API expects uppercase merge method values: "MERGE", "REBASE", "SQUASH".
119+
//
120+
// NOTE: This type exists alongside PullRequestMergeMethod solely due to API casing inconsistencies.
121+
// It enforces the correct usage by API context.
122+
//
123+
// TODO: Unify with PullRequestMergeMethod once the GitHub API uses consistent casing.
124+
type MergeQueueMergeMethod string
104125

105-
// This is the set of GitHub merge methods.
106126
const (
107-
MergeMethodMerge MergeMethod = "merge"
108-
MergeMethodRebase MergeMethod = "rebase"
109-
MergeMethodSquash MergeMethod = "squash"
127+
MergeQueueMergeMethodMerge MergeQueueMergeMethod = "MERGE"
128+
MergeQueueMergeMethodRebase MergeQueueMergeMethod = "REBASE"
129+
MergeQueueMergeMethodSquash MergeQueueMergeMethod = "SQUASH"
110130
)
111131

112132
// PatternRuleOperator models a GitHub pattern rule operator.
@@ -383,7 +403,7 @@ type MergeQueueRuleParameters struct {
383403
GroupingStrategy MergeGroupingStrategy `json:"grouping_strategy"`
384404
MaxEntriesToBuild int `json:"max_entries_to_build"`
385405
MaxEntriesToMerge int `json:"max_entries_to_merge"`
386-
MergeMethod MergeMethod `json:"merge_method"`
406+
MergeMethod MergeQueueMergeMethod `json:"merge_method"`
387407
MinEntriesToMerge int `json:"min_entries_to_merge"`
388408
MinEntriesToMergeWaitMinutes int `json:"min_entries_to_merge_wait_minutes"`
389409
}
@@ -395,13 +415,13 @@ type RequiredDeploymentsRuleParameters struct {
395415

396416
// PullRequestRuleParameters represents the pull_request rule parameters.
397417
type PullRequestRuleParameters struct {
398-
AllowedMergeMethods []MergeMethod `json:"allowed_merge_methods"`
399-
AutomaticCopilotCodeReviewEnabled *bool `json:"automatic_copilot_code_review_enabled,omitempty"`
400-
DismissStaleReviewsOnPush bool `json:"dismiss_stale_reviews_on_push"`
401-
RequireCodeOwnerReview bool `json:"require_code_owner_review"`
402-
RequireLastPushApproval bool `json:"require_last_push_approval"`
403-
RequiredApprovingReviewCount int `json:"required_approving_review_count"`
404-
RequiredReviewThreadResolution bool `json:"required_review_thread_resolution"`
418+
AllowedMergeMethods []PullRequestMergeMethod `json:"allowed_merge_methods"`
419+
AutomaticCopilotCodeReviewEnabled *bool `json:"automatic_copilot_code_review_enabled,omitempty"`
420+
DismissStaleReviewsOnPush bool `json:"dismiss_stale_reviews_on_push"`
421+
RequireCodeOwnerReview bool `json:"require_code_owner_review"`
422+
RequireLastPushApproval bool `json:"require_last_push_approval"`
423+
RequiredApprovingReviewCount int `json:"required_approving_review_count"`
424+
RequiredReviewThreadResolution bool `json:"required_review_thread_resolution"`
405425
}
406426

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

0 commit comments

Comments
 (0)