-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathget-next-version.js
64 lines (52 loc) · 1.67 KB
/
get-next-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
const semver = require("semver");
const child_process = require("child_process");
const dayjs = require("dayjs");
const fs = require("fs");
const currentVersion =
process.env.NPM_VERSION || require("../package.json").version;
if (!currentVersion) {
throw new Error("Invalid current version");
}
const currentTag = process.env.NPM_TAG || "next";
const runID = process.env.GITHUB_RUN_ID || 0;
let prPrerelease = "";
if (currentTag === "pr" && process.env.GITHUB_EVENT_PATH) {
try {
const ev = JSON.parse(fs.readFileSync(process.env.GITHUB_EVENT_PATH, "utf8"));
const prNum = ev.pull_request.number;
// add extra PR number to version-pr.PRNUM-....
prPrerelease = `${prNum}-`;
} catch (e) {
// don't add pr prerelease
}
}
const preRelease = `${currentTag}.${prPrerelease}${dayjs().format("YYYY-MM-DD")}-${runID}`;
let lastTagVersion = (
process.env.LAST_TAGGED_VERSION ||
child_process
.spawnSync("git", ["describe", "--tags", "--abbrev=0", "--match=v*"])
.stdout.toString()
)
.trim()
.substring(1);
if (!semver.parse(lastTagVersion)) {
throw new Error("Invalid last tag version");
}
function setPreRelease(version) {
const parsed = semver.parse(version);
return semver.parse(
`${parsed.major}.${parsed.minor}.${parsed.patch}-${preRelease}`
);
}
let nextVersion = setPreRelease(currentVersion);
if (!nextVersion) {
throw new Error("Invalid next version");
}
if (semver.compare(currentVersion, lastTagVersion) <= 0) {
// next version is older than current version
nextVersion = setPreRelease(semver.parse(lastTagVersion).inc("patch"));
}
if (!nextVersion) {
throw new Error("Invalid next version");
}
console.log(nextVersion.format());