Skip to content

Commit 12866fa

Browse files
authored
Filetered hotfix prs from release notes (#3738)
* Filetered hotfix prs from release notes * Removed filtering from map * Added filtering for hotfix release notes
1 parent 27808cc commit 12866fa

File tree

1 file changed

+36
-19
lines changed

1 file changed

+36
-19
lines changed

scripts/release/prReleaseNotesCommon.js

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const fs = require('fs');
22
const _ = require('lodash');
3+
const chalk = require('chalk');
34
const childProcess = require('child_process');
45
const readline = require('readline');
56

@@ -30,7 +31,7 @@ function parsePR(prContent) {
3031
return PRInfo;
3132
}
3233

33-
async function fetchMergedPRs(postMergedDate) {
34+
async function fetchMergedPRs(postMergedDate, _repo, isPatchRelease) {
3435
console.log('Find all merged PRs since - ', postMergedDate);
3536
// process.stderr.write(`Loading page ${page}..`);
3637
const str = childProcess.execSync('gh pr list --json headRefName,body,title,number,mergedAt,url,labels --limit 100 --state merged --search "base:master"',
@@ -44,27 +45,35 @@ async function fetchMergedPRs(postMergedDate) {
4445
console.log('\x1b[31m', 'Something went wrong', PRs.message);
4546
return;
4647
}
48+
const filteringMessageStyle = chalk.bgYellow.black;
49+
console.log(filteringMessageStyle(isPatchRelease
50+
? 'Patch release - only hotfix PRs will be included.'
51+
: 'Non-patch release - hotfix PRs will be excluded.'));
4752

4853
const relevantPRs = _.flow(prs => _.filter(prs, pr => !!pr.mergedAt && new Date(pr.mergedAt) > postMergedDate),
54+
prs => _.filter(prs, pr => {
55+
const isHotfix = pr.labels.some(label => label.name === 'hotfix');
56+
if (isHotfix && !isPatchRelease) {
57+
console.log(filteringMessageStyle(`PR ${pr.number} is a hotfix and was excluded from the release notes.`));
58+
}
59+
return isPatchRelease ? isHotfix : !isHotfix;
60+
}),
4961
prs => _.sortBy(prs, 'mergedAt'),
5062
prs =>
5163
_.map(prs, pr => {
52-
if (!pr.labels.some(label => label.name === 'hotfix')) {
53-
try {
54-
return {
55-
mergedAt: pr.mergedAt,
56-
url: pr.url,
57-
branch: pr.headRefName,
58-
number: pr.number,
59-
title: pr.title,
60-
info: parsePR(pr.body)
61-
};
62-
} catch {
63-
console.error('Failed parsing PR: ', pr.url);
64-
return null;
65-
}
64+
try {
65+
return {
66+
mergedAt: pr.mergedAt,
67+
url: pr.url,
68+
branch: pr.headRefName,
69+
number: pr.number,
70+
title: pr.title,
71+
info: parsePR(pr.body)
72+
};
73+
} catch {
74+
console.error('Failed parsing PR: ', pr.url);
75+
return null;
6676
}
67-
return null;
6877
}),
6978
prs => _.compact(prs))(PRs);
7079
return relevantPRs;
@@ -155,9 +164,9 @@ function getReleaseNotesForType(PRs, title) {
155164
return releaseNotes;
156165
}
157166

158-
async function _generateReleaseNotes(latestVersion, newVersion, fileNamePrefix, repo, header, tagPrefix, categories) {
167+
async function _generateReleaseNotes(latestVersion, newVersion, fileNamePrefix, repo, header, tagPrefix, categories, isPatchRelease) {
159168
const latestReleaseDate = fetchLatestReleaseDate(tagPrefix, latestVersion);
160-
const PRs = await fetchMergedPRs(latestReleaseDate, repo);
169+
const PRs = await fetchMergedPRs(latestReleaseDate, repo, isPatchRelease);
161170
if (!PRs) {
162171
return;
163172
}
@@ -196,6 +205,13 @@ async function _generateReleaseNotes(latestVersion, newVersion, fileNamePrefix,
196205
console.log(`\x1b[1m\x1b[32m✔\x1b[0m \x1b[32m${fileNamePrefix}-release-notes.txt was successfully written to ${process.env.HOME}/Downloads\x1b[0m \x1b[1m\x1b[32m✔\x1b[0m`);
197206
}
198207

208+
function isPatchRelease(lastVersion, newVersion) {
209+
const [lastMajor, lastMinor, lastPatch] = lastVersion.split('.').map(Number);
210+
const [newMajor, newMinor, newPatch] = newVersion.split('.').map(Number);
211+
212+
return lastMajor === newMajor && lastMinor === newMinor && newPatch - lastPatch > 0;
213+
}
214+
199215
async function generateReleaseNotes(latestVersion,
200216
newVersion,
201217
fileNamePrefix,
@@ -217,11 +233,12 @@ async function generateReleaseNotes(latestVersion,
217233
});
218234
});
219235

236+
220237
rl.on('close', () => {
221238
const header = getHeader(newVer);
222239
console.info(`Current latest version is v${latestVer}`);
223240
console.info(`Generating release notes out or PRs for v${newVer}`);
224-
_generateReleaseNotes(latestVer, newVer, fileNamePrefix, repo, header, tagPrefix, categories);
241+
_generateReleaseNotes(latestVer, newVer, fileNamePrefix, repo, header, tagPrefix, categories, isPatchRelease(latestVer, newVer));
225242
});
226243
}
227244

0 commit comments

Comments
 (0)