Skip to content

Commit d558458

Browse files
committed
MergeQueue added to common push handler and tests
1 parent 7a2fdb1 commit d558458

File tree

3 files changed

+88
-37
lines changed

3 files changed

+88
-37
lines changed

bitriseapi/bitriseapi.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ const (
4141
PullRequestReadyStateConvertedToReadyForReview PullRequestReadyState = "converted_to_ready_for_review"
4242
)
4343

44+
// MergeQueue ...
45+
type MergeQueueModel struct {
46+
QueueProvider string `json:"queue_provider"`
47+
PullRequestID int `json:"pull_request_id"`
48+
BaseBranch string `json:"base_branch"`
49+
BaseSHA string `json:"base_sha"`
50+
SyntheticSHA string `json:"synthetic_sha"`
51+
}
52+
4453
// BuildParamsModel ...
4554
type BuildParamsModel struct {
4655
// git commit hash
@@ -97,6 +106,8 @@ type BuildParamsModel struct {
97106
PullRequestComment string `json:"pull_request_comment,omitempty"`
98107
// newly added pull request comment's ID
99108
PullRequestCommentID string `json:"pull_request_comment_id,omitempty"`
109+
// merge queue
110+
MergeQueue MergeQueueModel `json:"merge_queue,omitempty"`
100111
}
101112

102113
// TriggerAPIParamsModel ...

service/hook/github/github.go

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -31,26 +31,15 @@ type CommitModel struct {
3131
CommitMessage string `json:"message"`
3232
}
3333

34-
// MergeQueueMeta ...
35-
type MergeQueuePushModel struct {
36-
QueueProvider string `json:"queue_provider,omitempty"`
37-
PRNumber int `json:"pr_number,omitempty"`
38-
BaseBranch string `json:"base_branch,omitempty"`
39-
BaseSHA string `json:"base_sha,omitempty"`
40-
SyntheticSHA string `json:"synthetic_sha,omitempty"`
41-
}
42-
4334
// PushEventModel ...
4435
type PushEventModel struct {
45-
Ref string `json:"ref"`
46-
Deleted bool `json:"deleted"`
47-
HeadCommit CommitModel `json:"head_commit"`
48-
Commits []CommitModel `json:"commits"`
49-
Repo RepoInfoModel `json:"repository"`
50-
Pusher PusherModel `json:"pusher"`
51-
IsMergeQueuePush bool `json:"is_merge_queue_push"`
52-
After string `json:"after"`
53-
MergeQueue *MergeQueuePushModel `json:"merge_queue"`
36+
Ref string `json:"ref"`
37+
Deleted bool `json:"deleted"`
38+
HeadCommit CommitModel `json:"head_commit"`
39+
Commits []CommitModel `json:"commits"`
40+
Repo RepoInfoModel `json:"repository"`
41+
Pusher PusherModel `json:"pusher"`
42+
After string `json:"after"`
5443
}
5544

5645
// UserModel ...
@@ -218,28 +207,37 @@ func transformPushEvent(pushEvent PushEventModel) hookCommon.TransformResultMode
218207
commitMessages = append(commitMessages, commit.CommitMessage)
219208
}
220209

221-
if strings.HasPrefix(pushEvent.Ref, "refs/heads/gh-readonly-queue/") || strings.HasPrefix(pushEvent.Ref, "refs/heads/gt-queue/") {
222-
// merge queue push
223-
provider, base, pr, sha, err := parseMergeQueueRef(pushEvent.Ref)
224-
if err != nil {
225-
return hookCommon.TransformResultModel{
226-
Error: fmt.Errorf("failed to parse merge queue ref: %w", err),
227-
}
228-
}
229-
pushEvent.IsMergeQueuePush = true
230-
pushEvent.MergeQueue = &MergeQueuePushModel{
231-
QueueProvider: provider,
232-
PRNumber: pr,
233-
BaseBranch: base,
234-
BaseSHA: sha,
235-
SyntheticSHA: pushEvent.After,
236-
}
237-
}
238-
239210
if strings.HasPrefix(pushEvent.Ref, "refs/heads/") {
240211
// code push
241212
branch := strings.TrimPrefix(pushEvent.Ref, "refs/heads/")
242213

214+
// merge queue push
215+
var mergeQueue bitriseapi.MergeQueueModel
216+
if strings.HasPrefix(pushEvent.Ref, "refs/heads/gh-readonly-queue/") || strings.HasPrefix(pushEvent.Ref, "refs/heads/gt-queue/") {
217+
providerRef, base, pr, sha, err := parseMergeQueueRef(pushEvent.Ref)
218+
if err != nil {
219+
return hookCommon.TransformResultModel{
220+
Error: fmt.Errorf("failed to parse merge queue ref: %w", err),
221+
}
222+
}
223+
224+
var provider string
225+
switch providerRef {
226+
case "gh-readonly-queue":
227+
provider = "github"
228+
case "gt-queue":
229+
provider = "gitlab"
230+
}
231+
232+
mergeQueue = bitriseapi.MergeQueueModel{
233+
QueueProvider: provider,
234+
PullRequestID: pr,
235+
BaseBranch: base,
236+
BaseSHA: sha,
237+
SyntheticSHA: pushEvent.After,
238+
}
239+
}
240+
243241
return hookCommon.TransformResultModel{
244242
TriggerAPIParams: []bitriseapi.TriggerAPIParamsModel{
245243
{
@@ -250,6 +248,7 @@ func transformPushEvent(pushEvent PushEventModel) hookCommon.TransformResultMode
250248
CommitMessages: commitMessages,
251249
PushCommitPaths: commitPaths,
252250
BaseRepositoryURL: pushEvent.Repo.getRepositoryURL(),
251+
MergeQueue: mergeQueue,
253252
},
254253
TriggeredBy: hookCommon.GenerateTriggeredBy(ProviderID, pushEvent.Pusher.Name),
255254
},

service/hook/github/github_test.go

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,7 @@ const (
681681
"fork": false,
682682
"url": "https://api.github.com/repos/bitrise-io/birmacher-test",
683683
"ssh_url": "git@github.com:bitrise-io/birmacher-test.git",
684-
"clone_url": "https://github.com/bitrise-io/birmacher-test.git",
684+
"clone_url": "https://github.com/bitrise-io/birmacher-test.git"
685685
},
686686
"pusher": {
687687
"name": "github-merge-queue[bot]",
@@ -1929,6 +1929,47 @@ func Test_HookProvider_TransformRequest(t *testing.T) {
19291929
require.Equal(t, false, hookTransformResult.DontWaitForTriggerResponse)
19301930
}
19311931

1932+
t.Log("Merge Queue Push - should be handled")
1933+
{
1934+
request := http.Request{
1935+
Header: http.Header{
1936+
"X-Github-Event": {"push"},
1937+
"Content-Type": {"application/json"},
1938+
},
1939+
Body: io.NopCloser(strings.NewReader(sampleMergeQueuePushData)),
1940+
}
1941+
hookTransformResult := provider.TransformRequest(&request)
1942+
require.NoError(t, hookTransformResult.Error)
1943+
require.False(t, hookTransformResult.ShouldSkip)
1944+
require.Equal(t, []bitriseapi.TriggerAPIParamsModel{
1945+
{
1946+
BuildParams: bitriseapi.BuildParamsModel{
1947+
CommitHash: "cc76bc3a5ffd4836ca30d0eeb224967b7127ab50",
1948+
CommitMessage: "Merge pull request #1 from bitrise-io/birmacher-patch-1\n\nUpdate README.md",
1949+
CommitMessages: []string{"Merge pull request #1 from bitrise-io/birmacher-patch-1\n\nUpdate README.md"},
1950+
Branch: "gh-readonly-queue/main/pr-1-7ed40c455464eaa0c5c4a0aeaefb9ffb16bd2c64",
1951+
PushCommitPaths: []bitriseapi.CommitPaths{
1952+
{
1953+
Added: []string{},
1954+
Removed: []string{},
1955+
Modified: []string{"README.md"},
1956+
},
1957+
},
1958+
BaseRepositoryURL: "git@github.com:bitrise-io/birmacher-test.git",
1959+
MergeQueue: bitriseapi.MergeQueueModel{
1960+
QueueProvider: "github",
1961+
PullRequestID: 1,
1962+
BaseBranch: "main",
1963+
BaseSHA: "7ed40c455464eaa0c5c4a0aeaefb9ffb16bd2c64",
1964+
SyntheticSHA: "cc76bc3a5ffd4836ca30d0eeb224967b7127ab50",
1965+
},
1966+
},
1967+
TriggeredBy: "webhook-github/github-merge-queue[bot]",
1968+
},
1969+
}, hookTransformResult.TriggerAPIParams)
1970+
require.Equal(t, false, hookTransformResult.DontWaitForTriggerResponse)
1971+
}
1972+
19321973
t.Log("Tag Push - should be handled")
19331974
{
19341975
request := http.Request{

0 commit comments

Comments
 (0)