UNPKG

2.64 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.calculateSemVerBump = exports.getHigherSemverTag = exports.preVersionMap = void 0;
4var SEMVER;
5(function (SEMVER) {
6 SEMVER["major"] = "major";
7 SEMVER["premajor"] = "premajor";
8 SEMVER["minor"] = "minor";
9 SEMVER["preminor"] = "preminor";
10 SEMVER["patch"] = "patch";
11 SEMVER["prepatch"] = "prepatch";
12 SEMVER["noVersion"] = "";
13})(SEMVER || (SEMVER = {}));
14exports.preVersionMap = new Map([
15 [SEMVER.major, SEMVER.premajor],
16 [SEMVER.minor, SEMVER.preminor],
17 [SEMVER.patch, SEMVER.prepatch],
18]);
19exports.default = SEMVER;
20/** Given two labels determine the next SEMVER bump. */
21function getHigherSemverTag(left, right) {
22 if (left === SEMVER.major || right === SEMVER.major) {
23 return SEMVER.major;
24 }
25 if (left === SEMVER.minor || right === SEMVER.minor) {
26 return SEMVER.minor;
27 }
28 return SEMVER.patch;
29}
30exports.getHigherSemverTag = getHigherSemverTag;
31/**
32 * Determine the version bump from the labels on merged PRs.
33 * Respects skip-release labels and the "onlyPublishWithReleaseLabel"
34 * strategy.
35 */
36function calculateSemVerBump(labels, labelMap, { onlyPublishWithReleaseLabel } = {}) {
37 const labelSet = new Set();
38 const skipReleaseLabels = labelMap.get("skip") || [];
39 labels.forEach((pr, index) => {
40 // If the head pr has no labels we default to a patch
41 if (pr.length === 0 && index === 0) {
42 labelSet.add(SEMVER.patch);
43 }
44 pr.forEach((label) => {
45 const userLabel = [...labelMap.entries()].find((pair) => pair[1].includes(label));
46 if (userLabel) {
47 labelSet.add(userLabel[0]);
48 }
49 });
50 });
51 const lastMergedCommitLabels = labels[0] || [];
52 const releaseLabels = labelMap.get("release") || [];
53 const skipRelease = onlyPublishWithReleaseLabel
54 ? !lastMergedCommitLabels.some((label) => releaseLabels.includes(label))
55 : lastMergedCommitLabels.some((label) => skipReleaseLabels.includes(label));
56 // If PRs only have none or skip labels, skip the release
57 const onlyNoReleaseLabels = [...labelSet].reduce((condition, releaseType) => condition && (releaseType === "none" || releaseType === "skip"), true);
58 if (labelSet.size > 0 && onlyNoReleaseLabels) {
59 return SEMVER.noVersion;
60 }
61 const version = [...labelSet].reduce(getHigherSemverTag, SEMVER.patch);
62 if (skipRelease) {
63 return SEMVER.noVersion;
64 }
65 return version;
66}
67exports.calculateSemVerBump = calculateSemVerBump;
68//# sourceMappingURL=semver.js.map
\No newline at end of file