Skip to content

Commit a0a17fd

Browse files
Show new version in non-interactive mode (#679)
1 parent f992ec1 commit a0a17fd

File tree

4 files changed

+36
-12
lines changed

4 files changed

+36
-12
lines changed

source/prerequisite-tasks.js

+1-9
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,7 @@ module.exports = (input, pkg, options) => {
5959
{
6060
title: 'Validate version',
6161
task: () => {
62-
if (!version.isValidInput(input)) {
63-
throw new Error(`Version should be either ${version.SEMVER_INCREMENTS.join(', ')}, or a valid semver version.`);
64-
}
65-
66-
newVersion = version(pkg.version).getNewVersionFrom(input);
67-
68-
if (version(pkg.version).isLowerThanOrEqualTo(newVersion)) {
69-
throw new Error(`New version \`${newVersion}\` should be higher than current version \`${pkg.version}\``);
70-
}
62+
newVersion = version.getAndValidateNewVersionFrom(input, pkg.version);
7163
}
7264
},
7365
{

source/ui.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,10 @@ module.exports = async (options, pkg) => {
132132
if (options.releaseDraftOnly) {
133133
console.log(`\nCreate a release draft on GitHub for ${chalk.bold.magenta(pkg.name)} ${chalk.dim(`(current: ${oldVersion})`)}\n`);
134134
} else {
135-
console.log(`\nPublish a new version of ${chalk.bold.magenta(pkg.name)} ${chalk.dim(`(current: ${oldVersion})`)}\n`);
135+
const newVersion = options.version ? version.getAndValidateNewVersionFrom(options.version, oldVersion) : undefined;
136+
const versionText = chalk.dim(`(current: ${oldVersion}${newVersion ? `, next: ${prettyVersionDiff(oldVersion, newVersion)}` : ''}${chalk.dim(')')}`);
137+
138+
console.log(`\nPublish a new version of ${chalk.bold.magenta(pkg.name)} ${versionText}\n`);
136139
}
137140

138141
const prompts = [

source/version.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class Version {
2020
getNewVersionFrom(input) {
2121
module.exports.validate(this.version);
2222
if (!module.exports.isValidInput(input)) {
23-
throw new Error(`Version should be either ${module.exports.SEMVER_INCREMENTS.join(', ')} or a valid semver version.`);
23+
throw new Error(`Version should be either ${module.exports.SEMVER_INCREMENTS.join(', ')}, or a valid semver version.`);
2424
}
2525

2626
return module.exports.SEMVER_INCREMENTS.includes(input) ? semver.inc(this.version, input) : input;
@@ -64,3 +64,13 @@ module.exports.verifyRequirementSatisfied = (dependency, version) => {
6464
throw new Error(`Please upgrade to ${dependency}${depRange}`);
6565
}
6666
};
67+
68+
module.exports.getAndValidateNewVersionFrom = (input, version) => {
69+
const newVersion = module.exports(version).getNewVersionFrom(input);
70+
71+
if (module.exports(version).isLowerThanOrEqualTo(newVersion)) {
72+
throw new Error(`New version \`${newVersion}\` should be higher than current version \`${version}\``);
73+
}
74+
75+
return newVersion;
76+
};

test/version.js

+20-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ test('version.isPrereleaseOrIncrement', t => {
4949
});
5050

5151
test('version.getNewVersionFrom', t => {
52-
const message = 'Version should be either patch, minor, major, prepatch, preminor, premajor, prerelease or a valid semver version.';
52+
const message = 'Version should be either patch, minor, major, prepatch, preminor, premajor, prerelease, or a valid semver version.';
5353

5454
t.throws(() => version('1.0.0').getNewVersionFrom('patchxxx'), message);
5555
t.throws(() => version('1.0.0').getNewVersionFrom('1.0.0.0'), message);
@@ -118,3 +118,22 @@ test('version.satisfies', t => {
118118
t.false(version('3.0.0').satisfies('>=2.15.8 <3.0.0 || >=3.10.1'));
119119
t.false(version('3.10.0').satisfies('>=2.15.8 <3.0.0 || >=3.10.1'));
120120
});
121+
122+
test('version.getAndValidateNewVersionFrom', t => {
123+
t.is(version.getAndValidateNewVersionFrom('patch', '1.0.0'), '1.0.1');
124+
125+
t.throws(
126+
() => version.getAndValidateNewVersionFrom('patch', '1'),
127+
'Version should be a valid semver version.'
128+
);
129+
130+
t.throws(
131+
() => version.getAndValidateNewVersionFrom('lol', '1.0.0'),
132+
`Version should be either ${version.SEMVER_INCREMENTS.join(', ')}, or a valid semver version.`
133+
);
134+
135+
t.throws(
136+
() => version.getAndValidateNewVersionFrom('1.0.0', '2.0.0'),
137+
'New version `1.0.0` should be higher than current version `2.0.0`'
138+
);
139+
});

0 commit comments

Comments
 (0)