( packageName: string, newVersion: string, rootDir: string, )
| 439 | * Updates their metadata targets to "skipped" and marks them as non-draft. |
| 440 | */ |
| 441 | export 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 | } |
no test coverage detected
searching dependent graphs…