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);