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.
This commit is contained in:
Omer Mishania 2025-11-18 21:31:49 +02:00
parent ba1b4c0361
commit 8b7c9633c7

View file

@ -103,12 +103,28 @@ export class GitHubReleaser implements Releaser {
params.make_latest = undefined; params.make_latest = undefined;
} }
if (params.generate_release_notes) { if (params.generate_release_notes) {
const releaseNotes = await this.getReleaseNotes(params); try {
params.generate_release_notes = false; const releaseNotes = await this.getReleaseNotes(params);
if (params.body) { params.generate_release_notes = false;
params.body = `${params.body}\n\n${releaseNotes.data.body}`; if (params.body) {
} else { params.body = `${params.body}\n\n${releaseNotes.data.body}`;
params.body = 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; params.body = params.body ? this.truncateReleaseNotes(params.body) : undefined;
@ -136,12 +152,28 @@ export class GitHubReleaser implements Releaser {
params.make_latest = undefined; params.make_latest = undefined;
} }
if (params.generate_release_notes) { if (params.generate_release_notes) {
const releaseNotes = await this.getReleaseNotes(params); try {
params.generate_release_notes = false; const releaseNotes = await this.getReleaseNotes(params);
if (params.body) { params.generate_release_notes = false;
params.body = `${params.body}\n\n${releaseNotes.data.body}`; if (params.body) {
} else { params.body = `${params.body}\n\n${releaseNotes.data.body}`;
params.body = 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; params.body = params.body ? this.truncateReleaseNotes(params.body) : undefined;