From 45bd9ec37f33a2ffd629f5b32cd180e29d84354f Mon Sep 17 00:00:00 2001 From: Daniel Lockyer Date: Mon, 10 Feb 2020 13:31:52 +0000 Subject: [PATCH] Sorted the release changelog by emoji no issue --- ghost/release-utils/lib/releases.js | 1 + ghost/release-utils/lib/utils.js | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ghost/release-utils/lib/releases.js b/ghost/release-utils/lib/releases.js index 513ba3261e..17f8697ef7 100644 --- a/ghost/release-utils/lib/releases.js +++ b/ghost/release-utils/lib/releases.js @@ -22,6 +22,7 @@ function getFinalChangelog(options) { if (filterEmojiCommits) { changelog = localUtils.filterEmojiCommits(changelog); + changelog.sortByEmoji(); } finalChangelog = finalChangelog.concat(changelog); diff --git a/ghost/release-utils/lib/utils.js b/ghost/release-utils/lib/utils.js index 316a80ff76..fdae6ae9b9 100644 --- a/ghost/release-utils/lib/utils.js +++ b/ghost/release-utils/lib/utils.js @@ -12,6 +12,8 @@ const getCommitMessageFromLine = line => line .replace(hash, '') .replace(url, ''); +const emojiOrder = ['💡', '🐛', '🎨', '💄', '✨']; + module.exports.filterEmojiCommits = (content) => { if (!_.isArray(content)) { throw new Error('Expected array of strings.'); @@ -19,7 +21,6 @@ module.exports.filterEmojiCommits = (content) => { return content.reduce((emojiLines, currentLine) => { const commitMessage = getCommitMessageFromLine(currentLine); - const match = emojiRegex().exec(commitMessage); if (match && match.index === 0) { @@ -30,6 +31,22 @@ module.exports.filterEmojiCommits = (content) => { }, []); }; +module.exports.sortByEmoji = (content) => { + if (!_.isArray(content)) { + throw new Error('Expected array of strings.'); + } + + content.sort((a, b) => { + let firstEmoji = [...a][2]; + let secondEmoji = [...b][2]; + + let firstEmojiIndex = _.indexOf(emojiOrder, firstEmoji); + let secondEmojiIndex = _.indexOf(emojiOrder, secondEmoji); + + return secondEmojiIndex - firstEmojiIndex; + }); +}; + module.exports.checkMissingOptions = (options = {}, ...requiredFields) => { const missing = requiredFields.filter((requiredField) => { return !_.get(options, requiredField);