Skip to content

Commit 621058c

Browse files
committed
feat: add header field to output releases
1 parent 40f6acb commit 621058c

File tree

2 files changed

+31
-9
lines changed

2 files changed

+31
-9
lines changed

src/changelog-parser.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
// @flow
22

3-
const versionRx = `v?\\d+\\.\\d+(\\.\\d+(-[-a-z0-9.]+)?)?`
3+
const versionRx = `\\[?v?\\d+\\.\\d+(\\.\\d+(-[-a-z0-9.]+)?)?\\]?`
44

55
export type Release = {
66
version: string,
7+
header: string,
78
body?: string,
89
date?: Date,
910
error?: Error,
@@ -19,11 +20,14 @@ export default function parseChangelog(text: string): { [string]: Release } {
1920
let start = 0
2021
let release: ?Release
2122
while ((match = versionHeaderRx.exec(text))) {
22-
// console.log(match)
23-
let version = match[1] || match[5]
23+
const rawVersion = match[1] || match[5]
24+
let version = rawVersion.replace(/\[|\]/g, '')
2425
if (!match[2] && !match[6]) version += '.0'
2526
if (release) release.body = text.substring(start, match.index).trim()
26-
release = { version }
27+
release = {
28+
version,
29+
header: `${rawVersion}${match[4] || match[8] || ''}`.trim(),
30+
}
2731
result[version] = release
2832
start = match.index + match[0].length
2933
}

src/index.js

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,11 @@ export async function whatBroke(
8686
}
8787
prevVersion = version
8888

89-
const release: Release = { version, date: new Date(npmInfo.time[version]) }
89+
const release: Release = {
90+
version,
91+
header: version,
92+
date: new Date(npmInfo.time[version]),
93+
}
9094
releases.push(release)
9195

9296
const { url } =
@@ -99,14 +103,28 @@ export async function whatBroke(
99103
const { owner, repo } = parseRepositoryUrl(url)
100104

101105
try {
102-
release.body = (await octokit.repos.getReleaseByTag({
106+
const body = (await octokit.repos.getReleaseByTag({
103107
owner,
104108
repo,
105109
tag: `v${version}`,
106110
})).data.body
111+
112+
release.body = body
113+
114+
const parsed = parseChangelog(body)
115+
for (let v in parsed) {
116+
if (v === version) {
117+
const { header, body } = parsed[v]
118+
release.header = header
119+
release.body = body
120+
break
121+
}
122+
}
107123
} catch (error) {
108124
const changelog = await getChangelog(owner, repo)
109-
if (changelog[version]) release.body = changelog[version].body
125+
const { header, body } = changelog[version] || {}
126+
release.header = header
127+
release.body = body
110128
}
111129
if (!release.body) {
112130
release.error = new Error(
@@ -143,8 +161,8 @@ if (!module.parent) {
143161
/* eslint-env node */
144162
whatBroke(pkg, { fromVersion, toVersion, full }).then(
145163
(changelog: Array<Release>) => {
146-
for (const { version, body, error } of changelog) {
147-
process.stdout.write(chalk.bold(version) + '\n\n')
164+
for (const { header, body, error } of changelog) {
165+
process.stdout.write(chalk.bold(`# ${header}`) + '\n\n')
148166
if (body) process.stdout.write(body + '\n\n')
149167
if (error) {
150168
process.stdout.write(`Failed to get changelog: ${error.stack}\n\n`)

0 commit comments

Comments
 (0)