Skip to content

fix(ci): reuse existing open docs PR instead of creating duplicates#1461

Merged
KyleAMathews merged 2 commits intomainfrom
fix/reuse-existing-docs-pr
Apr 7, 2026
Merged

fix(ci): reuse existing open docs PR instead of creating duplicates#1461
KyleAMathews merged 2 commits intomainfrom
fix/reuse-existing-docs-pr

Conversation

@KyleAMathews
Copy link
Copy Markdown
Collaborator

@KyleAMathews KyleAMathews commented Apr 7, 2026

Summary

The release workflow's "Commit Generated Docs" step now reuses an existing open docs PR instead of creating a duplicate each time packages are published.

Root Cause

Every release that generated docs changes created a new timestamped branch (docs/auto-update-{epoch}) and a new PR. If multiple releases happened before a docs PR was merged, stale duplicates accumulated.

Approach

Before creating a new branch, the workflow searches for an existing open PR authored by github-actions[bot] with the docs regeneration title. If found, it resets that branch to the current main (where fresh docs were just generated) and force-pushes. If not found, it creates a new branch and PR as before.

Key implementation details:

  • git checkout -B "$BRANCH" resets the existing branch to current HEAD, keeping the freshly generated docs in the working tree. A plain git checkout would fail (dirty working tree conflict) and discard the new docs.
  • --force-with-lease is needed since the branch history is rewritten to always sit on latest main.
  • git diff --cached --quiet guard exits cleanly when docs are unchanged, avoiding a git commit failure under set -e.
  • --author + in:title filters narrow the PR search to avoid matching unrelated PRs.
  • 2>/dev/null || echo "" on gh pr list ensures API failures fall back to creating a new PR.

Key Invariants

  • The docs PR branch always contains a single commit on top of the latest main where docs were generated
  • A gh pr list failure never blocks the docs update — it falls back to creating a new PR
  • The workflow exits cleanly (not with an error) when docs are unchanged

Non-goals

  • Closing stale docs PRs — maintainers can handle that manually
  • Rebasing or merging main into the existing branch — resetting to main is simpler and produces a cleaner diff

Verification

# Syntax check
actionlint .github/workflows/release.yml

Manual verification on next release:

  • When an open docs PR exists, it gets updated (not duplicated)
  • When no open docs PR exists, a new one is created
  • When docs are unchanged, the step exits cleanly

Files changed

  • .github/workflows/release.yml — Rewrote the "Commit Generated Docs" step to search for and reuse existing open docs PRs

🤖 Generated with Claude Code

The release workflow now checks for an existing open "regenerate API
documentation" PR before creating a new one. If found, it pushes new
docs changes to that PR's branch instead of spawning a duplicate.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new bot commented Apr 7, 2026

More templates

@tanstack/angular-db

npm i https://pkg.pr.new/@tanstack/angular-db@1461

@tanstack/browser-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/browser-db-sqlite-persistence@1461

@tanstack/capacitor-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/capacitor-db-sqlite-persistence@1461

@tanstack/cloudflare-durable-objects-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/cloudflare-durable-objects-db-sqlite-persistence@1461

@tanstack/db

npm i https://pkg.pr.new/@tanstack/db@1461

@tanstack/db-ivm

npm i https://pkg.pr.new/@tanstack/db-ivm@1461

@tanstack/db-sqlite-persistence-core

npm i https://pkg.pr.new/@tanstack/db-sqlite-persistence-core@1461

@tanstack/electric-db-collection

npm i https://pkg.pr.new/@tanstack/electric-db-collection@1461

@tanstack/electron-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/electron-db-sqlite-persistence@1461

@tanstack/expo-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/expo-db-sqlite-persistence@1461

@tanstack/node-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/node-db-sqlite-persistence@1461

@tanstack/offline-transactions

npm i https://pkg.pr.new/@tanstack/offline-transactions@1461

@tanstack/powersync-db-collection

npm i https://pkg.pr.new/@tanstack/powersync-db-collection@1461

@tanstack/query-db-collection

npm i https://pkg.pr.new/@tanstack/query-db-collection@1461

@tanstack/react-db

npm i https://pkg.pr.new/@tanstack/react-db@1461

@tanstack/react-native-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/react-native-db-sqlite-persistence@1461

@tanstack/rxdb-db-collection

npm i https://pkg.pr.new/@tanstack/rxdb-db-collection@1461

@tanstack/solid-db

npm i https://pkg.pr.new/@tanstack/solid-db@1461

@tanstack/svelte-db

npm i https://pkg.pr.new/@tanstack/svelte-db@1461

@tanstack/tauri-db-sqlite-persistence

npm i https://pkg.pr.new/@tanstack/tauri-db-sqlite-persistence@1461

@tanstack/trailbase-db-collection

npm i https://pkg.pr.new/@tanstack/trailbase-db-collection@1461

@tanstack/vue-db

npm i https://pkg.pr.new/@tanstack/vue-db@1461

commit: a001da6

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 7, 2026

Size Change: 0 B

Total Size: 114 kB

ℹ️ View Unchanged
Filename Size
packages/db/dist/esm/collection/change-events.js 1.39 kB
packages/db/dist/esm/collection/changes.js 1.38 kB
packages/db/dist/esm/collection/cleanup-queue.js 810 B
packages/db/dist/esm/collection/events.js 434 B
packages/db/dist/esm/collection/index.js 3.61 kB
packages/db/dist/esm/collection/indexes.js 1.99 kB
packages/db/dist/esm/collection/lifecycle.js 1.69 kB
packages/db/dist/esm/collection/mutations.js 2.47 kB
packages/db/dist/esm/collection/state.js 5.26 kB
packages/db/dist/esm/collection/subscription.js 3.74 kB
packages/db/dist/esm/collection/sync.js 2.88 kB
packages/db/dist/esm/collection/transaction-metadata.js 144 B
packages/db/dist/esm/deferred.js 207 B
packages/db/dist/esm/errors.js 4.92 kB
packages/db/dist/esm/event-emitter.js 748 B
packages/db/dist/esm/index.js 3 kB
packages/db/dist/esm/indexes/auto-index.js 830 B
packages/db/dist/esm/indexes/base-index.js 729 B
packages/db/dist/esm/indexes/basic-index.js 2.05 kB
packages/db/dist/esm/indexes/btree-index.js 2.17 kB
packages/db/dist/esm/indexes/index-registry.js 820 B
packages/db/dist/esm/indexes/reverse-index.js 538 B
packages/db/dist/esm/local-only.js 890 B
packages/db/dist/esm/local-storage.js 2.1 kB
packages/db/dist/esm/optimistic-action.js 359 B
packages/db/dist/esm/paced-mutations.js 496 B
packages/db/dist/esm/proxy.js 3.75 kB
packages/db/dist/esm/query/builder/functions.js 919 B
packages/db/dist/esm/query/builder/index.js 5.25 kB
packages/db/dist/esm/query/builder/ref-proxy.js 1.2 kB
packages/db/dist/esm/query/compiler/evaluators.js 1.62 kB
packages/db/dist/esm/query/compiler/expressions.js 430 B
packages/db/dist/esm/query/compiler/group-by.js 2.69 kB
packages/db/dist/esm/query/compiler/index.js 3.63 kB
packages/db/dist/esm/query/compiler/joins.js 2.34 kB
packages/db/dist/esm/query/compiler/order-by.js 1.72 kB
packages/db/dist/esm/query/compiler/select.js 1.11 kB
packages/db/dist/esm/query/effect.js 4.78 kB
packages/db/dist/esm/query/expression-helpers.js 1.43 kB
packages/db/dist/esm/query/ir.js 829 B
packages/db/dist/esm/query/live-query-collection.js 360 B
packages/db/dist/esm/query/live/collection-config-builder.js 7.88 kB
packages/db/dist/esm/query/live/collection-registry.js 264 B
packages/db/dist/esm/query/live/collection-subscriber.js 1.95 kB
packages/db/dist/esm/query/live/internal.js 145 B
packages/db/dist/esm/query/live/utils.js 1.64 kB
packages/db/dist/esm/query/optimizer.js 2.62 kB
packages/db/dist/esm/query/predicate-utils.js 2.97 kB
packages/db/dist/esm/query/query-once.js 359 B
packages/db/dist/esm/query/subset-dedupe.js 960 B
packages/db/dist/esm/scheduler.js 1.3 kB
packages/db/dist/esm/SortedMap.js 1.3 kB
packages/db/dist/esm/strategies/debounceStrategy.js 247 B
packages/db/dist/esm/strategies/queueStrategy.js 428 B
packages/db/dist/esm/strategies/throttleStrategy.js 246 B
packages/db/dist/esm/transactions.js 2.9 kB
packages/db/dist/esm/utils.js 927 B
packages/db/dist/esm/utils/array-utils.js 273 B
packages/db/dist/esm/utils/browser-polyfills.js 304 B
packages/db/dist/esm/utils/btree.js 5.61 kB
packages/db/dist/esm/utils/comparison.js 1.05 kB
packages/db/dist/esm/utils/cursor.js 457 B
packages/db/dist/esm/utils/index-optimization.js 1.54 kB
packages/db/dist/esm/utils/type-guards.js 157 B
packages/db/dist/esm/virtual-props.js 360 B

compressed-size-action::db-package-size

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 7, 2026

Size Change: 0 B

Total Size: 4.24 kB

ℹ️ View Unchanged
Filename Size
packages/react-db/dist/esm/index.js 249 B
packages/react-db/dist/esm/useLiveInfiniteQuery.js 1.32 kB
packages/react-db/dist/esm/useLiveQuery.js 1.34 kB
packages/react-db/dist/esm/useLiveQueryEffect.js 355 B
packages/react-db/dist/esm/useLiveSuspenseQuery.js 567 B
packages/react-db/dist/esm/usePacedMutations.js 401 B

compressed-size-action::react-db-package-size

- Use git checkout -B to reset branch to current HEAD (avoids dirty
  working tree conflict and keeps freshly generated docs)
- Use --force-with-lease for push since branch history is rewritten
- Guard git commit with diff --cached --quiet for no-change case
- Handle gh pr list failure gracefully with fallback to new PR
- Narrow PR search with --author and in:title filters
- Use separate CREATE_PR variable instead of dual-purpose state

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@KyleAMathews KyleAMathews merged commit 018f155 into main Apr 7, 2026
7 checks passed
@KyleAMathews KyleAMathews deleted the fix/reuse-existing-docs-pr branch April 7, 2026 19:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants