Skip to content

Commit c70860f

Browse files
authored
Update: group commits by types in release log (fixes #46) (#47)
1 parent 3826b57 commit c70860f

File tree

2 files changed

+55
-2
lines changed

2 files changed

+55
-2
lines changed

lib/release-ops.js

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,30 @@ function generateRelease(prereleaseId) {
373373
fs.writeFileSync(".eslint-release-info.json", JSON.stringify(releaseInfo, null, 4));
374374
}
375375

376+
/**
377+
* Creates release body text from a changelog information.
378+
* @param {Object} [changelog] The changelog information.
379+
* @returns {string} THe release body text
380+
*/
381+
function generateReleaseBody(changelog) {
382+
const logFlags = [
383+
{ flag: "breaking", title: "Breaking Changes" },
384+
{ flag: "new", title: "Features" },
385+
{ flag: "update", title: "Enhancements" },
386+
{ flag: "fix", title: "Bug Fixes" },
387+
{ flag: "docs", title: "Documentation" },
388+
{ flag: "upgrade", title: "Dependency Upgrades" },
389+
{ flag: "build", title: "Build Related" },
390+
{ flag: "chore", title: "Chores" }
391+
];
392+
393+
return logFlags
394+
.map(({ flag, title }) => ({ title, logs: changelog[flag] }))
395+
.filter(({ logs }) => logs && logs.length > 0)
396+
.map(({ title, logs }) => `## ${title}\n${logs.join("\n")}`)
397+
.join("\n\n");
398+
}
399+
376400
/**
377401
* Publishes the release information to GitHub.
378402
* @param {Object} releaseInfo The release information object.
@@ -388,7 +412,7 @@ function publishReleaseToGitHub(releaseInfo) {
388412

389413
return repo.createRelease({
390414
tag_name: tag, // eslint-disable-line camelcase
391-
body: releaseInfo.rawChangelog,
415+
body: generateReleaseBody(releaseInfo.changelog),
392416
prerelease: !!semver.prerelease(releaseInfo.version)
393417
}).then(() => {
394418
console.log("Posted release notes to GitHub");
@@ -462,5 +486,6 @@ module.exports = {
462486
calculateReleaseInfo,
463487
getChangelogCommitRange,
464488
calculateReleaseFromGitLogs,
465-
writeChangelog
489+
writeChangelog,
490+
generateReleaseBody
466491
};

tests/lib/release-ops.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,4 +342,32 @@ describe("ReleaseOps", () => {
342342
});
343343
});
344344

345+
describe("generateReleaseBody()", () => {
346+
it("generates a changelog grouped by types", () => {
347+
const changelog = {
348+
fix: [
349+
"* [`196d32d`](https://github.com/eslint/eslint-release/commit/196d32dbfb7cb37b886e7c4ba0adff499c6b26ac) Fix: Something else (Abc D. Efg)"
350+
],
351+
docs: [
352+
"* [`0c07d6a`](https://github.com/eslint/eslint-release/commit/0c07d6ac037076557e34d569cd0290e529b3318a) Docs: Something else (Committer Name)"
353+
],
354+
breaking: [
355+
"* [`7e8a43b`](https://github.com/eslint/eslint-release/commit/7e8a43b2b6350e13a61858f33b4099c964cdd758) Breaking: Remove API (githubhandle)"
356+
]
357+
},
358+
generateReleaseBody = ReleaseOps.generateReleaseBody;
359+
360+
assert.strictEqual(generateReleaseBody(changelog), [
361+
"## Breaking Changes",
362+
"* [`7e8a43b`](https://github.com/eslint/eslint-release/commit/7e8a43b2b6350e13a61858f33b4099c964cdd758) Breaking: Remove API (githubhandle)",
363+
"",
364+
"## Bug Fixes",
365+
"* [`196d32d`](https://github.com/eslint/eslint-release/commit/196d32dbfb7cb37b886e7c4ba0adff499c6b26ac) Fix: Something else (Abc D. Efg)",
366+
"",
367+
"## Documentation",
368+
"* [`0c07d6a`](https://github.com/eslint/eslint-release/commit/0c07d6ac037076557e34d569cd0290e529b3318a) Docs: Something else (Committer Name)"
369+
].join("\n"));
370+
});
371+
});
372+
345373
});

0 commit comments

Comments
 (0)