-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrelease.js
More file actions
115 lines (99 loc) · 3.08 KB
/
release.js
File metadata and controls
115 lines (99 loc) · 3.08 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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/env node
import fs from "fs";
import { argv } from "process";
import { execSync } from "child_process";
import { createSpinner } from "nanospinner";
import { createInterface } from "readline";
import util from "util";
const readline = createInterface({
input: process.stdin,
output: process.stdout,
});
const question = util.promisify(readline.question).bind(readline);
if (argv.length < 3) {
console.log("Usage: node release.js <version>");
process.exit(1);
}
const version = argv[2];
// Write to VERSION file to trigger deploy to Pages
let spinner = createSpinner("Writing version to VERSION file").start();
try {
fs.writeFileSync("VERSION", version);
spinner.success({ text: "Version written to VERSION file" });
}
catch {
spinner.error({ text: "Failed to write version to VERSION file" });
process.exit(1);
}
// Update package version
spinner = createSpinner("Updating package.json version").start();
try {
const packageJson = JSON.parse(fs.readFileSync("package.json", "utf8"));
packageJson.version = version;
fs.writeFileSync("package.json", JSON.stringify(packageJson, null, 2) + "\n");
spinner.success({ text: "package.json version updated" });
}
catch {
spinner.error({ text: "Failed to update package.json version" });
process.exit(1);
}
// Run git-cliff to generate CHANGELOG.md
spinner = createSpinner("Generating CHANGELOG.md").start();
try {
execSync(`git cliff -u -t v${version} -s all -p CHANGELOG.md`);
spinner.success({ text: "CHANGELOG.md generated" });
}
catch {
spinner.error({ text: "Failed to generate CHANGELOG.md" });
process.exit(1);
}
// Create a git tag
spinner = createSpinner("Creating git tag").start();
try {
execSync("git add .");
execSync(`git commit -m "chore(release): prepare for v${version}"`);
execSync(`git tag -a v${version} -m "Release v${version}"`);
spinner.success({ text: "Git tag created" });
}
catch {
spinner.error({ text: "Failed to create git tag" });
process.exit(1);
}
try {
const answer = await question("Do you want to push the commits to GitHub? (Y/n) ");
if (!answer || answer.toLowerCase() === "y") {
// Push changes to GitHub
spinner = createSpinner("Pushing changes to GitHub").start();
try {
execSync("git push");
spinner.success({ text: "Changes pushed to GitHub" });
}
catch {
spinner.error({ text: "Failed to push changes to GitHub" });
process.exit(1);
}
}
}
catch (err) {
console.log(err);
}
try {
const answer = await question("Do you want to push new tag? (y/n) ");
if (answer.toLowerCase() === "y") {
// Push tag to GitHub
spinner = createSpinner("Pushing tag to GitHub").start();
try {
execSync(`git push origin v${version}`);
spinner.success({ text: "Tag pushed to GitHub" });
}
catch {
spinner.error({ text: "Failed to push tag to GitHub" });
process.exit(1);
}
}
}
catch (err) {
console.log(err);
}
readline.close();
process.exit(0);