diff --git a/.github/scripts/update-prs.js b/.github/scripts/update-prs.js new file mode 100644 index 0000000..8fcf23a --- /dev/null +++ b/.github/scripts/update-prs.js @@ -0,0 +1,34 @@ +/* Fetch all open PRs and updates them with main branch.*/ + +const updatePrs = async ({ github, context }) => { + const { repo, owner } = context.repo; + const pulls = await github.rest.pulls.list({ + owner, + repo, + state: 'open', + base: 'main', + per_page: 100 + }); + + const nonDraftPulls = pulls?.data?.filter((pr) => !pr.draft); + let updatedBranches = 0; + + if (nonDraftPulls?.length > 0) { + for (const pr of nonDraftPulls) { + try { + await github.rest.pulls.updateBranch({ + owner, + repo, + pull_number: pr.number + }); + updatedBranches++; + } catch (e) { + console.error(e); + } + } + } + + return `Updated branches: ${updatedBranches}/${nonDraftPulls.length}`; +}; + +export default updatePrs; diff --git a/.github/workflows/update-prs.yml b/.github/workflows/update-prs.yml new file mode 100644 index 0000000..389fd99 --- /dev/null +++ b/.github/workflows/update-prs.yml @@ -0,0 +1,24 @@ +--- +name: Update all PR branches if main gets update + +on: + push: + branches: + - "main" + +jobs: + update-prs: + name: Update PRs + runs-on: ubuntu-latest + steps: + - name: ⬇ Checkout repo + uses: actions/checkout@v3 + + - name: ⌚ Update PRs + id: update-prs + uses: actions/github-script@v6 + with: + script: | + const { default: updatePrs } = await import('${{ github.workspace }}/.github/scripts/update-prs.js'); + // print how many PRs are updated + console.log(await updatePrs({github, context}));