@ucdjs/release-scripts 0.1.0-beta.57 → 0.1.0-beta.59

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.
Files changed (2) hide show
  1. package/dist/index.mjs +108 -84
  2. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -1,60 +1,16 @@
1
1
  import { t as Eta } from "./eta-DAZlmVBQ.mjs";
2
- import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
3
- import { join, relative } from "node:path";
4
- import { getCommits, groupByType } from "commit-parser";
5
2
  import process from "node:process";
6
3
  import readline from "node:readline";
7
4
  import farver from "farver";
8
5
  import mri from "mri";
9
6
  import { exec } from "tinyexec";
7
+ import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
8
+ import { join, relative } from "node:path";
9
+ import { getCommits, groupByType } from "commit-parser";
10
10
  import { dedent } from "@luxass/utils";
11
11
  import semver, { gt } from "semver";
12
12
  import prompts from "prompts";
13
13
 
14
- //#region src/operations/changelog-format.ts
15
- function formatCommitLine({ commit, owner, repo, authors }) {
16
- const commitUrl = `https://github.com/${owner}/${repo}/commit/${commit.hash}`;
17
- let line = `${commit.description}`;
18
- const references = commit.references ?? [];
19
- for (const ref of references) {
20
- if (!ref.value) continue;
21
- const number = Number.parseInt(ref.value.replace(/^#/, ""), 10);
22
- if (Number.isNaN(number)) continue;
23
- if (ref.type === "issue") {
24
- line += ` ([Issue ${ref.value}](https://github.com/${owner}/${repo}/issues/${number}))`;
25
- continue;
26
- }
27
- line += ` ([PR ${ref.value}](https://github.com/${owner}/${repo}/pull/${number}))`;
28
- }
29
- line += ` ([${commit.shortHash}](${commitUrl}))`;
30
- if (authors.length > 0) {
31
- const authorList = authors.map((author) => author.login ? `[@${author.login}](https://github.com/${author.login})` : author.name).join(", ");
32
- line += ` (by ${authorList})`;
33
- }
34
- return line;
35
- }
36
- function buildTemplateGroups(options) {
37
- const { commits, owner, repo, types, commitAuthors } = options;
38
- const grouped = groupByType(commits, {
39
- includeNonConventional: false,
40
- mergeKeys: Object.fromEntries(Object.entries(types).map(([key, value]) => [key, value.types ?? [key]]))
41
- });
42
- return Object.entries(types).map(([key, value]) => {
43
- const formattedCommits = (grouped.get(key) ?? []).map((commit) => ({ line: formatCommitLine({
44
- commit,
45
- owner,
46
- repo,
47
- authors: commitAuthors.get(commit.hash) ?? []
48
- }) }));
49
- return {
50
- name: key,
51
- title: value.title,
52
- commits: formattedCommits
53
- };
54
- });
55
- }
56
-
57
- //#endregion
58
14
  //#region src/shared/utils.ts
59
15
  const args = mri(process.argv.slice(2));
60
16
  const isDryRun = !!args.dry;
@@ -133,6 +89,50 @@ if (isDryRun || isVerbose$1 || isForce) {
133
89
  logger.verbose();
134
90
  }
135
91
 
92
+ //#endregion
93
+ //#region src/operations/changelog-format.ts
94
+ function formatCommitLine({ commit, owner, repo, authors }) {
95
+ const commitUrl = `https://github.com/${owner}/${repo}/commit/${commit.hash}`;
96
+ let line = `${commit.description}`;
97
+ const references = commit.references ?? [];
98
+ for (const ref of references) {
99
+ if (!ref.value) continue;
100
+ const number = Number.parseInt(ref.value.replace(/^#/, ""), 10);
101
+ if (Number.isNaN(number)) continue;
102
+ if (ref.type === "issue") {
103
+ line += ` ([Issue ${ref.value}](https://github.com/${owner}/${repo}/issues/${number}))`;
104
+ continue;
105
+ }
106
+ line += ` ([PR ${ref.value}](https://github.com/${owner}/${repo}/pull/${number}))`;
107
+ }
108
+ line += ` ([${commit.shortHash}](${commitUrl}))`;
109
+ if (authors.length > 0) {
110
+ const authorList = authors.map((author) => author.login ? `[@${author.login}](https://github.com/${author.login})` : author.name).join(", ");
111
+ line += ` (by ${authorList})`;
112
+ }
113
+ return line;
114
+ }
115
+ function buildTemplateGroups(options) {
116
+ const { commits, owner, repo, types, commitAuthors } = options;
117
+ const grouped = groupByType(commits, {
118
+ includeNonConventional: false,
119
+ mergeKeys: Object.fromEntries(Object.entries(types).map(([key, value]) => [key, value.types ?? [key]]))
120
+ });
121
+ return Object.entries(types).map(([key, value]) => {
122
+ const formattedCommits = (grouped.get(key) ?? []).map((commit) => ({ line: formatCommitLine({
123
+ commit,
124
+ owner,
125
+ repo,
126
+ authors: commitAuthors.get(commit.hash) ?? []
127
+ }) }));
128
+ return {
129
+ name: key,
130
+ title: value.title,
131
+ commits: formattedCommits
132
+ };
133
+ });
134
+ }
135
+
136
136
  //#endregion
137
137
  //#region src/shared/errors.ts
138
138
  const isVerbose = !!mri(process.argv.slice(2)).verbose;
@@ -1417,6 +1417,14 @@ async function discoverWorkspacePackages(workspaceRoot, options) {
1417
1417
  if (missing.length > 0) exitWithError(`Package${missing.length > 1 ? "s" : ""} not found in workspace: ${missing.join(", ")}`, "Check your package names or run 'pnpm ls' to see available packages");
1418
1418
  }
1419
1419
  const isPackagePromptEnabled = options.prompts?.packages !== false;
1420
+ logger.verbose("Package prompt gating", {
1421
+ isCI,
1422
+ isPackagePromptEnabled,
1423
+ hasExplicitPackages: Boolean(explicitPackages),
1424
+ include: workspaceOptions.include ?? [],
1425
+ exclude: workspaceOptions.exclude ?? [],
1426
+ excludePrivate: workspaceOptions.excludePrivate ?? false
1427
+ });
1420
1428
  if (!isCI && isPackagePromptEnabled && !explicitPackages) {
1421
1429
  const selectedNames = await selectPackagePrompt(workspacePackages);
1422
1430
  workspacePackages = workspacePackages.filter((pkg) => selectedNames.includes(pkg.name));
@@ -1887,12 +1895,6 @@ async function calculateVersionUpdates({ workspacePackages, packageCommits, work
1887
1895
  const processedPackages = /* @__PURE__ */ new Set();
1888
1896
  const newOverrides = { ...initialOverrides };
1889
1897
  const excludedPackages = /* @__PURE__ */ new Set();
1890
- const bumpRanks = {
1891
- major: 3,
1892
- minor: 2,
1893
- patch: 1,
1894
- none: 0
1895
- };
1896
1898
  logger.verbose(`Starting version inference for ${packageCommits.size} packages with commits`);
1897
1899
  for (const [pkgName, pkgCommits] of packageCommits) {
1898
1900
  const pkg = workspacePackages.find((p) => p.name === pkgName);
@@ -1915,18 +1917,24 @@ async function calculateVersionUpdates({ workspacePackages, packageCommits, work
1915
1917
  logger.clearScreen();
1916
1918
  logger.section(`📝 Commits for ${farver.cyan(pkg.name)}`);
1917
1919
  formatCommitsForDisplay(allCommitsForPackage).split("\n").forEach((line) => logger.item(line));
1920
+ logger.item(farver.dim(`Auto bump: ${determinedBump} → ${autoVersion}`));
1918
1921
  logger.emptyLine();
1919
1922
  if (override) {
1920
1923
  const overrideChoice = await confirmOverridePrompt(pkg, override.version);
1921
1924
  if (overrideChoice === null) continue;
1922
1925
  if (overrideChoice === "use") {
1926
+ newOverrides[pkgName] = {
1927
+ type: override.type,
1928
+ version: override.version
1929
+ };
1930
+ if (override.version === pkg.version) excludedPackages.add(pkgName);
1923
1931
  versionUpdates.push({
1924
1932
  package: pkg,
1925
1933
  currentVersion: pkg.version,
1926
1934
  newVersion: override.version,
1927
1935
  bumpType: override.type,
1928
1936
  hasDirectChanges: allCommitsForPackage.length > 0,
1929
- changeKind: "manual"
1937
+ changeKind: override.version === pkg.version ? "as-is" : "manual"
1930
1938
  });
1931
1939
  continue;
1932
1940
  }
@@ -1934,26 +1942,18 @@ async function calculateVersionUpdates({ workspacePackages, packageCommits, work
1934
1942
  }
1935
1943
  const selectedVersion = await selectVersionPrompt(workspaceRoot, pkg, pkg.version, newVersion, {
1936
1944
  defaultChoice: override ? "suggested" : "auto",
1937
- suggestedHint: override ? "auto" : void 0
1945
+ suggestedHint: `auto: ${determinedBump} → ${autoVersion}`
1938
1946
  });
1939
1947
  if (selectedVersion === null) continue;
1940
1948
  const userBump = calculateBumpType(pkg.version, selectedVersion);
1941
1949
  finalBumpType = userBump;
1942
1950
  if (selectedVersion === pkg.version) {
1943
1951
  excludedPackages.add(pkgName);
1944
- if (determinedBump !== "none") {
1945
- const nextOverride = {
1946
- type: "none",
1947
- version: pkg.version
1948
- };
1949
- if (!override || override.type !== nextOverride.type || override.version !== nextOverride.version) {
1950
- newOverrides[pkgName] = nextOverride;
1951
- logger.info(`Override set for ${pkgName}: suggested as-is (${pkg.version}) from auto ${determinedBump}`);
1952
- }
1953
- } else if (newOverrides[pkgName]) {
1954
- delete newOverrides[pkgName];
1955
- logger.info(`Override cleared for ${pkgName}.`);
1956
- }
1952
+ newOverrides[pkgName] = {
1953
+ type: "none",
1954
+ version: pkg.version
1955
+ };
1956
+ logger.info(`Override set for ${pkgName}: manual as-is (${pkg.version})`);
1957
1957
  versionUpdates.push({
1958
1958
  package: pkg,
1959
1959
  currentVersion: pkg.version,
@@ -1964,19 +1964,11 @@ async function calculateVersionUpdates({ workspacePackages, packageCommits, work
1964
1964
  });
1965
1965
  continue;
1966
1966
  }
1967
- if (bumpRanks[userBump] < bumpRanks[determinedBump]) {
1968
- const nextOverride = {
1969
- type: userBump,
1970
- version: selectedVersion
1971
- };
1972
- if (!override || override.type !== nextOverride.type || override.version !== nextOverride.version) {
1973
- newOverrides[pkgName] = nextOverride;
1974
- logger.info(`Override set for ${pkgName}: suggested ${userBump} (${selectedVersion}) from auto ${determinedBump}`);
1975
- }
1976
- } else if (newOverrides[pkgName] && bumpRanks[userBump] >= bumpRanks[determinedBump]) {
1977
- delete newOverrides[pkgName];
1978
- logger.info(`Override cleared for ${pkgName}.`);
1979
- }
1967
+ newOverrides[pkgName] = {
1968
+ type: userBump,
1969
+ version: selectedVersion
1970
+ };
1971
+ logger.info(`Override set for ${pkgName}: manual ${userBump} (${selectedVersion})`);
1980
1972
  newVersion = selectedVersion;
1981
1973
  }
1982
1974
  versionUpdates.push({
@@ -1993,13 +1985,27 @@ async function calculateVersionUpdates({ workspacePackages, packageCommits, work
1993
1985
  logger.clearScreen();
1994
1986
  logger.section(`📦 Package: ${pkg.name}`);
1995
1987
  logger.item("No direct commits found");
1996
- const newVersion = await selectVersionPrompt(workspaceRoot, pkg, pkg.version, pkg.version);
1988
+ logger.item(farver.dim(`Auto bump: none ${pkg.version}`));
1989
+ const newVersion = await selectVersionPrompt(workspaceRoot, pkg, pkg.version, pkg.version, {
1990
+ defaultChoice: "auto",
1991
+ suggestedHint: `auto: none → ${pkg.version}`
1992
+ });
1997
1993
  if (newVersion === null) break;
1998
1994
  if (newVersion === pkg.version) {
1999
1995
  excludedPackages.add(pkg.name);
1996
+ newOverrides[pkg.name] = {
1997
+ type: "none",
1998
+ version: pkg.version
1999
+ };
2000
+ logger.info(`Override set for ${pkg.name}: manual as-is (${pkg.version})`);
2000
2001
  continue;
2001
2002
  }
2002
2003
  const bumpType = calculateBumpType(pkg.version, newVersion);
2004
+ newOverrides[pkg.name] = {
2005
+ type: bumpType,
2006
+ version: newVersion
2007
+ };
2008
+ logger.info(`Override set for ${pkg.name}: manual ${bumpType} (${newVersion})`);
2003
2009
  versionUpdates.push({
2004
2010
  package: pkg,
2005
2011
  currentVersion: pkg.version,
@@ -2431,11 +2437,13 @@ async function publishPackage(packageName, version, workspaceRoot, options) {
2431
2437
  15e3
2432
2438
  ];
2433
2439
  for (let attempt = 1; attempt <= maxAttempts; attempt++) try {
2434
- await runIfNotDry("pnpm", args, { nodeOptions: {
2440
+ const result = await runIfNotDry("pnpm", args, { nodeOptions: {
2435
2441
  cwd: workspaceRoot,
2436
- stdio: "inherit",
2442
+ stdio: "pipe",
2437
2443
  env
2438
2444
  } });
2445
+ if (result?.stdout && result.stdout.trim()) logger.verbose(result.stdout.trim());
2446
+ if (result?.stderr && result.stderr.trim()) logger.verbose(result.stderr.trim());
2439
2447
  return ok(void 0);
2440
2448
  } catch (error) {
2441
2449
  const code = classifyPublishErrorCode(error);
@@ -2714,6 +2722,22 @@ async function verifyWorkflow(options) {
2714
2722
  //#region src/index.ts
2715
2723
  async function createReleaseScripts(options) {
2716
2724
  const normalizedOptions = normalizeReleaseScriptsOptions(options);
2725
+ logger.verbose("Release scripts config", {
2726
+ repo: `${normalizedOptions.owner}/${normalizedOptions.repo}`,
2727
+ workspaceRoot: normalizedOptions.workspaceRoot,
2728
+ dryRun: normalizedOptions.dryRun,
2729
+ safeguards: normalizedOptions.safeguards,
2730
+ branch: normalizedOptions.branch,
2731
+ globalCommitMode: normalizedOptions.globalCommitMode,
2732
+ prompts: normalizedOptions.prompts,
2733
+ packages: normalizedOptions.packages,
2734
+ npm: {
2735
+ access: normalizedOptions.npm.access,
2736
+ provenance: normalizedOptions.npm.provenance,
2737
+ otp: normalizedOptions.npm.otp ? "set" : "unset"
2738
+ },
2739
+ changelog: normalizedOptions.changelog
2740
+ });
2717
2741
  return {
2718
2742
  async verify() {
2719
2743
  return verifyWorkflow(normalizedOptions);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ucdjs/release-scripts",
3
- "version": "0.1.0-beta.57",
3
+ "version": "0.1.0-beta.59",
4
4
  "description": "@ucdjs release scripts",
5
5
  "type": "module",
6
6
  "license": "MIT",