-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathversion.mjs
More file actions
90 lines (78 loc) · 2.47 KB
/
version.mjs
File metadata and controls
90 lines (78 loc) · 2.47 KB
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
90
import path from "node:path";
import semver from "semver";
async function getCommitId() {
const result = await $`git rev-parse --short HEAD`;
return result.stdout.replace("\n", "");
}
export async function getLastVersion(root) {
let pkg = await getPackageJson(root);
return pkg.version
}
export async function getPackageJson(root) {
const pkgPath = path.resolve(root, "./npm/package.json");
try {
// Node >= 20
const result = await import(pkgPath, {
with: {
type: "json"
}
});
return result.default;
} catch (e) {
// Node < 20
const result = await import(pkgPath, {
assert: {
type: "json"
}
});
return result.default;
}
}
export async function version_handler(version, options) {
const allowedVersion = ["major", "minor", "patch"];
const allowPretags = ["alpha", "beta", "rc"];
const {pre} = options;
if (!allowedVersion.includes(version)) {
throw new Error(
`version must be one of ${allowedVersion}, but you passed ${version}`
);
}
const hasPre = pre && pre !== "none";
if (hasPre && !allowPretags.includes(pre)) {
throw new Error(
`pre tag must be one of ${allowPretags}, but you passed ${pre}`
);
}
const root = process.cwd();
const lastVersion = await getLastVersion(root);
let nextVersion;
if (hasPre) {
const existsPreTag = allowPretags.find(i => lastVersion.includes(i));
if (existsPreTag) {
// has pre tag
if (existsPreTag === pre) {
// same pre tag
nextVersion = semver.inc(lastVersion, "prerelease", pre);
} else {
// different pre tag
nextVersion = `${lastVersion.split(existsPreTag)[0]}${pre}.0`;
}
} else {
nextVersion = semver.inc(lastVersion, `pre${version}`, pre);
}
} else {
nextVersion = semver.inc(lastVersion, version);
}
let packageFile = path.resolve(root, "./npm/package.json");
let packageJson = JSON.parse(await fs.readFile(packageFile));
let newPackageJson = {
...packageJson,
version: nextVersion,
}
await fs.writeFile(
packageFile,
`${JSON.stringify(newPackageJson, null, 2)}\n`,
"utf-8"
);
console.log(`Update ${newPackageJson.name}: ${newPackageJson.version}`);
}