From b6f55fadbf9e3fd167096b1564c3d5c826f79e2b Mon Sep 17 00:00:00 2001 From: carlos-alm <127798846+carlos-alm@users.noreply.github.com> Date: Tue, 3 Mar 2026 03:23:17 -0700 Subject: [PATCH] fix: prevent duplicate benchmark PRs on stable releases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Benchmark workflow triggers on any Publish workflow completion. During a stable release, both a dev-push Publish (from merging PRs) and the release-event Publish complete successfully, each spawning a Benchmark run that resolves to the same stable version via git tag lookup — creating duplicate PRs. Two fixes: 1. Filter workflow_run triggers to exclude push-initiated Publish completions (dev builds should not benchmark the latest stable tag) 2. Check for existing open PRs before creating new ones as a safety net --- .github/workflows/benchmark.yml | 72 ++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 24 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index a63ca54c..e797211b 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -17,7 +17,8 @@ jobs: runs-on: ubuntu-latest if: >- github.event_name == 'workflow_dispatch' || - github.event.workflow_run.conclusion == 'success' + (github.event.workflow_run.conclusion == 'success' && + github.event.workflow_run.event != 'push') permissions: actions: read contents: write @@ -139,17 +140,23 @@ jobs: git commit -m "docs: update build performance benchmarks (${VERSION})" git push origin "$BRANCH" - gh pr create \ - --base main \ - --head "$BRANCH" \ - --title "docs: update build performance benchmarks (${VERSION})" \ - --body "Automated build benchmark update for **${VERSION}** from workflow run [#${{ github.run_number }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})." + TITLE="docs: update build performance benchmarks (${VERSION})" + if gh pr list --state open --json title --jq ".[].title" | grep -qF "$TITLE"; then + echo "::notice::PR already open for '$TITLE' — skipping" + else + gh pr create \ + --base main \ + --head "$BRANCH" \ + --title "$TITLE" \ + --body "Automated build benchmark update for **${VERSION}** from workflow run [#${{ github.run_number }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})." + fi embedding-benchmark: runs-on: ubuntu-latest if: >- github.event_name == 'workflow_dispatch' || - github.event.workflow_run.conclusion == 'success' + (github.event.workflow_run.conclusion == 'success' && + github.event.workflow_run.event != 'push') permissions: actions: read contents: write @@ -284,17 +291,23 @@ jobs: git commit -m "docs: update embedding benchmarks (${VERSION})" git push origin "$BRANCH" - gh pr create \ - --base main \ - --head "$BRANCH" \ - --title "docs: update embedding benchmarks (${VERSION})" \ - --body "Automated embedding benchmark update for **${VERSION}** from workflow run [#${{ github.run_number }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})." + TITLE="docs: update embedding benchmarks (${VERSION})" + if gh pr list --state open --json title --jq ".[].title" | grep -qF "$TITLE"; then + echo "::notice::PR already open for '$TITLE' — skipping" + else + gh pr create \ + --base main \ + --head "$BRANCH" \ + --title "$TITLE" \ + --body "Automated embedding benchmark update for **${VERSION}** from workflow run [#${{ github.run_number }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})." + fi query-benchmark: runs-on: ubuntu-latest if: >- github.event_name == 'workflow_dispatch' || - github.event.workflow_run.conclusion == 'success' + (github.event.workflow_run.conclusion == 'success' && + github.event.workflow_run.event != 'push') permissions: actions: read contents: write @@ -415,17 +428,23 @@ jobs: git commit -m "docs: update query benchmarks (${VERSION})" git push origin "$BRANCH" - gh pr create \ - --base main \ - --head "$BRANCH" \ - --title "docs: update query benchmarks (${VERSION})" \ - --body "Automated query benchmark update for **${VERSION}** from workflow run [#${{ github.run_number }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})." + TITLE="docs: update query benchmarks (${VERSION})" + if gh pr list --state open --json title --jq ".[].title" | grep -qF "$TITLE"; then + echo "::notice::PR already open for '$TITLE' — skipping" + else + gh pr create \ + --base main \ + --head "$BRANCH" \ + --title "$TITLE" \ + --body "Automated query benchmark update for **${VERSION}** from workflow run [#${{ github.run_number }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})." + fi incremental-benchmark: runs-on: ubuntu-latest if: >- github.event_name == 'workflow_dispatch' || - github.event.workflow_run.conclusion == 'success' + (github.event.workflow_run.conclusion == 'success' && + github.event.workflow_run.event != 'push') permissions: actions: read contents: write @@ -546,8 +565,13 @@ jobs: git commit -m "docs: update incremental benchmarks (${VERSION})" git push origin "$BRANCH" - gh pr create \ - --base main \ - --head "$BRANCH" \ - --title "docs: update incremental benchmarks (${VERSION})" \ - --body "Automated incremental benchmark update for **${VERSION}** from workflow run [#${{ github.run_number }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})." + TITLE="docs: update incremental benchmarks (${VERSION})" + if gh pr list --state open --json title --jq ".[].title" | grep -qF "$TITLE"; then + echo "::notice::PR already open for '$TITLE' — skipping" + else + gh pr create \ + --base main \ + --head "$BRANCH" \ + --title "$TITLE" \ + --body "Automated incremental benchmark update for **${VERSION}** from workflow run [#${{ github.run_number }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})." + fi