From 775b1b632d8bbd6ac35307bb6cd161cb6968cf27 Mon Sep 17 00:00:00 2001 From: Selis Date: Sun, 25 Feb 2024 18:20:47 +0100 Subject: [PATCH] Remove guide comments workflow (#7830) --- .github/workflows/remove_guide_comments.yml | 18 ++++++++ .../pull_request_hooks/removeGuideComments.js | 41 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 .github/workflows/remove_guide_comments.yml create mode 100644 tools/pull_request_hooks/removeGuideComments.js diff --git a/.github/workflows/remove_guide_comments.yml b/.github/workflows/remove_guide_comments.yml new file mode 100644 index 0000000000..e3a4ac3fed --- /dev/null +++ b/.github/workflows/remove_guide_comments.yml @@ -0,0 +1,18 @@ +# Removes guide comments from PRs when opened, so that when we merge them +# and reuse the pull request description, the clutter is not left behind +name: Remove guide comments +on: + pull_request_target: + types: [opened] +jobs: + remove_guide_comments: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Remove guide comments + uses: actions/github-script@v6 + with: + script: | + const { removeGuideComments } = await import('${{ github.workspace }}/tools/pull_request_hooks/removeGuideComments.js') + await removeGuideComments({ github, context }) diff --git a/tools/pull_request_hooks/removeGuideComments.js b/tools/pull_request_hooks/removeGuideComments.js new file mode 100644 index 0000000000..c7cdcd1ca6 --- /dev/null +++ b/tools/pull_request_hooks/removeGuideComments.js @@ -0,0 +1,41 @@ +import fs from "fs"; + +const REGEX_COMMENT = //g; + +// Make sure we only remove default comments +const comments = []; + +for (const match of fs + .readFileSync(".github/PULL_REQUEST_TEMPLATE.md", { encoding: "utf8" }) + .matchAll(REGEX_COMMENT)) { + comments.push(match[0]); +} + +function escapeRegex(string) { + return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"); +} + +export async function removeGuideComments({ github, context }) { + let newBody = context.payload.pull_request.body; + + if (!newBody) { + console.log("PR body is empty, skipping..."); + return; + } + + for (const comment of comments) { + newBody = newBody.replace( + new RegExp(`^\\s*${escapeRegex(comment)}\\s*`, "gm"), + "\n" + ); + } + + if (newBody !== context.payload.pull_request.body) { + await github.rest.pulls.update({ + pull_number: context.payload.pull_request.number, + repo: context.repo.repo, + owner: context.repo.owner, + body: newBody, + }); + } +}