Specification - Re-run Event Handling in Presubmit Guard Details
Overview
Implement event handling and authentication for the existing “Re-run” and “Re-run failed” buttons in the Presubmit Guard Details view of the Cocoon dashboard. This enables authenticated users to trigger CI re-runs for failed checks directly from the UI.
Functional Requirements
- Re-run Event Handling:
- Connect the existing “Re-run” buttons (per job) to trigger the
/api/rerun-failed-job API call. - UI Logic: Disable only the specific “Re-run” button while the request is pending.
- Re-run Failed Event Handling:
- Connect the existing “Re-run failed” button to trigger the
/api/rerun-all-failed-jobs API call. - UI Logic: Disable the “Re-run failed” button AND all individual “Re-run” buttons while the request is pending.
- State Management:
- After a successful re-run request, call
_fetchRefreshUpdate (or equivalent) to refresh the check-run states in the UI. - The UI must automatically refresh the check-run states when the user's authentication status changes (e.g., after login or logout).
- Authentication & Permissions:
- If the user is not authenticated, the “Re-run” and “Re-run failed” buttons must be disabled.
- Error Handling:
- If the API call returns an error, show a popup dialog displaying the error code and response message (if any).
- Data Seeding (Backend/Integration Test):
- Update
_seedPresubmitData to seed the prCheckRuns collection in Firestore. - Each seeded
prCheckRuns document must include a dummy pull_request object with all fields required by the _scheduleTryBuilds method (head.sha, base.repo, base.ref, user.login, number, labels).
Non-Functional Requirements
- Performance: UI updates should be responsive, providing immediate feedback (button disabling) upon user interaction.
Acceptance Criteria
- [ ] Clicking “Re-run” for a failed job triggers the correct API call.
- [ ] Clicking “Re-run failed” triggers the correct API call for all failed jobs.
- [ ] If the user is unauthenticated, all re-run buttons are disabled.
- [ ] Clicking “Re-run” disables only that button until the API call completes.
- [ ] Clicking “Re-run failed” disables all re-run buttons until the API call completes.
- [ ] The UI refreshes its state after a successful re-run trigger.
- [ ] Errors from the API are displayed in a popup dialog.
Out of Scope
- Implementing the backend API endpoints (assumed to already exist).
- UI layout or adding new buttons (they are already present).