feat(GHA): Renovate auto rebase after PR automerge enabled

This commit is contained in:
JJGadgets
2025-04-23 19:50:01 +08:00
parent f911afbc5b
commit ac793faf29

View File

@@ -6,13 +6,9 @@ name: "Renovate Rebase For Automerge"
on:
workflow_dispatch:
pull_request:
types: ["auto_merge_enabled"]
types: ["auto_merge_enabled", "closed"]
branches: ["main"]
# concurrency:
# group: "renovate-rebase-automerge"
# cancel-in-progress: false
jobs:
rebase-after:
name: Rebase
@@ -27,69 +23,21 @@ jobs:
private-key: "${{ secrets.BOT_JWT_PRIVATE_KEY }}" # $BOT_JWT_PRIVATE_KEY is generated in GitHub App main settings page, uses the X.509 private key format
owner: "${{ github.repository_owner }}"
- name: Update branch
- name: Update branch if merged
if: github.event.pull_request.merged == true
env:
GITHUB_TOKEN: "${{ steps.oauth-token.outputs.token }}"
shell: bash
run: |
rebase () {
gh api --method PUT /repos/${{ github.event.pull_request.base.repo.full_name }}/pulls/${{ github.event.pull_request.number }}/update-branch --field expected_head_sha=${{ github.event.pull_request.head.sha }}
}
getRebaseRuns () {
echo "\
$(gh run list --repo ${{ github.event.pull_request.base.repo.full_name }} --workflow=renovate-rebase.yaml --status in_progress --json headBranch --jq '.[].headBranch')\
$(gh run list --repo ${{ github.event.pull_request.base.repo.full_name }} --workflow=renovate-rebase.yaml --status queued --json headBranch --jq '.[].headBranch')\
$(gh run list --repo ${{ github.event.pull_request.base.repo.full_name }} --workflow=renovate-rebase.yaml --status waiting --json headBranch --jq '.[].headBranch')\
$(gh run list --repo ${{ github.event.pull_request.base.repo.full_name }} --workflow=renovate-rebase.yaml --status requested --json headBranch --jq '.[].headBranch')\
$(gh run list --repo ${{ github.event.pull_request.base.repo.full_name }} --workflow=renovate-rebase.yaml --status pending --json headBranch --jq '.[].headBranch')\
" | grep '\S' || echo -n ''
}
getOtherRuns () {
echo "\
$(gh run list --repo ${{ github.event.pull_request.base.repo.full_name }} --workflow=kube-flux-diff.yaml --status in_progress --json headBranch --jq '.[].headBranch')\
$(gh run list --repo ${{ github.event.pull_request.base.repo.full_name }} --workflow=kube-flux-diff.yaml --status queued --json headBranch --jq '.[].headBranch')\
$(gh run list --repo ${{ github.event.pull_request.base.repo.full_name }} --workflow=kube-flux-diff.yaml --status waiting --json headBranch --jq '.[].headBranch')\
$(gh run list --repo ${{ github.event.pull_request.base.repo.full_name }} --workflow=kube-flux-diff.yaml --status requested --json headBranch --jq '.[].headBranch')\
$(gh run list --repo ${{ github.event.pull_request.base.repo.full_name }} --workflow=kube-flux-diff.yaml --status pending --json headBranch --jq '.[].headBranch')\
" | grep '\S' || echo -n ''
}
getOtherRunsCount () {
echo -n "$(getOtherRuns | wc -l)"
}
rebaseRuns="$(getRebaseRuns)"
getOtherRuns
getOtherRunsCount
while true; do
if [[ "${rebaseRuns}" == "1" ]]; then
echo "only run, rebase early and leave";
rebase;
break;
fi
getOtherRuns
runsCount="$(getOtherRunsCount)"
echo "run 1 $runsCount"
if [[ "${runsCount}" == "0" ]]; then # 1 run because current
sleep 10
getOtherRuns
runsCount2="$(getOtherRunsCount)"
echo "run 2 $runsCount2"
if [[ "${runsCount2}" == "0" ]]; then
sleep 10
getOtherRuns
runsCount3="$(getOtherRunsCount)"
echo "run 3 $runsCount3"
if [[ "${runsCount3}" == "0" ]]; then
echo "pass all 3, run";
rebase;
break;
else
echo "not yet at $(date -I), pass 2"
fi
else
echo "not yet at $(date -I), pass 1"
fi
else
echo "not yet at $(date -I), all fail"
fi
sleep 1
for i in $(gh pr list --repo ${{ github.event.pull_request.base.repo.full_name }} --author "tinfoild[bot]" --json title,number,autoMergeRequest,headRefName | jq '.[] | select((.autoMergeRequest != null) and (.headRefName | startswith("renovate/"))) | .number'); do
sha=$(gh pr view ${i} --json headRefOid --jq '.headRefOid' --repo ${{ github.event.pull_request.base.repo.full_name }})
gh api --method PUT /repos/${{ github.event.pull_request.base.repo.full_name }}/pulls/${i}/update-branch --field expected_head_sha=${sha}
done
- name: Update branch if automerge enabled
if: github.event.action == auto_merge_enabled
env:
GITHUB_TOKEN: "${{ steps.oauth-token.outputs.token }}"
shell: bash
run: |
gh api --method PUT /repos/${{ github.event.pull_request.base.repo.full_name }}/pulls/${{ github.event.pull_request.number }}/update-branch --field expected_head_sha=${{ github.event.pull_request.head.sha }}