From 895083b8abb499e2c751186641b676fd134c0e61 Mon Sep 17 00:00:00 2001 From: Vlad Frangu Date: Thu, 2 Jun 2022 02:33:55 +0300 Subject: [PATCH] chore(Changelog): show who created the pull request that was merged (#329) * feat: say who submitted the PR that was merged * fix: actually make the changelog generation work * chore: cleanup * chore: safety * fix: fetch PRs in a better way, and replace usernames with diff casings correctly * fix: only fetch PRs if GITHUB_TOKEN is in the env * fix: add github token to branch creation * fix: actually patch the module on install * chore: cleanup some more of the PR * chore: make the script more agnostic * chore: cleanup package-lock * chore: use split instead for more readable code --- .../create-pr-for-release-and-publish.yml | 2 ++ scripts/actions/create-release.mjs | 30 +++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/.github/workflows/create-pr-for-release-and-publish.yml b/.github/workflows/create-pr-for-release-and-publish.yml index c62df23b..43fcb82a 100644 --- a/.github/workflows/create-pr-for-release-and-publish.yml +++ b/.github/workflows/create-pr-for-release-and-publish.yml @@ -54,6 +54,8 @@ jobs: git add --all . git commit -m "chore(release): $(jq --raw-output '.version' package.json) 🎉" -m "Build ran for ${GITHUB_SHA}" git push -u origin "chore/release/$(jq --raw-output '.version' package.json)" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Create Pull Request run: node ./scripts/actions/create-pr.mjs diff --git a/scripts/actions/create-release.mjs b/scripts/actions/create-release.mjs index 7d3a2dbb..b7d0ad51 100644 --- a/scripts/actions/create-release.mjs +++ b/scripts/actions/create-release.mjs @@ -5,6 +5,10 @@ import { Octokit } from '@octokit/action'; const packageJson = JSON.parse(await readFile(new URL('../../package.json', import.meta.url), { encoding: 'utf8' })); const octokit = new Octokit(); const [OWNER, REPOSITORY] = process.env.GITHUB_REPOSITORY.split('/'); +const prPattern = new RegExp( + `\\(\\[#(?\\d+)\\]\\(https:\\/\\/github\\.com\\/${OWNER}\\/${REPOSITORY}\\/(?:issues|pulls)\\/(?:\\d+)\\)\\)`, + 'gi', +); console.log('👀 Getting the previous release version'); const previousReleases = await octokit.repos.listReleases({ @@ -19,6 +23,8 @@ console.log('👀 Previous release version:', previousRelease?.tag_name); const releaseChangelog = []; const changelogContent = await readFile(new URL('../../CHANGELOG.md', import.meta.url), { encoding: 'utf8' }); +let contentToParseAndAdd = ''; + if (previousRelease) { // find difference between previous release and current version const maybeMinorIndex = changelogContent.indexOf(`## [${previousRelease.tag_name}](https://github.com`); @@ -26,14 +32,32 @@ if (previousRelease) { if (maybeMinorIndex === -1) { // find major version const maybeMajorIndex = changelogContent.indexOf(`# [${previousRelease.tag_name}](https://github.com`); - releaseChangelog.push(changelogContent.slice(0, maybeMajorIndex)); + contentToParseAndAdd = changelogContent.slice(0, maybeMajorIndex); } else { - releaseChangelog.push(changelogContent.slice(0, maybeMinorIndex)); + contentToParseAndAdd = changelogContent.slice(0, maybeMinorIndex); } } else { - releaseChangelog.push(changelogContent); + contentToParseAndAdd = changelogContent; } +for (const [input, prNumber] of contentToParseAndAdd.matchAll(prPattern)) { + try { + const prData = await octokit.pulls.get({ + owner: OWNER, + repo: REPOSITORY, + pull_number: Number(prNumber), + }); + + const replaced = input.replace('))', `) by @${prData.data.user?.login ?? 'ghost'})`); + + contentToParseAndAdd = contentToParseAndAdd.replace(input, replaced); + } catch (err) { + console.error(`Failed to fetch PR #${prNumber}`, err); + } +} + +releaseChangelog.push(contentToParseAndAdd); + const { data } = await octokit.repos.generateReleaseNotes({ owner: OWNER, repo: REPOSITORY,