1 |
|
2 |
|
3 | var semver = require('semver');
|
4 | var tagPrefix = require('../utils/tag-prefix');
|
5 |
|
6 | function semverStrategy(tags, options) {
|
7 | var versions, latestVersion, nextVersion, releaseType;
|
8 |
|
9 | versions = tags.filter(function(tagName) {
|
10 | return semver.valid(tagPrefix.strip(tagName));
|
11 | }).sort(function(a, b) {
|
12 | return semver.compare(tagPrefix.strip(a), tagPrefix.strip(b));
|
13 | }).reverse();
|
14 |
|
15 | if (tags.length && !versions.length) {
|
16 | throw "The repository has no tags that are SemVer compliant, you must specify a tag name with the --tag option.";
|
17 | }
|
18 |
|
19 | if (versions.length) {
|
20 | if (options.major) {
|
21 | releaseType = 'major';
|
22 | } else if (options.minor) {
|
23 | releaseType = 'minor';
|
24 | } else {
|
25 | releaseType = 'patch';
|
26 | }
|
27 |
|
28 | latestVersion = versions[0];
|
29 | nextVersion = semver.inc(tagPrefix.strip(latestVersion), releaseType);
|
30 |
|
31 |
|
32 | if (tagPrefix.has(latestVersion)) {
|
33 | nextVersion = tagPrefix.prepend(nextVersion);
|
34 | }
|
35 | } else {
|
36 | nextVersion = 'v0.1.0';
|
37 | }
|
38 |
|
39 | return {
|
40 | latest : latestVersion,
|
41 | next : nextVersion
|
42 | };
|
43 | }
|
44 |
|
45 | module.exports = semverStrategy;
|