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,