From 8b7c9633c7e7d519db0bcadbde7820139eba7311 Mon Sep 17 00:00:00 2001 From: Omer Mishania Date: Tue, 18 Nov 2025 21:31:49 +0200 Subject: [PATCH] fix: handle GitHub API limit when generating release notes - Added error handling for cases where the GitHub API exceeds the 10,000 commit limit while generating release notes. - Implemented a warning message to inform users when release notes cannot be generated due to this limit, allowing the process to continue without them. - Ensured that other errors are re-thrown for proper handling. --- src/github.ts | 56 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/src/github.ts b/src/github.ts index 117f5b3..f5d19b0 100644 --- a/src/github.ts +++ b/src/github.ts @@ -103,12 +103,28 @@ export class GitHubReleaser implements Releaser { params.make_latest = undefined; } if (params.generate_release_notes) { - const releaseNotes = await this.getReleaseNotes(params); - params.generate_release_notes = false; - if (params.body) { - params.body = `${params.body}\n\n${releaseNotes.data.body}`; - } else { - params.body = releaseNotes.data.body; + try { + const releaseNotes = await this.getReleaseNotes(params); + params.generate_release_notes = false; + if (params.body) { + params.body = `${params.body}\n\n${releaseNotes.data.body}`; + } else { + params.body = releaseNotes.data.body; + } + } catch (error: any) { + // Handle GitHub API error when there are more than 10,000 commits + const status = error?.status || error?.response?.status; + const message = error?.message || error?.response?.data?.message || ''; + if (status === 422 && (message.includes('10000') || message.includes('10000 results'))) { + console.warn( + `⚠️ Unable to generate release notes: GitHub API limit exceeded (more than 10,000 commits since last release). Proceeding without generated release notes.`, + ); + params.generate_release_notes = false; + // Continue with existing body or leave it empty + } else { + // Re-throw other errors + throw error; + } } } params.body = params.body ? this.truncateReleaseNotes(params.body) : undefined; @@ -136,12 +152,28 @@ export class GitHubReleaser implements Releaser { params.make_latest = undefined; } if (params.generate_release_notes) { - const releaseNotes = await this.getReleaseNotes(params); - params.generate_release_notes = false; - if (params.body) { - params.body = `${params.body}\n\n${releaseNotes.data.body}`; - } else { - params.body = releaseNotes.data.body; + try { + const releaseNotes = await this.getReleaseNotes(params); + params.generate_release_notes = false; + if (params.body) { + params.body = `${params.body}\n\n${releaseNotes.data.body}`; + } else { + params.body = releaseNotes.data.body; + } + } catch (error: any) { + // Handle GitHub API error when there are more than 10,000 commits + const status = error?.status || error?.response?.status; + const message = error?.message || error?.response?.data?.message || ''; + if (status === 422 && (message.includes('10000') || message.includes('10000 results'))) { + console.warn( + `⚠️ Unable to generate release notes: GitHub API limit exceeded (more than 10,000 commits since last release). Proceeding without generated release notes.`, + ); + params.generate_release_notes = false; + // Continue with existing body or leave it empty + } else { + // Re-throw other errors + throw error; + } } } params.body = params.body ? this.truncateReleaseNotes(params.body) : undefined;