Skip to content

Commit 0a76e42

Browse files
authored
Fix: error handling (#449)
- refactored the big `if/else` to exit early - added error handling for different errors while creating a release
1 parent 3989e4b commit 0a76e42

File tree

1 file changed

+55
-43
lines changed

1 file changed

+55
-43
lines changed

src/github.ts

+55-43
Original file line numberDiff line numberDiff line change
@@ -281,53 +281,65 @@ export const release = async (
281281
});
282282
return release.data;
283283
} catch (error) {
284-
if (error.status === 404) {
285-
const tag_name = tag;
286-
const name = config.input_name || tag;
287-
const body = releaseBody(config);
288-
const draft = config.input_draft;
289-
const prerelease = config.input_prerelease;
290-
const target_commitish = config.input_target_commitish;
291-
const make_latest = config.input_make_latest;
292-
let commitMessage: string = "";
293-
if (target_commitish) {
294-
commitMessage = ` using commit "${target_commitish}"`;
295-
}
296-
console.log(
297-
`👩‍🏭 Creating new GitHub release for tag ${tag_name}${commitMessage}...`
298-
);
299-
try {
300-
let release = await releaser.createRelease({
301-
owner,
302-
repo,
303-
tag_name,
304-
name,
305-
body,
306-
draft,
307-
prerelease,
308-
target_commitish,
309-
discussion_category_name,
310-
generate_release_notes,
311-
make_latest,
312-
});
313-
return release.data;
314-
} catch (error) {
315-
// presume a race with competing metrix runs
316-
console.log(error.response.data);
317-
console.log(
318-
`⚠️ GitHub release failed with status: ${
319-
error.status
320-
}\n${JSON.stringify(error.response.data.errors)}\nretrying... (${
321-
maxRetries - 1
322-
} retries remaining)`
323-
);
324-
return release(config, releaser, maxRetries - 1);
325-
}
326-
} else {
284+
if (error.status !== 404) {
327285
console.log(
328286
`⚠️ Unexpected error fetching GitHub release for tag ${config.github_ref}: ${error}`
329287
);
330288
throw error;
331289
}
290+
291+
const tag_name = tag;
292+
const name = config.input_name || tag;
293+
const body = releaseBody(config);
294+
const draft = config.input_draft;
295+
const prerelease = config.input_prerelease;
296+
const target_commitish = config.input_target_commitish;
297+
const make_latest = config.input_make_latest;
298+
let commitMessage: string = "";
299+
if (target_commitish) {
300+
commitMessage = ` using commit "${target_commitish}"`;
301+
}
302+
console.log(
303+
`👩‍🏭 Creating new GitHub release for tag ${tag_name}${commitMessage}...`
304+
);
305+
try {
306+
let release = await releaser.createRelease({
307+
owner,
308+
repo,
309+
tag_name,
310+
name,
311+
body,
312+
draft,
313+
prerelease,
314+
target_commitish,
315+
discussion_category_name,
316+
generate_release_notes,
317+
make_latest,
318+
});
319+
return release.data;
320+
} catch (error) {
321+
// presume a race with competing matrix runs
322+
console.log(`⚠️ GitHub release failed with status: ${error.status}`);
323+
console.log(`${JSON.stringify(error.response.data)}`);
324+
325+
switch (error.status) {
326+
case 403:
327+
console.log(
328+
"Skip retry — your GitHub token/PAT does not have the required permission to create a release"
329+
);
330+
throw error;
331+
332+
case 404:
333+
console.log("Skip retry - discussion category mismatch");
334+
throw error;
335+
336+
case 422:
337+
console.log("Skip retry - validation failed");
338+
throw error;
339+
}
340+
341+
console.log(`retrying... (${maxRetries - 1} retries remaining)`);
342+
return release(config, releaser, maxRetries - 1);
343+
}
332344
}
333345
};

0 commit comments

Comments
 (0)