-
Notifications
You must be signed in to change notification settings - Fork 218
Automated Merge Pipeline
Sino Kholkhojaev edited this page Mar 24, 2026
·
1 revision
Milo uses a fully automated stage-then-main merge pipeline. No manual merges to stage or main should happen outside of emergencies.
Trigger:
Cron (every 4 hours), manual dispatch, or repository dispatch (anyone with write access may trigger the repo dispatch for the workflow at any point. if there is no harm and the conditions are met PRs can be merged earlier.)
What it does:
- Collects all PRs targeting
stagewith theReady for Stagelabel - Skips PRs with failing or in-progress checks
- Categorizes PRs: zero-impact → high-priority → normal
- Squash-merges up to 9 PRs per batch (zero-impact PRs don't count toward this limit)
- During pre/post RCP windows (7-day buffer), batch limit increases to 12
- Creates a
[Release] Stage to MainPR linking all merged PRs - Tags SOT teams for testing
- Sends Slack notification
- Pauses during: Active RCP windows and stage freezes
Trigger:
Daily at 9:00 UTC or on label events
What it does:
- Checks for the Stage-to-Main release PR
- Requires 4+ SOT sign-off labels on the PR
- Only runs Mon–Thu, 08:00–20:00 UTC (no Fridays, weekends, or holidays)
- Merges using merge commit (not squash) to preserve stage history
- After merge, dispatches
merge-to-stageto restart the cycle - Clears Akamai CDN cache
- Creates/closes a ServiceNow Change Management Record (CMR)
- Pauses during: Active RCP windows
- Who can trigger this action: anybody, if the PR has 4 sign offs
_Note: we specifically do not clear cache for stage, since theres no helix push invalidation _
If someone manually merges a PR to stage or main (bypassing automation), the pr-manual-merge workflow:
- Sends a Slack notification alerting the team
- Updates the Stage-to-Main PR body to include the manually merged PR
This ensures visibility even when the normal process is bypassed.