-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
build: Refactor scripts to support multi-module log generation
- Loading branch information
Showing
5 changed files
with
197 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/** | ||
* 模块及对应路径 | ||
*/ | ||
const packagesMap = { | ||
core: 'packages/core', | ||
cli: 'packages/cli', | ||
main: 'packages/main', | ||
utils: 'packages/utils', | ||
renew: 'plugins/renew', | ||
} | ||
|
||
/** | ||
* 版本 emoji 标识 | ||
*/ | ||
const semverSymbol = { | ||
Major: '🎉', | ||
Minor: '🚀', | ||
Patch: '🌟', | ||
} | ||
|
||
/** | ||
* 显示的日志类型 | ||
* // (revert: )?(feat|fix|docs|dx|style|refactor|perf|test|workflow|build|ci|chore|types|wip) | ||
*/ | ||
const messagesType = ['feat', 'fix', 'perf', 'refactor', 'docs'] | ||
|
||
/** | ||
* changeset 默认变更日志 (待替换) | ||
*/ | ||
const defaultChangeLog = `- update.` | ||
|
||
module.exports = { | ||
packagesMap, | ||
semverSymbol, | ||
messagesType, | ||
defaultChangeLog, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
const fs = require('fs') | ||
const path = require('path') | ||
const { packagesMap, semverSymbol, messagesType, defaultChangeLog } = require('./config') | ||
|
||
/** | ||
* 读取模块文件内容 | ||
* | ||
* @param {string} name 模块名 | ||
* @param {string} filename 文件名 | ||
* @returns {Promise} | ||
*/ | ||
function readPackageFile(name, filename) { | ||
return new Promise((resolve, reject) => { | ||
const filePath = path.resolve(__dirname, '../', packagesMap[name], filename || 'CHANGELOG.md') | ||
fs.readFile(filePath, 'utf8', (err, data) => { | ||
if (err) { | ||
reject(err) | ||
} | ||
resolve(data) | ||
}) | ||
}) | ||
} | ||
|
||
/** | ||
* 写入模块文件内容 | ||
* | ||
* @param {string} name 模块名 | ||
* @param {string} filename 文件名 | ||
* @returns {Promise} | ||
*/ | ||
function writePackageFile(name, data, filename) { | ||
return new Promise((resolve, reject) => { | ||
fs.writeFile( | ||
path.resolve(__dirname, '../', packagesMap[name], filename || 'CHANGELOG.md'), | ||
data, | ||
(err) => { | ||
if (err) { | ||
reject(err) | ||
} | ||
resolve() | ||
} | ||
) | ||
}) | ||
} | ||
|
||
/** | ||
* 日志排序 | ||
* | ||
* @param {Array.<string>} logs 日志列表 | ||
* @returns {Array.<string>} | ||
*/ | ||
function sortLogsByType(logs) { | ||
const msgRegex = new RegExp(`- (${messagesType.join('|')}):[\\s\\S]+`) | ||
return logs | ||
.reduce((acc, cur) => { | ||
const type = cur.match(msgRegex)?.[1] | ||
const index = messagesType.indexOf(type) | ||
if (index > -1) { | ||
acc[index].push(cur) | ||
} | ||
return acc | ||
}, messagesType.map(() => []).concat([[]])) | ||
.reduce((acc, cur) => acc.concat(cur), []) | ||
} | ||
|
||
/** | ||
* 更新日志内容 | ||
* | ||
* @param {string} content 日志内容 | ||
* @param {string} version 版本号 | ||
* @param {Array.<string>} logs 日志列表 | ||
* @returns {Promise} | ||
*/ | ||
function updateChangelog(content, version, logs) { | ||
const [v1, v2, v3] = version.split('.') | ||
const regex = new RegExp(`## ${v1}\\.${v2}\\.${v3}[\\s]*### (Patch|Minor|Major) Changes\\n`) | ||
logStr = sortLogsByType(logs).join('\n') | ||
|
||
return content | ||
.replace(regex, (match, p1) => { | ||
// console.log('replace : ', match, p1) | ||
return match.replace('Changes', 'Changes ' + semverSymbol[p1]) | ||
// return match + ' ' + semverSymbol[p1] | ||
}) | ||
.replace(defaultChangeLog, logStr) | ||
} | ||
|
||
/** | ||
* 读取JSON文件内容 | ||
* | ||
* @param {string} name 模块名 | ||
* @param {string} filename 文件名 | ||
* @returns {Promise} | ||
*/ | ||
function readPackageJson(name, filename) { | ||
return readPackageFile(name, filename || 'package.json').then((data) => JSON.parse(data)) | ||
} | ||
|
||
module.exports = { | ||
readPackageFile, | ||
writePackageFile, | ||
readPackageJson, | ||
updateChangelog, | ||
sortLogsByType, | ||
} |