From dc34a9ce35046e01253249c8bb3d75bba4419b0c Mon Sep 17 00:00:00 2001 From: Ricky C Date: Tue, 1 Jun 2021 12:53:21 -0700 Subject: [PATCH] fix: Combining both release-as and prerelease now doesn't break package Previously, as shown in #542, using both options at the same time resulted in the bump file's version being set to null. This was validated in the first of the new unit tests. The other unit tests simply check that the rest of the behavior is correct in this case. With this combination the user can override the version, the purpose of `release-as`, while still starting or continuing a pre-release, the purpose of of the `prerelease`. Fixes #542 --- lib/lifecycles/bump.js | 4 +++- test/core.spec.js | 38 +++++++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/lib/lifecycles/bump.js b/lib/lifecycles/bump.js index 370fbff0..e0dd324c 100644 --- a/lib/lifecycles/bump.js +++ b/lib/lifecycles/bump.js @@ -27,7 +27,9 @@ async function Bump (args, version) { const release = await bumpVersion(args.releaseAs, version, args) if (!args.firstRelease) { const releaseType = getReleaseType(args.prerelease, release.releaseType, version) - newVersion = semver.valid(releaseType) || semver.inc(version, releaseType, args.prerelease) + const releaseTypeAsVersion = releaseType === 'pre' + release.releaseType ? semver.valid(release.releaseType + '-' + args.prerelease + '.0') : semver.valid(releaseType) + + newVersion = releaseTypeAsVersion || semver.inc(version, releaseType, args.prerelease) updateConfigs(args, newVersion) } else { checkpoint(args, 'skip version bump on first release', [], chalk.red(figures.cross)) diff --git a/test/core.spec.js b/test/core.spec.js index 22d2b8e2..ab9a204b 100644 --- a/test/core.spec.js +++ b/test/core.spec.js @@ -13,7 +13,7 @@ const stdMocks = require('std-mocks') const cli = require('../command') const formatCommitMessage = require('../lib/format-commit-message') -require('chai').should() +const should = require('chai').should() // set by mock() let standardVersion @@ -354,6 +354,42 @@ describe('cli', function () { await exec('--release-as 200.0.0-amazing') getPackageVersion().should.equal('200.0.0-amazing') }) + + it('releases as 100.0.0 with prerelease amazing', async function () { + mock({ + bump: 'patch', + fs: { 'CHANGELOG.md': 'legacy header format\n' }, + pkg: { + version: '1.0.0' + } + }) + await exec('--release-as 100.0.0 --prerelease amazing') + should.equal(getPackageVersion(), '100.0.0-amazing.0') + }) + + it('release 100.0.0 with prerelease amazing bumps build', async function () { + mock({ + bump: 'patch', + fs: { 'CHANGELOG.md': 'legacy header format\n' }, + pkg: { + version: '100.0.0-amazing.0' + } + }) + await exec('--release-as 100.0.0 --prerelease amazing') + should.equal(getPackageVersion(), '100.0.0-amazing.1') + }) + + it('release 100.0.0-amazing.0 with prerelease amazing bumps build', async function () { + mock({ + bump: 'patch', + fs: { 'CHANGELOG.md': 'legacy header format\n' }, + pkg: { + version: '100.0.0-amazing.0' + } + }) + await exec('--release-as 100.0.0-amazing.0 --prerelease amazing') + should.equal(getPackageVersion(), '100.0.0-amazing.1') + }) }) it('creates a prerelease with a new minor version after two prerelease patches', async function () {