MCPcopy
hub / github.com/softprops/action-gh-release / finalizeRelease

Function finalizeRelease

src/github.ts:624–682  ·  view source on GitHub ↗
(
  config: Config,
  releaser: Releaser,
  release: Release,
  releaseWasCreated: boolean = false,
  maxRetries: number = 3,
)

Source from the content-addressed store, hash-verified

622 * @param maxRetries - The maximum number of attempts to finalize the release
623 */
624export const finalizeRelease = async (
625 config: Config,
626 releaser: Releaser,
627 release: Release,
628 releaseWasCreated: boolean = false,
629 maxRetries: number = 3,
630): Promise<Release> => {
631 if (config.input_draft === true || release.draft === false) {
632 return release;
633 }
634
635 if (maxRetries <= 0) {
636 console.log(`❌ Too many retries. Aborting...`);
637 throw new Error('Too many retries.');
638 }
639
640 const [owner, repo] = config.github_repository.split('/');
641 try {
642 const { data } = await releaser.finalizeRelease({
643 owner,
644 repo,
645 release_id: release.id,
646 make_latest: config.input_make_latest,
647 discussion_category_name: config.input_discussion_category_name,
648 });
649
650 return data;
651 } catch (error) {
652 console.warn(`error finalizing release: ${error}`);
653
654 if (releaseWasCreated && release.draft && isTagCreationBlockedError(error)) {
655 let deleted = false;
656
657 try {
658 console.log(
659 `🧹 Deleting draft release ${release.id} for tag ${release.tag_name} because tag creation is blocked by repository rules...`,
660 );
661 await releaser.deleteRelease({
662 owner,
663 repo,
664 release_id: release.id,
665 });
666 deleted = true;
667 } catch (cleanupError) {
668 console.warn(`error deleting orphan draft release ${release.id}: ${cleanupError}`);
669 }
670
671 const cleanupResult = deleted
672 ? `Deleted draft release ${release.id} to avoid leaving an orphaned draft release.`
673 : `Failed to delete draft release ${release.id}; manual cleanup may still be required.`;
674 throw new Error(
675 `Tag creation for ${release.tag_name} is blocked by repository rules. ${cleanupResult}`,
676 );
677 }
678
679 console.log(`retrying... (${maxRetries - 1} retries remaining)`);
680 return finalizeRelease(config, releaser, release, releaseWasCreated, maxRetries - 1);
681 }

Callers 2

runFunction · 0.90
github.test.tsFile · 0.90

Calls 3

finalizeReleaseMethod · 0.65
deleteReleaseMethod · 0.65

Tested by

no test coverage detected