generate-changelog.ts
2.22 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
import { execSync } from "child_process";
import { readFileSync, writeFileSync } from "fs";
import { resolve } from "path";
const { version: lastVersion } = require("../package.json");
const changeLogPath = resolve(__dirname, "../CHANGELOG.md");
let newVersion = lastVersion;
console.log("Gets Release Version from GITHUB_EVENT_PATH");
if (process.env.GITHUB_EVENT_PATH) {
const {
pull_request: { title },
} = require(process.env.GITHUB_EVENT_PATH);
if (/^release/i.test(title))
newVersion = (title as string).match(/release ([\d\.]+)/i)[1];
else {
console.log("Not target pull request, exiting");
process.exit(0);
}
}
console.log(`New Version: ${newVersion}`);
console.log("Bump Version");
execSync(`npm version ${newVersion}`);
const gitLogOutput = execSync(
`git log v${lastVersion}... --format=%s`
).toString("utf-8");
const commitsArray = gitLogOutput
.split("\n")
.filter((message) => message && message !== "");
const category = {
miscs: [] as string[],
features: [] as string[],
bugFixes: [] as string[],
};
commitsArray.forEach((message) => {
let cat: keyof typeof category;
if (/^([\d\.]+)$/.test(message)) {
return;
} else if (message.includes("test")) {
cat = "miscs";
} else if (/(add)|(support)/i.test(message)) {
cat = "features";
} else if (/fix/i.test(message)) {
cat = "bugFixes";
} else {
cat = "miscs";
}
category[cat].push(`* ${message}`);
});
const now = new Date();
const MonthText = [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
];
let newChangelog = `## ${newVersion} (${now.getDate()} ${
MonthText[now.getMonth()]
} ${now.getFullYear()})
`;
if (category.features.length > 0) {
newChangelog += `
### Feature
${category.features.join("\n")}
`;
}
if (category.bugFixes.length > 0) {
newChangelog += `
### Bug fix
${category.bugFixes.join("\n")}
`;
}
if (category.miscs.length > 0) {
newChangelog += `
### Misc
${category.miscs.join("\n")}
`;
}
const currentChangelog = readFileSync(changeLogPath, "utf-8");
writeFileSync(
changeLogPath,
`${newChangelog}
${currentChangelog}`
);