( packageName: string, currentVersion: string, rootDir: string, )
| 402 | |
| 403 | /** Find draft releases for a package (by name prefix) that are older than the current version */ |
| 404 | export async function findStaleDraftReleases( |
| 405 | packageName: string, |
| 406 | currentVersion: string, |
| 407 | rootDir: string, |
| 408 | ): Promise<Array<{ tag: string; body: string; metadata: ReleaseMetadata | null }>> { |
| 409 | if (!isGhAvailable()) return []; |
| 410 | |
| 411 | const currentTag = `${packageName}@${currentVersion}`; |
| 412 | try { |
| 413 | const json = await runArgsAsync(['gh', 'release', 'list', '--json', 'tagName,isDraft,name', '--limit', '20'], { |
| 414 | cwd: rootDir, |
| 415 | }); |
| 416 | const releases: Array<{ tagName: string; isDraft: boolean; name: string }> = JSON.parse(json); |
| 417 | |
| 418 | const stale: Array<{ tag: string; body: string; metadata: ReleaseMetadata | null }> = []; |
| 419 | for (const r of releases) { |
| 420 | // Only look at drafts for the same package with a different version |
| 421 | if (!r.isDraft) continue; |
| 422 | if (!r.tagName.startsWith(`${packageName}@`)) continue; |
| 423 | if (r.tagName === currentTag) continue; |
| 424 | |
| 425 | // Fetch full body to check metadata |
| 426 | const info = await findReleaseByTag(r.tagName, rootDir); |
| 427 | if (info) { |
| 428 | stale.push({ tag: r.tagName, body: info.body, metadata: info.metadata }); |
| 429 | } |
| 430 | } |
| 431 | return stale; |
| 432 | } catch { |
| 433 | return []; |
| 434 | } |
| 435 | } |
| 436 | |
| 437 | /** |
| 438 | * Finalize stale draft releases as superseded. |
no test coverage detected
searching dependent graphs…