From d0df07900d81eb4aae5f2922fbbe1287e88c52a8 Mon Sep 17 00:00:00 2001 From: Tim Paine <3105306+timkpaine@users.noreply.github.com> Date: Tue, 11 Aug 2026 17:32:21 -0400 Subject: [PATCH] Log GitHub merge rejections Signed-off-by: Tim Paine <3105306+timkpaine@users.noreply.github.com> --- src/github.ts | 5 ++++- tests/github.test.ts | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/github.ts b/src/github.ts index 5622d3c..53f0693 100644 --- a/src/github.ts +++ b/src/github.ts @@ -150,7 +150,10 @@ export class GitHubClient { ); return result.merged; } catch (error) { - if (error instanceof GitHubError && (error.status === 405 || error.status === 409)) return false; + if (error instanceof GitHubError && (error.status === 405 || error.status === 409)) { + console.error(error.message); + return false; + } throw error; } } diff --git a/tests/github.test.ts b/tests/github.test.ts index 939ffa5..582ee3e 100644 --- a/tests/github.test.ts +++ b/tests/github.test.ts @@ -3,6 +3,7 @@ import { afterEach, describe, expect, test, vi } from "vitest"; import { GitHubClient } from "../src/github"; afterEach(() => { + vi.restoreAllMocks(); vi.unstubAllGlobals(); }); @@ -39,10 +40,14 @@ describe("GitHub client", () => { }); test("returns false when GitHub blocks a merge", async () => { + const errorMock = vi.spyOn(console, "error").mockImplementation(() => undefined); vi.stubGlobal("fetch", vi.fn().mockResolvedValue(Response.json({ message: "Merge blocked" }, { status: 405 }))); const client = new GitHubClient("token", "owner/repository"); expect(await client.merge(12, "abc123", "squash")).toBe(false); + expect(errorMock).toHaveBeenCalledWith( + "PUT /repos/owner/repository/pulls/12/merge: GitHub returned 405: Merge blocked", + ); }); test("pins a successful merge to the checked head commit", async () => {