From f9e8d38b6eddc436d665cc875695a7483e263705 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9mentValot?= Date: Wed, 20 Aug 2025 17:55:37 +0200 Subject: [PATCH 1/4] fix(plugin-version): Adapt behavior for `yarn version pre*` to match the documentation --- .yarn/versions/59b2c8b4.yml | 23 +++++++++++++++++++ .../sources/versionUtils.test.ts | 6 +++++ .../plugin-version/sources/versionUtils.ts | 9 +++++++- 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 .yarn/versions/59b2c8b4.yml diff --git a/.yarn/versions/59b2c8b4.yml b/.yarn/versions/59b2c8b4.yml new file mode 100644 index 000000000000..a6723d76cfd1 --- /dev/null +++ b/.yarn/versions/59b2c8b4.yml @@ -0,0 +1,23 @@ +releases: + "@yarnpkg/cli": patch + "@yarnpkg/plugin-version": minor + +declined: + - "@yarnpkg/plugin-compat" + - "@yarnpkg/plugin-constraints" + - "@yarnpkg/plugin-dlx" + - "@yarnpkg/plugin-essentials" + - "@yarnpkg/plugin-init" + - "@yarnpkg/plugin-interactive-tools" + - "@yarnpkg/plugin-nm" + - "@yarnpkg/plugin-npm-cli" + - "@yarnpkg/plugin-pack" + - "@yarnpkg/plugin-patch" + - "@yarnpkg/plugin-pnp" + - "@yarnpkg/plugin-pnpm" + - "@yarnpkg/plugin-stage" + - "@yarnpkg/plugin-typescript" + - "@yarnpkg/plugin-workspace-tools" + - "@yarnpkg/builder" + - "@yarnpkg/core" + - "@yarnpkg/doctor" diff --git a/packages/plugin-version/sources/versionUtils.test.ts b/packages/plugin-version/sources/versionUtils.test.ts index 2b89acebcb94..035d72d55947 100644 --- a/packages/plugin-version/sources/versionUtils.test.ts +++ b/packages/plugin-version/sources/versionUtils.test.ts @@ -14,4 +14,10 @@ describe(`versionUtils`, () => { expect(versionUtils.applyPrerelease(`1.3.0`, {current: `1.2.3-rc.41`, prerelease: `rc.%n`})).toEqual(`1.3.0-rc.1`); }); }); + + describe(`applyStrategy`, () => { + it(`should increase the prerelease number`, () => { + expect(versionUtils.applyStrategy(`1.2.3-0`, `prerelease`)).toEqual(`1.2.3-1`); + }); + }); }); diff --git a/packages/plugin-version/sources/versionUtils.ts b/packages/plugin-version/sources/versionUtils.ts index c346aa190658..309dabff47d1 100644 --- a/packages/plugin-version/sources/versionUtils.ts +++ b/packages/plugin-version/sources/versionUtils.ts @@ -15,6 +15,9 @@ export enum Decision { MAJOR = `major`, MINOR = `minor`, PATCH = `patch`, + PREMAJOR = `premajor`, + PREMINOR = `preminor`, + PREPATCH = `prepatch`, PRERELEASE = `prerelease`, } @@ -88,7 +91,11 @@ export async function resolveVersionFiles(project: Project, {prerelease = null}: const baseVersion = workspace.manifest.raw.stableVersion ?? workspace.manifest.version; const candidateRelease = candidateReleases.get(workspace); - const suggestedRelease = applyStrategy(baseVersion, validateReleaseDecision(decision)); + // In case of prerelease decision with a prerelease version, the trailing number should be bumped + const suggestedRelease = Decision.PRERELEASE === decision ? + applyStrategy(workspace.manifest.version, validateReleaseDecision(decision)) : + applyStrategy(baseVersion, validateReleaseDecision(decision)); + if (suggestedRelease === null) throw new Error(`Assertion failed: Expected ${baseVersion} to support being bumped via strategy ${decision}`); From d39be6a71f3831af0388ba29a0de0e2338dd97b8 Mon Sep 17 00:00:00 2001 From: ClementValot Date: Fri, 22 Aug 2025 21:57:30 +0200 Subject: [PATCH 2/4] fix(tests): Added check on error messages + fix typos --- .../pkg-tests-specs/sources/commands/version.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/acceptance-tests/pkg-tests-specs/sources/commands/version.test.ts b/packages/acceptance-tests/pkg-tests-specs/sources/commands/version.test.ts index f9c0825e78e5..e5636e3eb0c4 100644 --- a/packages/acceptance-tests/pkg-tests-specs/sources/commands/version.test.ts +++ b/packages/acceptance-tests/pkg-tests-specs/sources/commands/version.test.ts @@ -5,7 +5,7 @@ describe(`Commands`, () => { test( `it shouldn't work if the strategy isn't semver and there is no prior version`, makeTemporaryEnv({}, async ({path, run, source}) => { - await expect(run(`version`, `patch`)).rejects.toThrow(); + await expect(run(`version`, `patch`)).rejects.toThrow(`Usage Error: Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.`); }), ); @@ -15,7 +15,7 @@ describe(`Commands`, () => { version: `1.0.0`, }, async ({path, run, source}) => { await run(`version`, `1.1.0`, `--deferred`); - await expect(run(`version`, `1.0.1`)).rejects.toThrow(); + await expect(run(`version`, `1.0.1`)).rejects.toThrow(`Usage Error: Can't bump the version to one that would be lower than the current deferred one (1.1.0)`); }), ); @@ -25,7 +25,7 @@ describe(`Commands`, () => { version: `1.0.0`, }, async ({path, run, source}) => { await run(`version`, `1.1.0`, `--deferred`); - await expect(run(`version`, `patch`)).rejects.toThrow(); + await expect(run(`version`, `patch`)).rejects.toThrow(`Usage Error: Can't bump the version to one that would be lower than the current deferred one (1.1.0)`); }), ); @@ -99,7 +99,7 @@ describe(`Commands`, () => { ); test( - `it shouldn't immediatly increase the version number for a workspace when using --deferred`, + `it shouldn't immediately increase the version number for a workspace when using --deferred`, makeTemporaryEnv({ version: `0.0.0`, }, async ({path, run, source}) => { @@ -118,7 +118,7 @@ describe(`Commands`, () => { ); test( - `it shouldn't immediatly increase the version number for a workspace when using preferDeferredVersions`, + `it shouldn't immediately increase the version number for a workspace when using preferDeferredVersions`, makeTemporaryEnv({ version: `0.0.0`, }, { @@ -139,7 +139,7 @@ describe(`Commands`, () => { ); test( - `it should immediatly increase the version number for a workspace when using --immediate, even if preferDeferredVersions is set`, + `it should immediately increase the version number for a workspace when using --immediate, even if preferDeferredVersions is set`, makeTemporaryEnv({ version: `0.0.0`, }, { From a63e66092d5fc25fc52c05896b6c29ef330459e5 Mon Sep 17 00:00:00 2001 From: ClementValot Date: Mon, 25 Aug 2025 16:10:24 +0200 Subject: [PATCH 3/4] fix(tests): Add more tests for `version prerelease` --- .../sources/commands/version.test.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/packages/acceptance-tests/pkg-tests-specs/sources/commands/version.test.ts b/packages/acceptance-tests/pkg-tests-specs/sources/commands/version.test.ts index e5636e3eb0c4..004c50a6524e 100644 --- a/packages/acceptance-tests/pkg-tests-specs/sources/commands/version.test.ts +++ b/packages/acceptance-tests/pkg-tests-specs/sources/commands/version.test.ts @@ -98,6 +98,32 @@ describe(`Commands`, () => { }), ); + test( + `it should bump then append a prerelease version number to a release version`, + makeTemporaryEnv({ + version: `1.2.3`, + }, async ({path, run, source}) => { + await run(`version`, `prerelease`); + + await expect(xfs.readJsonPromise(`${path}/package.json` as PortablePath)).resolves.toMatchObject({ + version: `1.2.4-0`, + }); + }), + ); + + test( + `it should bump the prerelease version number on a prerelease version`, + makeTemporaryEnv({ + version: `11.22.33-9`, + }, async ({path, run, source}) => { + await run(`version`, `prerelease`); + + await expect(xfs.readJsonPromise(`${path}/package.json` as PortablePath)).resolves.toMatchObject({ + version: `11.22.33-10`, + }); + }), + ); + test( `it shouldn't immediately increase the version number for a workspace when using --deferred`, makeTemporaryEnv({ From 72533a6ff0af38bfd2a921edd8e050fcb97b347d Mon Sep 17 00:00:00 2001 From: ClementValot Date: Mon, 25 Aug 2025 16:35:50 +0200 Subject: [PATCH 4/4] fix(tests): Add tests for prepatch/preminor/premajor support --- packages/plugin-version/sources/versionUtils.test.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/plugin-version/sources/versionUtils.test.ts b/packages/plugin-version/sources/versionUtils.test.ts index 035d72d55947..f829326de86a 100644 --- a/packages/plugin-version/sources/versionUtils.test.ts +++ b/packages/plugin-version/sources/versionUtils.test.ts @@ -16,8 +16,14 @@ describe(`versionUtils`, () => { }); describe(`applyStrategy`, () => { - it(`should increase the prerelease number`, () => { + it(`should increase the prerelease number with prerelease strategy`, () => { expect(versionUtils.applyStrategy(`1.2.3-0`, `prerelease`)).toEqual(`1.2.3-1`); }); + + it(`should apply prepatch, preminor, premajor strategies`, () => { + expect(versionUtils.applyStrategy(`1.2.3`, `prepatch`)).toEqual(`1.2.4-0`); + expect(versionUtils.applyStrategy(`1.2.3`, `preminor`)).toEqual(`1.3.0-0`); + expect(versionUtils.applyStrategy(`1.2.3`, `premajor`)).toEqual(`2.0.0-0`); + }); }); });