Skip to content

Refactor CICD label management to use per-PR sequential queue#5035

Open
eyebrowsoffire wants to merge 2 commits intoflutter:mainfrom
eyebrowsoffire:serial_pr_handling
Open

Refactor CICD label management to use per-PR sequential queue#5035
eyebrowsoffire wants to merge 2 commits intoflutter:mainfrom
eyebrowsoffire:serial_pr_handling

Conversation

@eyebrowsoffire
Copy link
Copy Markdown
Contributor

This change overhauls the management of the CICD label in Cocoon to address race conditions and non-idempotent operations that caused issues in the previous attempt.

Key changes:

  • Introduced PullRequestManager to handle events for a single PR sequentially via an operation queue.
  • Moved PR-specific logic from webhook_subscription.dart to PullRequestManager, thinning out the webhook handler.
  • Implemented new state machine logic for opened and synchronize events to handle privileged users and draft PRs correctly.
  • Made _scheduleIfMergeable idempotent by tracking scheduledSha in Firestore to prevent duplicate triggering of presubmits for the same SHA.
  • Refactored PullRequestManager creation to be synchronous in the cache, queueing the asynchronous initialization to avoid creation race conditions.
  • Restored cicd_flowchart.md from a previous commit to document the flow.
  • Fixed all static analysis issues and ensured all tests pass.

This change overhauls the management of the `CICD` label in Cocoon to address race conditions and non-idempotent operations that caused issues in the previous attempt.

Key changes:
- Introduced `PullRequestManager` to handle events for a single PR sequentially via an operation queue.
- Moved PR-specific logic from `webhook_subscription.dart` to `PullRequestManager`, thinning out the webhook handler.
- Implemented new state machine logic for `opened` and `synchronize` events to handle privileged users and draft PRs correctly.
- Made `_scheduleIfMergeable` idempotent by tracking `scheduledSha` in Firestore to prevent duplicate triggering of presubmits for the same SHA.
- Refactored `PullRequestManager` creation to be synchronous in the cache, queueing the asynchronous initialization to avoid creation race conditions.
- Restored `cicd_flowchart.md` from a previous commit to document the flow.
- Fixed all static analysis issues and ensured all tests pass.
@flutter-dashboard flutter-dashboard Bot added the CICD Run CI/CD label Apr 28, 2026
@eyebrowsoffire eyebrowsoffire added CICD Run CI/CD and removed CICD Run CI/CD labels Apr 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant