Skip to content
name: Auto Update PRs on Master Push
on:
push:
branches:
- master
jobs:
update-prs:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install GitHub CLI
run: |
sudo apt update
sudo apt install gh -y
- name: Authenticate GitHub CLI
run: |
echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token
- name: Find open PRs
id: find-prs
run: |
prs=$(gh pr list --state open --json number,headRefName --jq '.[] | select(.headRefName != "master") | {number: .number, branch: .headRefName}')
echo "prs=$(echo $prs | base64)" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Merge master into PR branches
run: |
prs=$(echo "${{ env.prs }}" | base64 --decode)
for row in $(echo "$prs" | jq -c '.'); do
pr_number=$(echo $row | jq -r '.number')
pr_branch=$(echo $row | jq -r '.branch')
echo "🔍 Checking merge status for PR #$pr_number ($pr_branch)..."
merge_status=$(gh pr view $pr_number --json mergeable --jq '.mergeable')
if [[ "$merge_status" == "CONFLICTING" ]]; then
echo "❌ Merge conflict detected in PR #$pr_number ($pr_branch). Skipping update."
else
echo "✅ No conflicts detected. Merging master into PR #$pr_number..."
git checkout $pr_branch
git merge origin/master --no-edit || { echo "❌ Merge conflict detected!"; exit 1; }
git push origin $pr_branch
fi
done
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}