The integration-batch workflow automates integration branch preparation by batching selected pull requests.
integration-batch: PR is queued for integration batching.integrated: PR was successfully merged into theintegrationbranch by automation.integration-failed: automation attempted integration but hit a merge conflict.integration-needs-snapshot-review: applied to the generatedintegration -> mainPR when snapshot auto-recovery updates snapshot files.
The workflow selects PRs that are:
- open
- non-draft
- labeled
integration-batch - not labeled
integrated - with check runs present for the PR head SHA
- with all check runs in
completedstatus - with all completed check runs concluded as
success,skipped, orneutral
Each run rebuilds integration from main, then attempts merge commits (git merge --no-ff) for selected PRs.
- On successful merge:
- remove
integration-batch - remove
integration-failed(if present) - add
integrated - add a comment including the run URL
- remove
- On merge conflict:
- if all conflicted files are in the auto-generated union allowlist, conflicts are auto-resolved by union merge
- if conflicts are snapshot-only (
*.snap/__snapshots__, optionally withpackage-lock.json), merge is completed and targetednpm run test:update <pattern>commands are executed, then updated snapshots are committed tointegration - if
package-lock.jsonis conflicted (including lockfile-only conflicts), automation checks out one side to complete the merge, runsnpm i --package-lock-only, and commits the regenerated lockfile tointegration - otherwise merge is aborted,
integration-failedis applied, and the author is asked to rebase and re-addintegration-batch
Union allowlist generation runs on every workflow execution:
- includes
src/cli/**files containingconst program = new FrodoStubCommand( - excludes any file containing
const program = new FrodoCommand( - applies manual overrides from:
.github/integration/union-allowlist-extra.txt.github/integration/union-blocklist.txt
After merges, the workflow updates @rockcarver/frodo-lib to @next, commits lockfile changes when needed, pushes integration, runs the full test suite on integration, and then creates or updates an integration -> main PR titled integration.
Because integration is pushed before the full test suite runs, the branch can be temporarily red until the test stage finishes.
When manually triggered, set dry_run=true to simulate batching without side effects:
- does not push
integration - does not create/update the integration PR
- does not edit labels or post PR comments
- does not run the post-push full test suite on
integration
The workflow still computes candidate PRs and attempts merges locally so maintainers can validate batchability before a real run.