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

Function findStaleDraftReleases

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

Source from the content-addressed store, hash-verified

402
403/** Find draft releases for a package (by name prefix) that are older than the current version */
404export 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.

Callers 1

finalizeSupersededDraftsFunction · 0.85

Calls 3

runArgsAsyncFunction · 0.90
isGhAvailableFunction · 0.85
findReleaseByTagFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…