From 3021d181f2328c962c52a3655b39f8a4ea423d64 Mon Sep 17 00:00:00 2001 From: pstrh <16498471+pstrh@users.noreply.github.com> Date: Sat, 31 Oct 2020 10:02:51 +0100 Subject: [PATCH] Fix prerelease continuation increased patch version in CI mode (#715) --- lib/plugin/version/Version.js | 9 ++++++--- test/plugins.js | 2 +- test/version.js | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/plugin/version/Version.js b/lib/plugin/version/Version.js index ffb717ea..fd811c3b 100644 --- a/lib/plugin/version/Version.js +++ b/lib/plugin/version/Version.js @@ -63,8 +63,7 @@ class Version extends Plugin { getIncrementedVersionCI(options) { const { isCI } = this.config; - options.increment = options.increment == null && isCI ? 'patch' : options.increment; - return this.incrementVersion(options); + return this.incrementVersion(options, isCI); } async getIncrementedVersion(options) { @@ -93,7 +92,7 @@ class Version extends Plugin { return Boolean(semver.valid(version)); } - incrementVersion({ latestVersion, increment, isPreRelease, preReleaseId }) { + incrementVersion({ latestVersion, increment, isPreRelease, preReleaseId }, isCI) { if (increment === false) return latestVersion; const latestIsPreRelease = this.isPreRelease(latestVersion); @@ -111,6 +110,10 @@ class Version extends Plugin { return semver.inc(latestVersion, 'prerelease', preReleaseId); } + if (isCI && !increment) { + return semver.inc(latestVersion, 'patch'); + } + const normalizedType = RELEASE_TYPES.includes(increment) && isPreRelease ? `pre${increment}` : increment; if (ALL_RELEASE_TYPES.includes(normalizedType)) { return semver.inc(latestVersion, normalizedType, preReleaseId); diff --git a/test/plugins.js b/test/plugins.js index d19ebb69..a72113d1 100644 --- a/test/plugins.js +++ b/test/plugins.js @@ -106,7 +106,7 @@ test.serial('should instantiate plugins and execute all release-cycle methods', t.is(myLocalPlugin[method].callCount, 1); }); - const incrementBase = { latestVersion: '0.0.0', increment: 'patch', isPreRelease: false, preReleaseId: undefined }; + const incrementBase = { latestVersion: '0.0.0', increment: undefined, isPreRelease: false, preReleaseId: undefined }; t.deepEqual(myPlugin.getIncrement.firstCall.args[0], incrementBase); t.deepEqual(myPlugin.getIncrementedVersionCI.firstCall.args[0], incrementBase); t.deepEqual(myLocalPlugin.getIncrementedVersionCI.firstCall.args[0], incrementBase); diff --git a/test/version.js b/test/version.js index c9b39586..bdce23dd 100644 --- a/test/version.js +++ b/test/version.js @@ -15,11 +15,26 @@ test('isPreRelease', t => { t.is(v.isPreRelease('1.0.0'), false); }); +test('getIncrementedVersionCI should default increment to patch if no increment is given', t => { + const v = factory(Version); + t.is(v.getIncrementedVersionCI({ latestVersion: '2.0.0', increment: null}), '2.0.1'); +}); + +test('interactive and ci mode should return the same version if no increment is given (prerelease continuation, issue #714)', async t => { + const v = factory(Version); + const options = { latestVersion: '2.0.0-beta.1', increment: null, preReleaseId: 'rc', isPreRelease: true}; + const resultInteractiveMode = await v.getIncrementedVersion(options); + t.is(resultInteractiveMode, '2.0.0-rc.0'); + const resultCiMode = v.getIncrementedVersionCI(options); + t.is(resultInteractiveMode, resultCiMode); +}); + test('should increment latest version', t => { const v = factory(Version); const latestVersion = '1.0.0'; t.is(v.incrementVersion({ latestVersion, increment: false }), '1.0.0'); t.is(v.incrementVersion({ latestVersion, increment: null }), undefined); + t.is(v.incrementVersion({ latestVersion, increment: null }, true), '1.0.1'); t.is(v.incrementVersion({ latestVersion, increment: 'foo' }), undefined); t.is(v.incrementVersion({ latestVersion, increment: 'patsj' }), undefined); t.is(v.incrementVersion({ latestVersion, increment: 'a.b.c' }), undefined);