@ucdjs/release-scripts 0.1.0-beta.45 → 0.1.0-beta.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -90,6 +90,10 @@ interface PackageRelease {
90
90
  * Whether this package has direct changes (vs being updated due to dependency changes)
91
91
  */
92
92
  hasDirectChanges: boolean;
93
+ /**
94
+ * Why/how this release entry exists.
95
+ */
96
+ changeKind: "auto" | "manual" | "as-is" | "dependent";
93
97
  }
94
98
  //#endregion
95
99
  //#region src/types.d.ts
package/dist/index.mjs CHANGED
@@ -1059,7 +1059,10 @@ async function selectPackagePrompt(packages) {
1059
1059
  if (!response.selectedPackages || response.selectedPackages.length === 0) return [];
1060
1060
  return response.selectedPackages;
1061
1061
  }
1062
- async function selectVersionPrompt(workspaceRoot, pkg, currentVersion, suggestedVersion) {
1062
+ async function selectVersionPrompt(workspaceRoot, pkg, currentVersion, suggestedVersion, options) {
1063
+ const defaultChoice = options?.defaultChoice ?? "auto";
1064
+ const suggestedSuffix = options?.suggestedHint ? farver.dim(` (${options.suggestedHint})`) : "";
1065
+ const initial = defaultChoice === "skip" ? 0 : defaultChoice === "suggested" ? 4 : defaultChoice === "as-is" ? 5 : suggestedVersion === currentVersion ? 0 : 4;
1063
1066
  const answers = await prompts([{
1064
1067
  type: "autocomplete",
1065
1068
  name: "version",
@@ -1083,7 +1086,7 @@ async function selectVersionPrompt(workspaceRoot, pkg, currentVersion, suggested
1083
1086
  },
1084
1087
  {
1085
1088
  value: "suggested",
1086
- title: `suggested ${farver.bold(suggestedVersion)}`
1089
+ title: `suggested ${farver.bold(suggestedVersion)}${suggestedSuffix}`
1087
1090
  },
1088
1091
  {
1089
1092
  value: "as-is",
@@ -1094,7 +1097,7 @@ async function selectVersionPrompt(workspaceRoot, pkg, currentVersion, suggested
1094
1097
  title: "custom"
1095
1098
  }
1096
1099
  ],
1097
- initial: suggestedVersion === currentVersion ? 0 : 4
1100
+ initial
1098
1101
  }, {
1099
1102
  type: (prev) => prev === "custom" ? "text" : null,
1100
1103
  name: "custom",
@@ -1415,7 +1418,8 @@ function createVersionUpdate(pkg, bump, hasDirectChanges) {
1415
1418
  currentVersion: pkg.version,
1416
1419
  newVersion,
1417
1420
  bumpType: bump,
1418
- hasDirectChanges
1421
+ hasDirectChanges,
1422
+ changeKind: "dependent"
1419
1423
  };
1420
1424
  }
1421
1425
  function determineBumpType(commit) {
@@ -1637,40 +1641,50 @@ async function calculateVersionUpdates({ workspacePackages, packageCommits, work
1637
1641
  logger.section(`📝 Commits for ${farver.cyan(pkg.name)}`);
1638
1642
  formatCommitsForDisplay(allCommitsForPackage).split("\n").forEach((line) => logger.item(line));
1639
1643
  logger.emptyLine();
1640
- const selectedVersion = await selectVersionPrompt(workspaceRoot, pkg, pkg.version, newVersion);
1644
+ const selectedVersion = await selectVersionPrompt(workspaceRoot, pkg, pkg.version, newVersion, {
1645
+ defaultChoice: override ? "suggested" : "auto",
1646
+ suggestedHint: override ? "from override" : void 0
1647
+ });
1641
1648
  if (selectedVersion === null) continue;
1642
1649
  const userBump = calculateBumpType(pkg.version, selectedVersion);
1643
1650
  finalBumpType = userBump;
1644
1651
  if (selectedVersion === pkg.version) {
1645
1652
  excludedPackages.add(pkgName);
1646
1653
  if (determinedBump !== "none") {
1647
- newOverrides[pkgName] = {
1654
+ const nextOverride = {
1648
1655
  type: "none",
1649
1656
  version: pkg.version
1650
1657
  };
1651
- logger.info(`Version override recorded for ${pkgName}: ${determinedBump} none`);
1658
+ if (!override || override.type !== nextOverride.type || override.version !== nextOverride.version) {
1659
+ newOverrides[pkgName] = nextOverride;
1660
+ logger.info(`Override set for ${pkgName}: suggested as-is (${pkg.version}) from auto ${determinedBump}`);
1661
+ }
1652
1662
  } else if (newOverrides[pkgName]) {
1653
1663
  delete newOverrides[pkgName];
1654
- logger.info(`Version override removed for ${pkgName}.`);
1664
+ logger.info(`Override cleared for ${pkgName}.`);
1655
1665
  }
1656
1666
  versionUpdates.push({
1657
1667
  package: pkg,
1658
1668
  currentVersion: pkg.version,
1659
1669
  newVersion: pkg.version,
1660
1670
  bumpType: "none",
1661
- hasDirectChanges: allCommitsForPackage.length > 0
1671
+ hasDirectChanges: allCommitsForPackage.length > 0,
1672
+ changeKind: "as-is"
1662
1673
  });
1663
1674
  continue;
1664
1675
  }
1665
1676
  if (bumpRanks[userBump] < bumpRanks[determinedBump]) {
1666
- newOverrides[pkgName] = {
1677
+ const nextOverride = {
1667
1678
  type: userBump,
1668
1679
  version: selectedVersion
1669
1680
  };
1670
- logger.info(`Version override recorded for ${pkgName}: ${determinedBump} ${userBump}`);
1681
+ if (!override || override.type !== nextOverride.type || override.version !== nextOverride.version) {
1682
+ newOverrides[pkgName] = nextOverride;
1683
+ logger.info(`Override set for ${pkgName}: suggested ${userBump} (${selectedVersion}) from auto ${determinedBump}`);
1684
+ }
1671
1685
  } else if (newOverrides[pkgName] && bumpRanks[userBump] >= bumpRanks[determinedBump]) {
1672
1686
  delete newOverrides[pkgName];
1673
- logger.info(`Version override removed for ${pkgName}.`);
1687
+ logger.info(`Override cleared for ${pkgName}.`);
1674
1688
  }
1675
1689
  newVersion = selectedVersion;
1676
1690
  }
@@ -1679,7 +1693,8 @@ async function calculateVersionUpdates({ workspacePackages, packageCommits, work
1679
1693
  currentVersion: pkg.version,
1680
1694
  newVersion,
1681
1695
  bumpType: finalBumpType,
1682
- hasDirectChanges: allCommitsForPackage.length > 0
1696
+ hasDirectChanges: allCommitsForPackage.length > 0,
1697
+ changeKind: canPrompt ? "manual" : "auto"
1683
1698
  });
1684
1699
  }
1685
1700
  if (!isCI && showPrompt) for (const pkg of workspacePackages) {
@@ -1699,7 +1714,8 @@ async function calculateVersionUpdates({ workspacePackages, packageCommits, work
1699
1714
  currentVersion: pkg.version,
1700
1715
  newVersion,
1701
1716
  bumpType,
1702
- hasDirectChanges: false
1717
+ hasDirectChanges: false,
1718
+ changeKind: "manual"
1703
1719
  });
1704
1720
  }
1705
1721
  return {
@@ -1896,8 +1912,9 @@ async function prepareWorkflow(options) {
1896
1912
  });
1897
1913
  if (!updatesResult.ok) exitWithError("Failed to calculate package updates.", void 0, updatesResult.error);
1898
1914
  const { allUpdates, applyUpdates, overrides: newOverrides } = updatesResult.value;
1899
- if (Object.keys(newOverrides).length > 0) {
1900
- logger.info("Writing version overrides file...");
1915
+ const hasOverrideChanges = JSON.stringify(existingOverrides) !== JSON.stringify(newOverrides);
1916
+ if (Object.keys(newOverrides).length > 0 && hasOverrideChanges) {
1917
+ logger.step("Writing version overrides file...");
1901
1918
  try {
1902
1919
  await mkdir(join(options.workspaceRoot, ".github"), { recursive: true });
1903
1920
  await writeFile(overridesPath, JSON.stringify(newOverrides, null, 2), "utf-8");
@@ -1905,7 +1922,7 @@ async function prepareWorkflow(options) {
1905
1922
  } catch (e) {
1906
1923
  logger.error("Failed to write version overrides file:", e);
1907
1924
  }
1908
- }
1925
+ } else if (Object.keys(newOverrides).length > 0) logger.step("Version overrides unchanged. Skipping write.");
1909
1926
  if (Object.keys(newOverrides).length === 0 && Object.keys(existingOverrides).length > 0) {
1910
1927
  let shouldRemoveOverrides = false;
1911
1928
  for (const update of allUpdates) {
@@ -1931,7 +1948,7 @@ async function prepareWorkflow(options) {
1931
1948
  logger.section("🔄 Version Updates");
1932
1949
  logger.item(`Updating ${allUpdates.length} packages (including dependents)`);
1933
1950
  for (const update of allUpdates) {
1934
- const suffix = update.currentVersion === update.newVersion ? farver.dim(" (as-is)") : "";
1951
+ const suffix = update.changeKind === "as-is" ? farver.dim(" (as-is)") : "";
1935
1952
  logger.item(`${update.package.name}: ${update.currentVersion} → ${update.newVersion}${suffix}`);
1936
1953
  }
1937
1954
  await applyUpdates();
@@ -1983,6 +2000,8 @@ async function prepareWorkflow(options) {
1983
2000
  if (!prResult.ok) exitWithError("Failed to sync release pull request.", void 0, prResult.error);
1984
2001
  if (prResult.value.pullRequest) {
1985
2002
  logger.item("No updates needed, PR is already up to date");
2003
+ const checkoutResult = await checkoutBranch(options.branch.default, options.workspaceRoot);
2004
+ if (!checkoutResult.ok) exitWithError(`Failed to checkout branch: ${options.branch.default}`, void 0, checkoutResult.error);
1986
2005
  return {
1987
2006
  updates: allUpdates,
1988
2007
  prUrl: prResult.value.pullRequest.html_url,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ucdjs/release-scripts",
3
- "version": "0.1.0-beta.45",
3
+ "version": "0.1.0-beta.46",
4
4
  "description": "@ucdjs release scripts",
5
5
  "type": "module",
6
6
  "license": "MIT",