From faac0a5dcbb6eac79a16d2c72710d02d07903868 Mon Sep 17 00:00:00 2001 From: Yahia Mohamed Date: Wed, 26 Aug 2026 10:57:36 +0300 Subject: [PATCH 1/5] feat: add MergeAsync and GetMergeAsyncResult support --- github/github-accessors.go | 104 ++++++++++++++++++++++++ github/github-accessors_test.go | 140 ++++++++++++++++++++++++++++++++ github/pulls.go | 83 +++++++++++++++++++ github/pulls_test.go | 109 +++++++++++++++++++++++++ 4 files changed, 436 insertions(+) diff --git a/github/github-accessors.go b/github/github-accessors.go index 6b15a7c02f7..5154c044e2d 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -2702,6 +2702,70 @@ func (a *AssignmentGrade) GetSubmissionTimestamp() Timestamp { return *a.SubmissionTimestamp } +// GetExpectedHeadSHA returns the ExpectedHeadSHA field if it's non-nil, zero value otherwise. +func (a *AsyncMergeDetails) GetExpectedHeadSHA() string { + if a == nil || a.ExpectedHeadSHA == nil { + return "" + } + return *a.ExpectedHeadSHA +} + +// GetMergeAction returns the MergeAction field if it's non-nil, zero value otherwise. +func (a *AsyncMergeDetails) GetMergeAction() string { + if a == nil || a.MergeAction == nil { + return "" + } + return *a.MergeAction +} + +// GetMergeMethod returns the MergeMethod field if it's non-nil, zero value otherwise. +func (a *AsyncMergeDetails) GetMergeMethod() string { + if a == nil || a.MergeMethod == nil { + return "" + } + return *a.MergeMethod +} + +// GetMessage returns the Message field if it's non-nil, zero value otherwise. +func (a *AsyncMergeDetails) GetMessage() string { + if a == nil || a.Message == nil { + return "" + } + return *a.Message +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (a *AsyncMergeDetails) GetSHA() string { + if a == nil || a.SHA == nil { + return "" + } + return *a.SHA +} + +// GetUUID returns the UUID field if it's non-nil, zero value otherwise. +func (a *AsyncMergeDetails) GetUUID() string { + if a == nil || a.UUID == nil { + return "" + } + return *a.UUID +} + +// GetDetails returns the Details field. +func (a *AsyncMergeResult) GetDetails() *AsyncMergeDetails { + if a == nil { + return nil + } + return a.Details +} + +// GetStatus returns the Status field if it's non-nil, zero value otherwise. +func (a *AsyncMergeResult) GetStatus() string { + if a == nil || a.Status == nil { + return "" + } + return *a.Status +} + // GetBody returns the Body field if it's non-nil, zero value otherwise. func (a *Attachment) GetBody() string { if a == nil || a.Body == nil { @@ -25102,6 +25166,46 @@ func (m *MembershipEvent) GetTeam() *Team { return m.Team } +// GetCommitMessage returns the CommitMessage field if it's non-nil, zero value otherwise. +func (m *MergeAsyncRequest) GetCommitMessage() string { + if m == nil || m.CommitMessage == nil { + return "" + } + return *m.CommitMessage +} + +// GetCommitTitle returns the CommitTitle field if it's non-nil, zero value otherwise. +func (m *MergeAsyncRequest) GetCommitTitle() string { + if m == nil || m.CommitTitle == nil { + return "" + } + return *m.CommitTitle +} + +// GetMergeAction returns the MergeAction field if it's non-nil, zero value otherwise. +func (m *MergeAsyncRequest) GetMergeAction() string { + if m == nil || m.MergeAction == nil { + return "" + } + return *m.MergeAction +} + +// GetMergeMethod returns the MergeMethod field if it's non-nil, zero value otherwise. +func (m *MergeAsyncRequest) GetMergeMethod() string { + if m == nil || m.MergeMethod == nil { + return "" + } + return *m.MergeMethod +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (m *MergeAsyncRequest) GetSHA() string { + if m == nil || m.SHA == nil { + return "" + } + return *m.SHA +} + // GetBaseRef returns the BaseRef field if it's non-nil, zero value otherwise. func (m *MergeGroup) GetBaseRef() string { if m == nil || m.BaseRef == nil { diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go index 7e7bea2b941..8387aa33d3b 100644 --- a/github/github-accessors_test.go +++ b/github/github-accessors_test.go @@ -3411,6 +3411,91 @@ func TestAssignmentGrade_GetSubmissionTimestamp(tt *testing.T) { a.GetSubmissionTimestamp() } +func TestAsyncMergeDetails_GetExpectedHeadSHA(tt *testing.T) { + tt.Parallel() + var zeroValue string + a := &AsyncMergeDetails{ExpectedHeadSHA: &zeroValue} + a.GetExpectedHeadSHA() + a = &AsyncMergeDetails{} + a.GetExpectedHeadSHA() + a = nil + a.GetExpectedHeadSHA() +} + +func TestAsyncMergeDetails_GetMergeAction(tt *testing.T) { + tt.Parallel() + var zeroValue string + a := &AsyncMergeDetails{MergeAction: &zeroValue} + a.GetMergeAction() + a = &AsyncMergeDetails{} + a.GetMergeAction() + a = nil + a.GetMergeAction() +} + +func TestAsyncMergeDetails_GetMergeMethod(tt *testing.T) { + tt.Parallel() + var zeroValue string + a := &AsyncMergeDetails{MergeMethod: &zeroValue} + a.GetMergeMethod() + a = &AsyncMergeDetails{} + a.GetMergeMethod() + a = nil + a.GetMergeMethod() +} + +func TestAsyncMergeDetails_GetMessage(tt *testing.T) { + tt.Parallel() + var zeroValue string + a := &AsyncMergeDetails{Message: &zeroValue} + a.GetMessage() + a = &AsyncMergeDetails{} + a.GetMessage() + a = nil + a.GetMessage() +} + +func TestAsyncMergeDetails_GetSHA(tt *testing.T) { + tt.Parallel() + var zeroValue string + a := &AsyncMergeDetails{SHA: &zeroValue} + a.GetSHA() + a = &AsyncMergeDetails{} + a.GetSHA() + a = nil + a.GetSHA() +} + +func TestAsyncMergeDetails_GetUUID(tt *testing.T) { + tt.Parallel() + var zeroValue string + a := &AsyncMergeDetails{UUID: &zeroValue} + a.GetUUID() + a = &AsyncMergeDetails{} + a.GetUUID() + a = nil + a.GetUUID() +} + +func TestAsyncMergeResult_GetDetails(tt *testing.T) { + tt.Parallel() + a := &AsyncMergeResult{} + a.GetDetails() + a = nil + a.GetDetails() +} + +func TestAsyncMergeResult_GetStatus(tt *testing.T) { + tt.Parallel() + var zeroValue string + a := &AsyncMergeResult{Status: &zeroValue} + a.GetStatus() + a = &AsyncMergeResult{} + a.GetStatus() + a = nil + a.GetStatus() +} + func TestAttachment_GetBody(tt *testing.T) { tt.Parallel() var zeroValue string @@ -31430,6 +31515,61 @@ func TestMembershipEvent_GetTeam(tt *testing.T) { m.GetTeam() } +func TestMergeAsyncRequest_GetCommitMessage(tt *testing.T) { + tt.Parallel() + var zeroValue string + m := &MergeAsyncRequest{CommitMessage: &zeroValue} + m.GetCommitMessage() + m = &MergeAsyncRequest{} + m.GetCommitMessage() + m = nil + m.GetCommitMessage() +} + +func TestMergeAsyncRequest_GetCommitTitle(tt *testing.T) { + tt.Parallel() + var zeroValue string + m := &MergeAsyncRequest{CommitTitle: &zeroValue} + m.GetCommitTitle() + m = &MergeAsyncRequest{} + m.GetCommitTitle() + m = nil + m.GetCommitTitle() +} + +func TestMergeAsyncRequest_GetMergeAction(tt *testing.T) { + tt.Parallel() + var zeroValue string + m := &MergeAsyncRequest{MergeAction: &zeroValue} + m.GetMergeAction() + m = &MergeAsyncRequest{} + m.GetMergeAction() + m = nil + m.GetMergeAction() +} + +func TestMergeAsyncRequest_GetMergeMethod(tt *testing.T) { + tt.Parallel() + var zeroValue string + m := &MergeAsyncRequest{MergeMethod: &zeroValue} + m.GetMergeMethod() + m = &MergeAsyncRequest{} + m.GetMergeMethod() + m = nil + m.GetMergeMethod() +} + +func TestMergeAsyncRequest_GetSHA(tt *testing.T) { + tt.Parallel() + var zeroValue string + m := &MergeAsyncRequest{SHA: &zeroValue} + m.GetSHA() + m = &MergeAsyncRequest{} + m.GetSHA() + m = nil + m.GetSHA() +} + func TestMergeGroup_GetBaseRef(tt *testing.T) { tt.Parallel() var zeroValue string diff --git a/github/pulls.go b/github/pulls.go index 81bc9f89535..a2611116f32 100644 --- a/github/pulls.go +++ b/github/pulls.go @@ -514,6 +514,36 @@ type pullRequestMergeRequest struct { SHA string `json:"sha,omitempty"` } +// MergeAsyncRequest a request to merge a pull request asynchronously. +type MergeAsyncRequest struct { + // MergeMethod is the merge method: merge, squash, or rebase. Not supported on merge_queue actions. + MergeMethod *string `json:"merge_method,omitempty"` + // MergeAction is how to merge: default, direct_merge, or merge_queue. + MergeAction *string `json:"merge_action,omitempty"` + // CommitTitle is the title for the automatic commit message. Not supported on merge_queue actions. + CommitTitle *string `json:"commit_title,omitempty"` + // CommitMessage is extra detail to append to the automatic commit message. Not supported on merge_queue actions. + CommitMessage *string `json:"commit_message,omitempty"` + // SHA that the pull request head must match to allow the merge. + SHA *string `json:"sha,omitempty"` +} + +// AsyncMergeResult the current state of an asynchronous merge request. +type AsyncMergeResult struct { + Status *string `json:"status,omitempty"` + Details *AsyncMergeDetails `json:"details,omitempty"` +} + +// AsyncMergeDetails details for the current state of an AsyncMergeResult. +type AsyncMergeDetails struct { + Message *string `json:"message,omitempty"` + UUID *string `json:"uuid,omitempty"` + MergeMethod *string `json:"merge_method,omitempty"` + MergeAction *string `json:"merge_action,omitempty"` + ExpectedHeadSHA *string `json:"expected_head_sha,omitempty"` + SHA *string `json:"sha,omitempty"` +} + // Merge a pull request. // commitMessage is an extra detail to append to automatic commit message. // @@ -548,3 +578,56 @@ func (s *PullRequestsService) Merge(ctx context.Context, owner, repo string, num return mergeResult, resp, nil } + +// MergeAsync merges a pull request asynchronously. For stacked pull requests, +// this also merges everything below it in the stack. This is the required +// method for merging stacked pull requests; the legacy Merge method cannot be +// used for stacks. +// +// A pending response includes a UUID in AsyncMergeResult.Details.UUID that +// must be passed to GetMergeAsyncResult to poll for the outcome. +// +// GitHub API docs: https://docs.github.com/rest/pulls/pulls?apiVersion=2022-11-28#merge-a-pull-request-asynchronously +// +//meta:operation PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge-async +func (s *PullRequestsService) MergeAsync(ctx context.Context, owner, repo string, number int, body MergeAsyncRequest) (*AsyncMergeResult, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%v/merge-async", owner, repo, number) + + req, err := s.client.NewRequest(ctx, "PUT", u, body) + if err != nil { + return nil, nil, err + } + + var result *AsyncMergeResult + resp, err := s.client.Do(req, &result) + if err != nil { + return nil, resp, err + } + + return result, resp, nil +} + +// GetMergeAsyncResult fetches the current result of an asynchronous merge +// request, identified by the uuid returned when the merge was submitted via +// MergeAsync. Poll this method until the returned status is no longer +// "pending". Results are retained for 24 hours after their most recent update. +// +// GitHub API docs: https://docs.github.com/rest/pulls/pulls?apiVersion=2022-11-28#get-the-result-of-an-asynchronous-merge +// +//meta:operation GET /repos/{owner}/{repo}/pulls/{pull_number}/merge-async/{uuid} +func (s *PullRequestsService) GetMergeAsyncResult(ctx context.Context, owner, repo string, number int, uuid string) (*AsyncMergeResult, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%v/merge-async/%v", owner, repo, number, uuid) + + req, err := s.client.NewRequest(ctx, "GET", u, nil) + if err != nil { + return nil, nil, err + } + + var result *AsyncMergeResult + resp, err := s.client.Do(req, &result) + if err != nil { + return nil, resp, err + } + + return result, resp, nil +} diff --git a/github/pulls_test.go b/github/pulls_test.go index 926e0d17866..f6d4c940b25 100644 --- a/github/pulls_test.go +++ b/github/pulls_test.go @@ -756,6 +756,115 @@ func TestPullRequestsService_Merge(t *testing.T) { }) } +func TestPullRequestsService_MergeAsync(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + request := MergeAsyncRequest{ + MergeMethod: Ptr("squash"), + MergeAction: Ptr("default"), + } + + mux.HandleFunc("/repos/o/r/pulls/1/merge-async", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "PUT") + testJSONBody(t, r, request) + fmt.Fprint(w, ` + { + "status": "pending", + "details": { + "message": "Merge request enqueued.", + "uuid": "630b9d5e-3f2a-4f7e-8b0c-2d5f9a8c1e42", + "merge_method": "squash", + "merge_action": "default", + "expected_head_sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e" + } + }`) + }) + + ctx := t.Context() + result, _, err := client.PullRequests.MergeAsync(ctx, "o", "r", 1, request) + if err != nil { + t.Errorf("PullRequests.MergeAsync returned error: %v", err) + } + + want := &AsyncMergeResult{ + Status: Ptr("pending"), + Details: &AsyncMergeDetails{ + Message: Ptr("Merge request enqueued."), + UUID: Ptr("630b9d5e-3f2a-4f7e-8b0c-2d5f9a8c1e42"), + MergeMethod: Ptr("squash"), + MergeAction: Ptr("default"), + ExpectedHeadSHA: Ptr("6dcb09b5b57875f334f61aebed695e2e4193db5e"), + }, + } + if !cmp.Equal(result, want) { + t.Errorf("PullRequests.MergeAsync returned %+v, want %+v", result, want) + } + + const methodName = "MergeAsync" + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.PullRequests.MergeAsync(ctx, "\n", "\n", -1, request) + return err + }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.PullRequests.MergeAsync(ctx, "o", "r", 1, request) + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) +} + +func TestPullRequestsService_GetMergeAsyncResult(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + const uuid = "630b9d5e-3f2a-4f7e-8b0c-2d5f9a8c1e42" + mux.HandleFunc(fmt.Sprintf("/repos/o/r/pulls/1/merge-async/%v", uuid), func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + fmt.Fprint(w, ` + { + "status": "merged", + "details": { + "message": "Pull request was merged.", + "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e" + } + }`) + }) + + ctx := t.Context() + result, _, err := client.PullRequests.GetMergeAsyncResult(ctx, "o", "r", 1, uuid) + if err != nil { + t.Errorf("PullRequests.GetMergeAsyncResult returned error: %v", err) + } + + want := &AsyncMergeResult{ + Status: Ptr("merged"), + Details: &AsyncMergeDetails{ + Message: Ptr("Pull request was merged."), + SHA: Ptr("6dcb09b5b57875f334f61aebed695e2e4193db5e"), + }, + } + if !cmp.Equal(result, want) { + t.Errorf("PullRequests.GetMergeAsyncResult returned %+v, want %+v", result, want) + } + + const methodName = "GetMergeAsyncResult" + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.PullRequests.GetMergeAsyncResult(ctx, "\n", "\n", -1, "\n") + return err + }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.PullRequests.GetMergeAsyncResult(ctx, "o", "r", 1, uuid) + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) +} + // Test that different merge options produce expected PUT requests. See issue https://github.com/google/go-github/issues/500. func TestPullRequestsService_Merge_options(t *testing.T) { t.Parallel() From 1400fd8b834f907b3a71acafd6b595cfd9da591d Mon Sep 17 00:00:00 2001 From: Yahia Mohamed Date: Wed, 26 Aug 2026 11:06:04 +0300 Subject: [PATCH 2/5] docs: fix doc comment grammar --- github/pulls.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/github/pulls.go b/github/pulls.go index a2611116f32..40a05db9e15 100644 --- a/github/pulls.go +++ b/github/pulls.go @@ -514,7 +514,7 @@ type pullRequestMergeRequest struct { SHA string `json:"sha,omitempty"` } -// MergeAsyncRequest a request to merge a pull request asynchronously. +// MergeAsyncRequest represents a request to merge a pull request asynchronously. type MergeAsyncRequest struct { // MergeMethod is the merge method: merge, squash, or rebase. Not supported on merge_queue actions. MergeMethod *string `json:"merge_method,omitempty"` @@ -528,13 +528,13 @@ type MergeAsyncRequest struct { SHA *string `json:"sha,omitempty"` } -// AsyncMergeResult the current state of an asynchronous merge request. +// AsyncMergeResult represents the current state of an asynchronous merge request. type AsyncMergeResult struct { Status *string `json:"status,omitempty"` Details *AsyncMergeDetails `json:"details,omitempty"` } -// AsyncMergeDetails details for the current state of an AsyncMergeResult. +// AsyncMergeDetails represents details for the current state of an AsyncMergeResult. type AsyncMergeDetails struct { Message *string `json:"message,omitempty"` UUID *string `json:"uuid,omitempty"` From eae895068c1923c69db88ec160f474c2d8c01cde Mon Sep 17 00:00:00 2001 From: Yahia Mohamed Date: Wed, 26 Aug 2026 22:06:57 +0300 Subject: [PATCH 3/5] Update github/pulls.go Co-authored-by: Oleksandr Redko --- github/pulls.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/pulls.go b/github/pulls.go index 40a05db9e15..de49392c996 100644 --- a/github/pulls.go +++ b/github/pulls.go @@ -590,7 +590,7 @@ func (s *PullRequestsService) Merge(ctx context.Context, owner, repo string, num // GitHub API docs: https://docs.github.com/rest/pulls/pulls?apiVersion=2022-11-28#merge-a-pull-request-asynchronously // //meta:operation PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge-async -func (s *PullRequestsService) MergeAsync(ctx context.Context, owner, repo string, number int, body MergeAsyncRequest) (*AsyncMergeResult, *Response, error) { +func (s *PullRequestsService) MergeAsync(ctx context.Context, owner, repo string, number int, body PullRequestMergeAsyncRequest) (*PullRequestMergeAsyncResult, *Response, error) { u := fmt.Sprintf("repos/%v/%v/pulls/%v/merge-async", owner, repo, number) req, err := s.client.NewRequest(ctx, "PUT", u, body) From 3ac2d180f063ee83ec6ddfc730d75850c1d7fe40 Mon Sep 17 00:00:00 2001 From: Yahia Mohamed Date: Wed, 26 Aug 2026 22:07:36 +0300 Subject: [PATCH 4/5] Update github/pulls.go Co-authored-by: Oleksandr Redko --- github/pulls.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/pulls.go b/github/pulls.go index de49392c996..78b60bdf574 100644 --- a/github/pulls.go +++ b/github/pulls.go @@ -531,7 +531,7 @@ type MergeAsyncRequest struct { // AsyncMergeResult represents the current state of an asynchronous merge request. type AsyncMergeResult struct { Status *string `json:"status,omitempty"` - Details *AsyncMergeDetails `json:"details,omitempty"` + Details *PullRequestMergeAsyncDetails `json:"details,omitempty"` } // AsyncMergeDetails represents details for the current state of an AsyncMergeResult. From 01bf9d3c134848720398029c7095a85da0e03986 Mon Sep 17 00:00:00 2001 From: Yahia Mohamed Date: Wed, 26 Aug 2026 23:06:49 +0300 Subject: [PATCH 5/5] refactor: rename async merge types for consistency --- github/github-accessors.go | 208 ++++++++++++------------ github/github-accessors_test.go | 280 ++++++++++++++++---------------- github/pulls.go | 24 +-- github/pulls_test.go | 10 +- 4 files changed, 261 insertions(+), 261 deletions(-) diff --git a/github/github-accessors.go b/github/github-accessors.go index 5154c044e2d..c3d998dfe11 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -2702,70 +2702,6 @@ func (a *AssignmentGrade) GetSubmissionTimestamp() Timestamp { return *a.SubmissionTimestamp } -// GetExpectedHeadSHA returns the ExpectedHeadSHA field if it's non-nil, zero value otherwise. -func (a *AsyncMergeDetails) GetExpectedHeadSHA() string { - if a == nil || a.ExpectedHeadSHA == nil { - return "" - } - return *a.ExpectedHeadSHA -} - -// GetMergeAction returns the MergeAction field if it's non-nil, zero value otherwise. -func (a *AsyncMergeDetails) GetMergeAction() string { - if a == nil || a.MergeAction == nil { - return "" - } - return *a.MergeAction -} - -// GetMergeMethod returns the MergeMethod field if it's non-nil, zero value otherwise. -func (a *AsyncMergeDetails) GetMergeMethod() string { - if a == nil || a.MergeMethod == nil { - return "" - } - return *a.MergeMethod -} - -// GetMessage returns the Message field if it's non-nil, zero value otherwise. -func (a *AsyncMergeDetails) GetMessage() string { - if a == nil || a.Message == nil { - return "" - } - return *a.Message -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (a *AsyncMergeDetails) GetSHA() string { - if a == nil || a.SHA == nil { - return "" - } - return *a.SHA -} - -// GetUUID returns the UUID field if it's non-nil, zero value otherwise. -func (a *AsyncMergeDetails) GetUUID() string { - if a == nil || a.UUID == nil { - return "" - } - return *a.UUID -} - -// GetDetails returns the Details field. -func (a *AsyncMergeResult) GetDetails() *AsyncMergeDetails { - if a == nil { - return nil - } - return a.Details -} - -// GetStatus returns the Status field if it's non-nil, zero value otherwise. -func (a *AsyncMergeResult) GetStatus() string { - if a == nil || a.Status == nil { - return "" - } - return *a.Status -} - // GetBody returns the Body field if it's non-nil, zero value otherwise. func (a *Attachment) GetBody() string { if a == nil || a.Body == nil { @@ -25166,46 +25102,6 @@ func (m *MembershipEvent) GetTeam() *Team { return m.Team } -// GetCommitMessage returns the CommitMessage field if it's non-nil, zero value otherwise. -func (m *MergeAsyncRequest) GetCommitMessage() string { - if m == nil || m.CommitMessage == nil { - return "" - } - return *m.CommitMessage -} - -// GetCommitTitle returns the CommitTitle field if it's non-nil, zero value otherwise. -func (m *MergeAsyncRequest) GetCommitTitle() string { - if m == nil || m.CommitTitle == nil { - return "" - } - return *m.CommitTitle -} - -// GetMergeAction returns the MergeAction field if it's non-nil, zero value otherwise. -func (m *MergeAsyncRequest) GetMergeAction() string { - if m == nil || m.MergeAction == nil { - return "" - } - return *m.MergeAction -} - -// GetMergeMethod returns the MergeMethod field if it's non-nil, zero value otherwise. -func (m *MergeAsyncRequest) GetMergeMethod() string { - if m == nil || m.MergeMethod == nil { - return "" - } - return *m.MergeMethod -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (m *MergeAsyncRequest) GetSHA() string { - if m == nil || m.SHA == nil { - return "" - } - return *m.SHA -} - // GetBaseRef returns the BaseRef field if it's non-nil, zero value otherwise. func (m *MergeGroup) GetBaseRef() string { if m == nil || m.BaseRef == nil { @@ -32318,6 +32214,110 @@ func (p *PullRequestListOptions) GetState() string { return p.State } +// GetExpectedHeadSHA returns the ExpectedHeadSHA field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeAsyncDetails) GetExpectedHeadSHA() string { + if p == nil || p.ExpectedHeadSHA == nil { + return "" + } + return *p.ExpectedHeadSHA +} + +// GetMergeAction returns the MergeAction field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeAsyncDetails) GetMergeAction() string { + if p == nil || p.MergeAction == nil { + return "" + } + return *p.MergeAction +} + +// GetMergeMethod returns the MergeMethod field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeAsyncDetails) GetMergeMethod() string { + if p == nil || p.MergeMethod == nil { + return "" + } + return *p.MergeMethod +} + +// GetMessage returns the Message field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeAsyncDetails) GetMessage() string { + if p == nil || p.Message == nil { + return "" + } + return *p.Message +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeAsyncDetails) GetSHA() string { + if p == nil || p.SHA == nil { + return "" + } + return *p.SHA +} + +// GetUUID returns the UUID field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeAsyncDetails) GetUUID() string { + if p == nil || p.UUID == nil { + return "" + } + return *p.UUID +} + +// GetCommitMessage returns the CommitMessage field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeAsyncRequest) GetCommitMessage() string { + if p == nil || p.CommitMessage == nil { + return "" + } + return *p.CommitMessage +} + +// GetCommitTitle returns the CommitTitle field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeAsyncRequest) GetCommitTitle() string { + if p == nil || p.CommitTitle == nil { + return "" + } + return *p.CommitTitle +} + +// GetMergeAction returns the MergeAction field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeAsyncRequest) GetMergeAction() string { + if p == nil || p.MergeAction == nil { + return "" + } + return *p.MergeAction +} + +// GetMergeMethod returns the MergeMethod field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeAsyncRequest) GetMergeMethod() string { + if p == nil || p.MergeMethod == nil { + return "" + } + return *p.MergeMethod +} + +// GetSHA returns the SHA field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeAsyncRequest) GetSHA() string { + if p == nil || p.SHA == nil { + return "" + } + return *p.SHA +} + +// GetDetails returns the Details field. +func (p *PullRequestMergeAsyncResult) GetDetails() *PullRequestMergeAsyncDetails { + if p == nil { + return nil + } + return p.Details +} + +// GetStatus returns the Status field if it's non-nil, zero value otherwise. +func (p *PullRequestMergeAsyncResult) GetStatus() string { + if p == nil || p.Status == nil { + return "" + } + return *p.Status +} + // GetMerged returns the Merged field if it's non-nil, zero value otherwise. func (p *PullRequestMergeResult) GetMerged() bool { if p == nil || p.Merged == nil { diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go index 8387aa33d3b..28c67488063 100644 --- a/github/github-accessors_test.go +++ b/github/github-accessors_test.go @@ -3411,91 +3411,6 @@ func TestAssignmentGrade_GetSubmissionTimestamp(tt *testing.T) { a.GetSubmissionTimestamp() } -func TestAsyncMergeDetails_GetExpectedHeadSHA(tt *testing.T) { - tt.Parallel() - var zeroValue string - a := &AsyncMergeDetails{ExpectedHeadSHA: &zeroValue} - a.GetExpectedHeadSHA() - a = &AsyncMergeDetails{} - a.GetExpectedHeadSHA() - a = nil - a.GetExpectedHeadSHA() -} - -func TestAsyncMergeDetails_GetMergeAction(tt *testing.T) { - tt.Parallel() - var zeroValue string - a := &AsyncMergeDetails{MergeAction: &zeroValue} - a.GetMergeAction() - a = &AsyncMergeDetails{} - a.GetMergeAction() - a = nil - a.GetMergeAction() -} - -func TestAsyncMergeDetails_GetMergeMethod(tt *testing.T) { - tt.Parallel() - var zeroValue string - a := &AsyncMergeDetails{MergeMethod: &zeroValue} - a.GetMergeMethod() - a = &AsyncMergeDetails{} - a.GetMergeMethod() - a = nil - a.GetMergeMethod() -} - -func TestAsyncMergeDetails_GetMessage(tt *testing.T) { - tt.Parallel() - var zeroValue string - a := &AsyncMergeDetails{Message: &zeroValue} - a.GetMessage() - a = &AsyncMergeDetails{} - a.GetMessage() - a = nil - a.GetMessage() -} - -func TestAsyncMergeDetails_GetSHA(tt *testing.T) { - tt.Parallel() - var zeroValue string - a := &AsyncMergeDetails{SHA: &zeroValue} - a.GetSHA() - a = &AsyncMergeDetails{} - a.GetSHA() - a = nil - a.GetSHA() -} - -func TestAsyncMergeDetails_GetUUID(tt *testing.T) { - tt.Parallel() - var zeroValue string - a := &AsyncMergeDetails{UUID: &zeroValue} - a.GetUUID() - a = &AsyncMergeDetails{} - a.GetUUID() - a = nil - a.GetUUID() -} - -func TestAsyncMergeResult_GetDetails(tt *testing.T) { - tt.Parallel() - a := &AsyncMergeResult{} - a.GetDetails() - a = nil - a.GetDetails() -} - -func TestAsyncMergeResult_GetStatus(tt *testing.T) { - tt.Parallel() - var zeroValue string - a := &AsyncMergeResult{Status: &zeroValue} - a.GetStatus() - a = &AsyncMergeResult{} - a.GetStatus() - a = nil - a.GetStatus() -} - func TestAttachment_GetBody(tt *testing.T) { tt.Parallel() var zeroValue string @@ -31515,61 +31430,6 @@ func TestMembershipEvent_GetTeam(tt *testing.T) { m.GetTeam() } -func TestMergeAsyncRequest_GetCommitMessage(tt *testing.T) { - tt.Parallel() - var zeroValue string - m := &MergeAsyncRequest{CommitMessage: &zeroValue} - m.GetCommitMessage() - m = &MergeAsyncRequest{} - m.GetCommitMessage() - m = nil - m.GetCommitMessage() -} - -func TestMergeAsyncRequest_GetCommitTitle(tt *testing.T) { - tt.Parallel() - var zeroValue string - m := &MergeAsyncRequest{CommitTitle: &zeroValue} - m.GetCommitTitle() - m = &MergeAsyncRequest{} - m.GetCommitTitle() - m = nil - m.GetCommitTitle() -} - -func TestMergeAsyncRequest_GetMergeAction(tt *testing.T) { - tt.Parallel() - var zeroValue string - m := &MergeAsyncRequest{MergeAction: &zeroValue} - m.GetMergeAction() - m = &MergeAsyncRequest{} - m.GetMergeAction() - m = nil - m.GetMergeAction() -} - -func TestMergeAsyncRequest_GetMergeMethod(tt *testing.T) { - tt.Parallel() - var zeroValue string - m := &MergeAsyncRequest{MergeMethod: &zeroValue} - m.GetMergeMethod() - m = &MergeAsyncRequest{} - m.GetMergeMethod() - m = nil - m.GetMergeMethod() -} - -func TestMergeAsyncRequest_GetSHA(tt *testing.T) { - tt.Parallel() - var zeroValue string - m := &MergeAsyncRequest{SHA: &zeroValue} - m.GetSHA() - m = &MergeAsyncRequest{} - m.GetSHA() - m = nil - m.GetSHA() -} - func TestMergeGroup_GetBaseRef(tt *testing.T) { tt.Parallel() var zeroValue string @@ -40557,6 +40417,146 @@ func TestPullRequestListOptions_GetState(tt *testing.T) { p.GetState() } +func TestPullRequestMergeAsyncDetails_GetExpectedHeadSHA(tt *testing.T) { + tt.Parallel() + var zeroValue string + p := &PullRequestMergeAsyncDetails{ExpectedHeadSHA: &zeroValue} + p.GetExpectedHeadSHA() + p = &PullRequestMergeAsyncDetails{} + p.GetExpectedHeadSHA() + p = nil + p.GetExpectedHeadSHA() +} + +func TestPullRequestMergeAsyncDetails_GetMergeAction(tt *testing.T) { + tt.Parallel() + var zeroValue string + p := &PullRequestMergeAsyncDetails{MergeAction: &zeroValue} + p.GetMergeAction() + p = &PullRequestMergeAsyncDetails{} + p.GetMergeAction() + p = nil + p.GetMergeAction() +} + +func TestPullRequestMergeAsyncDetails_GetMergeMethod(tt *testing.T) { + tt.Parallel() + var zeroValue string + p := &PullRequestMergeAsyncDetails{MergeMethod: &zeroValue} + p.GetMergeMethod() + p = &PullRequestMergeAsyncDetails{} + p.GetMergeMethod() + p = nil + p.GetMergeMethod() +} + +func TestPullRequestMergeAsyncDetails_GetMessage(tt *testing.T) { + tt.Parallel() + var zeroValue string + p := &PullRequestMergeAsyncDetails{Message: &zeroValue} + p.GetMessage() + p = &PullRequestMergeAsyncDetails{} + p.GetMessage() + p = nil + p.GetMessage() +} + +func TestPullRequestMergeAsyncDetails_GetSHA(tt *testing.T) { + tt.Parallel() + var zeroValue string + p := &PullRequestMergeAsyncDetails{SHA: &zeroValue} + p.GetSHA() + p = &PullRequestMergeAsyncDetails{} + p.GetSHA() + p = nil + p.GetSHA() +} + +func TestPullRequestMergeAsyncDetails_GetUUID(tt *testing.T) { + tt.Parallel() + var zeroValue string + p := &PullRequestMergeAsyncDetails{UUID: &zeroValue} + p.GetUUID() + p = &PullRequestMergeAsyncDetails{} + p.GetUUID() + p = nil + p.GetUUID() +} + +func TestPullRequestMergeAsyncRequest_GetCommitMessage(tt *testing.T) { + tt.Parallel() + var zeroValue string + p := &PullRequestMergeAsyncRequest{CommitMessage: &zeroValue} + p.GetCommitMessage() + p = &PullRequestMergeAsyncRequest{} + p.GetCommitMessage() + p = nil + p.GetCommitMessage() +} + +func TestPullRequestMergeAsyncRequest_GetCommitTitle(tt *testing.T) { + tt.Parallel() + var zeroValue string + p := &PullRequestMergeAsyncRequest{CommitTitle: &zeroValue} + p.GetCommitTitle() + p = &PullRequestMergeAsyncRequest{} + p.GetCommitTitle() + p = nil + p.GetCommitTitle() +} + +func TestPullRequestMergeAsyncRequest_GetMergeAction(tt *testing.T) { + tt.Parallel() + var zeroValue string + p := &PullRequestMergeAsyncRequest{MergeAction: &zeroValue} + p.GetMergeAction() + p = &PullRequestMergeAsyncRequest{} + p.GetMergeAction() + p = nil + p.GetMergeAction() +} + +func TestPullRequestMergeAsyncRequest_GetMergeMethod(tt *testing.T) { + tt.Parallel() + var zeroValue string + p := &PullRequestMergeAsyncRequest{MergeMethod: &zeroValue} + p.GetMergeMethod() + p = &PullRequestMergeAsyncRequest{} + p.GetMergeMethod() + p = nil + p.GetMergeMethod() +} + +func TestPullRequestMergeAsyncRequest_GetSHA(tt *testing.T) { + tt.Parallel() + var zeroValue string + p := &PullRequestMergeAsyncRequest{SHA: &zeroValue} + p.GetSHA() + p = &PullRequestMergeAsyncRequest{} + p.GetSHA() + p = nil + p.GetSHA() +} + +func TestPullRequestMergeAsyncResult_GetDetails(tt *testing.T) { + tt.Parallel() + p := &PullRequestMergeAsyncResult{} + p.GetDetails() + p = nil + p.GetDetails() +} + +func TestPullRequestMergeAsyncResult_GetStatus(tt *testing.T) { + tt.Parallel() + var zeroValue string + p := &PullRequestMergeAsyncResult{Status: &zeroValue} + p.GetStatus() + p = &PullRequestMergeAsyncResult{} + p.GetStatus() + p = nil + p.GetStatus() +} + func TestPullRequestMergeResult_GetMerged(tt *testing.T) { tt.Parallel() var zeroValue bool diff --git a/github/pulls.go b/github/pulls.go index 78b60bdf574..d5b616b4bac 100644 --- a/github/pulls.go +++ b/github/pulls.go @@ -514,8 +514,8 @@ type pullRequestMergeRequest struct { SHA string `json:"sha,omitempty"` } -// MergeAsyncRequest represents a request to merge a pull request asynchronously. -type MergeAsyncRequest struct { +// PullRequestMergeAsyncRequest represents a request to merge a pull request asynchronously. +type PullRequestMergeAsyncRequest struct { // MergeMethod is the merge method: merge, squash, or rebase. Not supported on merge_queue actions. MergeMethod *string `json:"merge_method,omitempty"` // MergeAction is how to merge: default, direct_merge, or merge_queue. @@ -528,14 +528,14 @@ type MergeAsyncRequest struct { SHA *string `json:"sha,omitempty"` } -// AsyncMergeResult represents the current state of an asynchronous merge request. -type AsyncMergeResult struct { - Status *string `json:"status,omitempty"` +// PullRequestMergeAsyncResult represents the current state of an asynchronous merge request. +type PullRequestMergeAsyncResult struct { + Status *string `json:"status,omitempty"` Details *PullRequestMergeAsyncDetails `json:"details,omitempty"` } -// AsyncMergeDetails represents details for the current state of an AsyncMergeResult. -type AsyncMergeDetails struct { +// PullRequestMergeAsyncDetails represents details for the current state of a PullRequestMergeAsyncResult. +type PullRequestMergeAsyncDetails struct { Message *string `json:"message,omitempty"` UUID *string `json:"uuid,omitempty"` MergeMethod *string `json:"merge_method,omitempty"` @@ -584,8 +584,8 @@ func (s *PullRequestsService) Merge(ctx context.Context, owner, repo string, num // method for merging stacked pull requests; the legacy Merge method cannot be // used for stacks. // -// A pending response includes a UUID in AsyncMergeResult.Details.UUID that -// must be passed to GetMergeAsyncResult to poll for the outcome. +// A pending response includes a UUID in PullRequestMergeAsyncResult.Details.UUID +// that must be passed to GetMergeAsyncResult to poll for the outcome. // // GitHub API docs: https://docs.github.com/rest/pulls/pulls?apiVersion=2022-11-28#merge-a-pull-request-asynchronously // @@ -598,7 +598,7 @@ func (s *PullRequestsService) MergeAsync(ctx context.Context, owner, repo string return nil, nil, err } - var result *AsyncMergeResult + var result *PullRequestMergeAsyncResult resp, err := s.client.Do(req, &result) if err != nil { return nil, resp, err @@ -615,7 +615,7 @@ func (s *PullRequestsService) MergeAsync(ctx context.Context, owner, repo string // GitHub API docs: https://docs.github.com/rest/pulls/pulls?apiVersion=2022-11-28#get-the-result-of-an-asynchronous-merge // //meta:operation GET /repos/{owner}/{repo}/pulls/{pull_number}/merge-async/{uuid} -func (s *PullRequestsService) GetMergeAsyncResult(ctx context.Context, owner, repo string, number int, uuid string) (*AsyncMergeResult, *Response, error) { +func (s *PullRequestsService) GetMergeAsyncResult(ctx context.Context, owner, repo string, number int, uuid string) (*PullRequestMergeAsyncResult, *Response, error) { u := fmt.Sprintf("repos/%v/%v/pulls/%v/merge-async/%v", owner, repo, number, uuid) req, err := s.client.NewRequest(ctx, "GET", u, nil) @@ -623,7 +623,7 @@ func (s *PullRequestsService) GetMergeAsyncResult(ctx context.Context, owner, re return nil, nil, err } - var result *AsyncMergeResult + var result *PullRequestMergeAsyncResult resp, err := s.client.Do(req, &result) if err != nil { return nil, resp, err diff --git a/github/pulls_test.go b/github/pulls_test.go index f6d4c940b25..52611ef09bf 100644 --- a/github/pulls_test.go +++ b/github/pulls_test.go @@ -760,7 +760,7 @@ func TestPullRequestsService_MergeAsync(t *testing.T) { t.Parallel() client, mux, _ := setup(t) - request := MergeAsyncRequest{ + request := PullRequestMergeAsyncRequest{ MergeMethod: Ptr("squash"), MergeAction: Ptr("default"), } @@ -787,9 +787,9 @@ func TestPullRequestsService_MergeAsync(t *testing.T) { t.Errorf("PullRequests.MergeAsync returned error: %v", err) } - want := &AsyncMergeResult{ + want := &PullRequestMergeAsyncResult{ Status: Ptr("pending"), - Details: &AsyncMergeDetails{ + Details: &PullRequestMergeAsyncDetails{ Message: Ptr("Merge request enqueued."), UUID: Ptr("630b9d5e-3f2a-4f7e-8b0c-2d5f9a8c1e42"), MergeMethod: Ptr("squash"), @@ -839,9 +839,9 @@ func TestPullRequestsService_GetMergeAsyncResult(t *testing.T) { t.Errorf("PullRequests.GetMergeAsyncResult returned error: %v", err) } - want := &AsyncMergeResult{ + want := &PullRequestMergeAsyncResult{ Status: Ptr("merged"), - Details: &AsyncMergeDetails{ + Details: &PullRequestMergeAsyncDetails{ Message: Ptr("Pull request was merged."), SHA: Ptr("6dcb09b5b57875f334f61aebed695e2e4193db5e"), },