Skip to content

Commit 1bcdf40

Browse files
authored
fix: ignore other prerelease tags when finding latest tag (#211) (#213)
1 parent 0da9aea commit 1bcdf40

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ module.exports = async function standardVersion(argv) {
7979
if (pkg && pkg.version) {
8080
version = pkg.version;
8181
} else if (args.gitTagFallback) {
82-
version = await latestSemverTag(args.tagPrefix);
82+
version = await latestSemverTag(args);
8383
} else {
8484
throw new Error('no package file found');
8585
}

lib/latest-semver-tag.js

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,28 @@
11
const gitSemverTags = require('git-semver-tags');
22
const semver = require('semver');
33

4-
module.exports = function (tagPrefix = undefined) {
4+
module.exports = function ({ tagPrefix, prerelease }) {
55
return new Promise((resolve, reject) => {
66
gitSemverTags({ tagPrefix }, function (err, tags) {
77
if (err) return reject(err);
88
else if (!tags.length) return resolve('1.0.0');
99
// Respect tagPrefix
1010
tags = tags.map((tag) => tag.replace(new RegExp('^' + tagPrefix), ''));
11+
if (prerelease) {
12+
// ignore any other prelease tags
13+
tags = tags.filter((tag) => {
14+
if (!semver.valid(tag)) return false;
15+
if (!semver.prerelease(tag)) {
16+
// include all non-prerelease versions
17+
return true;
18+
}
19+
// check if the name of the prerelease matches the one we are looking for
20+
if (semver.prerelease(tag)[0] === prerelease) {
21+
return true;
22+
}
23+
return false;
24+
});
25+
}
1126
// ensure that the largest semver tag is at the head.
1227
tags = tags.map((tag) => {
1328
return semver.clean(tag);

test/git.integration-test.js

+8
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,14 @@ describe('git', function () {
272272
const output = shell.exec('git tag');
273273
expect(output.stdout).toContain('v5.1.0');
274274
});
275+
276+
it('uses only relevant prerelease tags', async function () {
277+
shell.rm('package.json');
278+
mock({ bump: 'minor', tags: ['v1.1.0-b.0', 'v1.1.0-a.0', 'v1.0.0-b.0'] });
279+
await exec('--prerelease a');
280+
const output = shell.exec('git tag');
281+
expect(output.stdout).toContain('1.1.0-a.1');
282+
});
275283
});
276284

277285
describe('Run ... to publish', function () {

0 commit comments

Comments
 (0)