Skip to content

Commit 00796b9

Browse files
authored
Merge pull request #25 from dscho/guess-bash-notes-correctly
Improve the logic to guess release notes in `/add release note`
2 parents 28cca96 + 67931fe commit 00796b9

3 files changed

Lines changed: 53 additions & 8 deletions

File tree

GitForWindowsHelper/component-updates.js

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,44 @@ const needsSeparateARM64Build = package_name => {
5151
].includes(package_name)
5252
}
5353

54-
const guessReleaseNotes = (issue) => {
54+
const guessReleaseNotes = async (context, issue) => {
5555
if (!issue.pull_request
5656
&&issue.labels.filter(label => label.name === 'component-update').length !== 1) throw new Error(`Cannot determine release note from issue ${issue.number}`)
57-
let { package_name, version } = guessComponentUpdateDetails(issue.title)
57+
let { package_name, version } = guessComponentUpdateDetails(issue.title, issue.body)
5858

5959
package_name = prettyPackageName(package_name.replace(/^mingw-w64-/, ''))
6060

61-
const urlMatch = issue.pull_request
62-
? issue.body.match(/See (https:\/\/\S+) for details/)
63-
: issue.body.match(/(?:^|\n)(https:\/\/\S+)$/)
64-
if (!urlMatch) throw new Error(`Could not determine URL from issue ${issue.number}`)
61+
const matchURLInIssue = (issue) => {
62+
const match = issue.body.match(package_name.toLowerCase() === 'bash'
63+
? /(?:^|\n)(https:\/\/\S+)/ // for `bash`, use the first URL
64+
: /(?:^|\n)(https:\/\/\S+)$/)
65+
return match && match[1]
66+
}
67+
68+
const matchURL = async () => {
69+
if (!issue.pull_request) return matchURLInIssue(issue)
70+
71+
const match = issue.body.match(/See (https:\/\/\S+) for details/)
72+
if (match) return match[1]
73+
74+
const issueMatch = issue.body.match(/https:\/\/github\.com\/git-for-windows\/git\/issues\/(\d+)/)
75+
if (issueMatch) {
76+
const githubApiRequest = require('./github-api-request')
77+
const issue = await githubApiRequest(
78+
context,
79+
null,
80+
'GET',
81+
`/repos/git-for-windows/git/issues/${issueMatch[1]}`
82+
)
83+
return matchURLInIssue(issue)
84+
}
85+
}
86+
87+
const url = await matchURL()
88+
if (!url) throw new Error(`Could not determine URL from issue ${issue.number}`)
6589
return {
6690
type: 'feature',
67-
message: `Comes with [${package_name} v${version}](${urlMatch[1]}).`
91+
message: `Comes with [${package_name} v${version}](${url}).`
6892
}
6993
}
7094

GitForWindowsHelper/slash-commands.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ module.exports = async (context, req) => {
311311
let [ , , , type, message ] = relNotesMatch
312312
if (!type) {
313313
const { guessReleaseNotes } = require('./component-updates');
314-
({ type, message } = await guessReleaseNotes(req.body.issue))
314+
({ type, message } = await guessReleaseNotes(context, req.body.issue))
315315
}
316316

317317
await thumbsUp()

test-guess-relnote.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/env node
2+
3+
(async () => {
4+
// Expect a URL
5+
const url = process.argv[2]
6+
const match = url.match(/^https:\/\/github\.com\/([^/]+)\/([^/]+)\/(?:issues|pulls?)\/(\d+)\/?$/)
7+
if (!match) throw new Error(`Unhandled URL: ${url}`)
8+
const [, owner, repo, number ] = match
9+
10+
const githubApiRequest = require('./GitForWindowsHelper/github-api-request')
11+
const issue = await githubApiRequest(
12+
console,
13+
null,
14+
'GET',
15+
`/repos/${owner}/${repo}/issues/${number}`
16+
)
17+
18+
const { guessReleaseNotes } = require('./GitForWindowsHelper/component-updates')
19+
const guessed = await guessReleaseNotes(console, issue)
20+
console.log(JSON.stringify(guessed, null, 2))
21+
})().catch(console.log)

0 commit comments

Comments
 (0)