From 6b5b44926044db50dd30c142e3d9cdf209bf26f9 Mon Sep 17 00:00:00 2001 From: Pigbibi <20649888+Pigbibi@users.noreply.github.com> Date: Tue, 25 Aug 2026 20:20:02 +0800 Subject: [PATCH] fix(deps): refresh stale staged QPK pin branches Co-Authored-By: Codex --- .github/workflows/advance-staged-qpk-pin.yml | 17 ++++++++++++++++- tests/test_update_qpk_pin_workflow.py | 3 +++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/.github/workflows/advance-staged-qpk-pin.yml b/.github/workflows/advance-staged-qpk-pin.yml index 8c18735..b5023cd 100644 --- a/.github/workflows/advance-staged-qpk-pin.yml +++ b/.github/workflows/advance-staged-qpk-pin.yml @@ -111,11 +111,26 @@ jobs: if: steps.pr.outputs.number != '' run: cat staged-pin-summary.md >> "$GITHUB_STEP_SUMMARY" - - name: Queue validated staged pin for merge + - name: Refresh or queue validated staged pin if: steps.guard.outputs.allowed == 'true' env: GH_TOKEN: ${{ secrets.QSL_REPO_SYNC_TOKEN || github.token }} run: | + set -euo pipefail + merge_state=$(gh pr view "${{ steps.pr.outputs.number }}" \ + --repo "$GITHUB_REPOSITORY" --json mergeStateStatus --jq '.mergeStateStatus') + if [ "$merge_state" = "BEHIND" ]; then + gh api --method PUT \ + "repos/$GITHUB_REPOSITORY/pulls/${{ steps.pr.outputs.number }}/update-branch" \ + -f expected_head_sha="${{ steps.pr.outputs.head_sha }}" >/dev/null + echo "Validated staged pin branch was behind main; requested branch update before merge." \ + >> "$GITHUB_STEP_SUMMARY" + exit 0 + fi + if [ "$merge_state" != "CLEAN" ]; then + echo "Staged QPK pin is not mergeable yet: $merge_state." >> "$GITHUB_STEP_SUMMARY" + exit 0 + fi gh pr merge "${{ steps.pr.outputs.number }}" \ --repo "$GITHUB_REPOSITORY" \ --auto --rebase --delete-branch \ diff --git a/tests/test_update_qpk_pin_workflow.py b/tests/test_update_qpk_pin_workflow.py index f1e1577..d90119a 100644 --- a/tests/test_update_qpk_pin_workflow.py +++ b/tests/test_update_qpk_pin_workflow.py @@ -271,5 +271,8 @@ def test_staged_pin_auto_advance_is_limited_to_verified_machine_prs() -> None: assert "candidate_is_not_on_main_history" in workflow assert "actions/checkout" not in workflow assert "secrets.QSL_REPO_SYNC_TOKEN || github.token" in workflow + assert "mergeStateStatus" in workflow + assert "/update-branch" in workflow + assert "expected_head_sha" in workflow assert "--auto --rebase --delete-branch" in workflow assert "--match-head-commit" in workflow