updateChangelog.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const fs = require('fs');
  2. const path = require('path');
  3. const changelog = fs.readFileSync(path.join(__dirname, '../CHANGELOG.md'), 'utf8');
  4. const typeList = [
  5. { type: 'fix', icon: '🐛' },
  6. { type: 'feat', icon: '✨' },
  7. { type: 'chore', icon: '👷' },
  8. { type: 'docs', icon: '📝 ' },
  9. { type: 'style', icon: '💄' },
  10. { type: 'refactor', icon: '🎨' },
  11. { type: 'perf', icon: '⚡' },
  12. { type: 'test', icon: '✅ ' }
  13. ];
  14. const replaceMd = {
  15. content: '',
  16. setContent(content) {
  17. replaceMd.content = content;
  18. return replaceMd;
  19. },
  20. getContent() {
  21. return replaceMd.content;
  22. },
  23. //版本号改成二级标题
  24. changeTitle() {
  25. replaceMd.content = replaceMd.content.replace(/### (?=\[\d\.\d\.\d\])/g, '## ');
  26. return replaceMd;
  27. },
  28. //修改日期位置
  29. changeDate() {
  30. replaceMd.content = replaceMd.content.replace(/(?<=\[\d\.\d\.\d\]\([\s\S]+\)) \((\d\d\d\d\-\d\d\-\d\d)\)(?=\n)/g, '\n`$1`');
  31. return replaceMd;
  32. },
  33. //增加type内容
  34. changeType() {
  35. function replaceType(type, icon) {
  36. replaceMd.content = replaceMd.content.replace(new RegExp(`(?<=### ${type}\\n\\n)\\* ([\\s\\S]+?)\\n+(?=[###|##])`, 'g'), function(match) {
  37. return match.replace(new RegExp(`\\* ([\\s\\S]+?)(?=\\n)`, 'g'), `* ${icon} ${type}: $1`);
  38. });
  39. }
  40. typeList.forEach(e => {
  41. replaceType(e.type, e.icon);
  42. });
  43. return replaceMd;
  44. },
  45. //删除type标题
  46. deleteType() {
  47. typeList.forEach(e => {
  48. replaceMd.content = replaceMd.content.replace(new RegExp(`### ${e.type}\\n+`, 'g'), '');
  49. });
  50. return replaceMd;
  51. }
  52. };
  53. const newChangelog = replaceMd
  54. .setContent(changelog)
  55. .changeTitle()
  56. .changeDate()
  57. .changeType()
  58. .deleteType();
  59. fs.writeFileSync(path.join(__dirname, '../CHANGELOG.md'), newChangelog.getContent(), 'utf8');