release.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. const fs = require('fs')
  2. const _ = require('lodash')
  3. const github = require('@actions/github');
  4. const { Octokit } = require('@octokit/rest');
  5. const core = require('@actions/core');
  6. const { info, error } = core;
  7. const pathArr = process.env.CHANGELOG_PATH.replace(/ /g, '').split(',')
  8. const { owner, repo } = github.context.repo;
  9. const { ref: version } = github.context.payload;
  10. const versionNo = version.substr(1) // 'v1.0.0' -> '1.0.0'
  11. const genVersionChangeLog = (path, targetVersion) => {
  12. const changelogRaw = fs.readFileSync(path, 'utf-8')
  13. const lines = changelogRaw.split('\n');
  14. let changeLogLines = [];
  15. const stopPattern = /^#### /; // 前一个版本
  16. let begin = false;
  17. for (let i = 0; i < lines.length; i += 1) {
  18. const line = lines[i];
  19. if (begin && stopPattern.test(line)) {
  20. break;
  21. }
  22. if (begin) {
  23. changeLogLines.push(line);
  24. }
  25. if (!begin) {
  26. if (line.startsWith('####')) {
  27. const versionReg = /.*((\d{1,2}\.){2}\d{1,2}(-\w+\.\d+)?)/;
  28. let result = versionReg.exec(line);
  29. begin = _.get(result, '1', '').trim().toLowerCase() === targetVersion
  30. }
  31. }
  32. }
  33. return changeLogLines.join('\n')
  34. }
  35. async function main() {
  36. try {
  37. const versionChangelog = pathArr.map((path) => {
  38. let changelog = genVersionChangeLog(path, versionNo)
  39. return changelog
  40. }).join('\n---\n')
  41. const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN });
  42. await octokit.repos.createRelease({
  43. owner,
  44. repo,
  45. tag_name: version,
  46. name: version,
  47. body: versionChangelog,
  48. prerelease: version.includes('beta'),
  49. });
  50. info(`${version} released`)
  51. } catch (err) {
  52. error(err)
  53. }
  54. }
  55. main()