| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | const fs = require('fs');const _ = require('lodash');const github = require('@actions/github');const { Octokit } = require('@octokit/rest');const core = require('@actions/core');const { info, error } = core;const pathArr = process.env.CHANGELOG_PATH.replace(/ /g, '').split(',');const { owner, repo } = github.context.repo;const { ref: version } = github.context.payload;const versionNo = version.substr(1); // 'v1.0.0' -> '1.0.0'const genVersionChangeLog = (path, targetVersion) => {    const changelogRaw = fs.readFileSync(path, 'utf-8');    const lines = changelogRaw.split('\n');    let changeLogLines = [];    const stopPattern = /^#### /; // 前一个版本    let begin = false;    for (let i = 0; i < lines.length; i += 1) {        const line = lines[i];        if (begin && stopPattern.test(line)) {            break;        }        if (begin) {            changeLogLines.push(line);        }        if (!begin) {            if (line.startsWith('####')) {                const versionReg = /.*((\d{1,2}\.){2}\d{1,2}(-\w+\.\d+)?)/;                let result = versionReg.exec(line);                begin = _.get(result, '1', '').trim().toLowerCase() === targetVersion;            }        }    }    return changeLogLines.join('\n');};async function main() {    try {        const versionChangelog = pathArr.map((path) => {            let changelog = genVersionChangeLog(path, versionNo);            return changelog;        }).join('\n---\n');        const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN });        await octokit.repos.createRelease({            owner,            repo,            tag_name: version,            name: version,            body: versionChangelog,            prerelease: version.includes('beta'),        });        info(`${version} released`);    } catch (err) {        error(err);    }}main();
 |