MCPcopy Create free account
hub / github.com/dmno-dev/bumpy / finalizeSupersededDrafts

Function finalizeSupersededDrafts

packages/bumpy/src/core/github-release.ts:441–478  ·  view source on GitHub ↗
(
  packageName: string,
  newVersion: string,
  rootDir: string,
)

Source from the content-addressed store, hash-verified

439 * Updates their metadata targets to "skipped" and marks them as non-draft.
440 */
441export async function finalizeSupersededDrafts(
442 packageName: string,
443 newVersion: string,
444 rootDir: string,
445): Promise<void> {
446 const staleDrafts = await findStaleDraftReleases(packageName, newVersion, rootDir);
447
448 for (const draft of staleDrafts) {
449 log.dim(` Finalizing draft release ${draft.tag} — superseded by ${newVersion}`);
450
451 if (draft.metadata) {
452 // Update all non-success targets to "skipped"
453 for (const [targetName, state] of Object.entries(draft.metadata.targets)) {
454 if (state.status !== 'success') {
455 draft.metadata.targets[targetName] = {
456 status: 'skipped',
457 reason: 'superseded',
458 supersededBy: newVersion,
459 };
460 }
461 }
462 const updatedBody = updateReleaseBodyStatus(draft.body, draft.metadata);
463 try {
464 await updateReleaseBody(draft.tag, updatedBody, rootDir);
465 await finalizeRelease(draft.tag, rootDir);
466 } catch (err) {
467 log.warn(` Failed to finalize superseded release ${draft.tag}: ${err instanceof Error ? err.message : err}`);
468 }
469 } else {
470 // No metadata — just finalize the draft as-is
471 try {
472 await finalizeRelease(draft.tag, rootDir);
473 } catch (err) {
474 log.warn(` Failed to finalize superseded release ${draft.tag}: ${err instanceof Error ? err.message : err}`);
475 }
476 }
477 }
478}

Callers 1

runPublishFlowFunction · 0.90

Calls 4

findStaleDraftReleasesFunction · 0.85
updateReleaseBodyStatusFunction · 0.85
updateReleaseBodyFunction · 0.85
finalizeReleaseFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…