-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathversion.js
89 lines (89 loc) · 3.07 KB
/
version.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/env node
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var fs = require("fs");
var _a = process.argv, args = _a.slice(2);
var filePath = args[0];
var fileLines = fs.readFileSync(filePath, 'utf8').split('\n');
var ChangelogSections;
(function (ChangelogSections) {
ChangelogSections["Unreleased"] = "## [Unreleased]";
ChangelogSections["Added"] = "### Added";
ChangelogSections["Changed"] = "### Changed";
ChangelogSections["Removed"] = "### Removed";
ChangelogSections["Deprecated"] = "### Deprecated";
ChangelogSections["Fixed"] = "### Fixed";
ChangelogSections["Security"] = "### Security";
})(ChangelogSections || (ChangelogSections = {}));
var Releases;
(function (Releases) {
Releases["Major"] = "major";
Releases["Minor"] = "minor";
Releases["Patch"] = "patch";
})(Releases || (Releases = {}));
var releaseDelimiter = '## [';
var sectionDelimiter = '###';
var unreleased = parseUnreleased(fileLines);
// console.log('Added:', parseSection(unreleased, ChangelogSections.Added))
// console.log('Changed:', parseSection(unreleased, ChangelogSections.Changed))
// console.log('Removed:', parseSection(unreleased, ChangelogSections.Removed))
// console.log('Deprecated:', parseSection(unreleased, ChangelogSections.Deprecated))
// console.log('Fixed:', parseSection(unreleased, ChangelogSections.Fixed))
// console.log('Security:', parseSection(unreleased, ChangelogSections.Security))
console.log(determineReleaseType(unreleased));
function determineReleaseType(releaseLog) {
var removed = parseSection(releaseLog, ChangelogSections.Removed);
var fixed = parseSection(releaseLog, ChangelogSections.Fixed);
var security = parseSection(releaseLog, ChangelogSections.Security);
//Only breaking changes will trigger a Major release.
if (removed.length > 0) {
return Releases.Major;
}
else if (fixed.length > 0 || security.length > 0) {
return Releases.Patch;
}
else {
return Releases.Minor;
}
}
exports.determineReleaseType = determineReleaseType;
function parseUnreleased(fileLines) {
var result = [];
for (var i = 0; i < fileLines.length; i++) {
if (fileLines[i] === ChangelogSections.Unreleased) {
i++;
while (isUnreleased(fileLines[i])) {
if (fileLines[i] !== '') {
result.push(fileLines[i]);
}
i++;
}
break;
}
}
return result;
}
function isUnreleased(line) {
if (line === undefined)
return false;
return !line.includes(releaseDelimiter);
}
function parseSection(unreleased, header) {
var result = [];
for (var i = 0; i < unreleased.length; i++) {
if (unreleased[i] === header) {
i++;
while (isSameSection(unreleased[i])) {
result.push(unreleased[i]);
i++;
}
break;
}
}
return result;
}
function isSameSection(line) {
if (line === undefined)
return false;
return !line.includes(sectionDelimiter);
}