From 7ff47c5e41aad0568cc6748e39df6f04eb4280f0 Mon Sep 17 00:00:00 2001 From: Jarek Potiuk Date: Mon, 22 Jun 2026 00:30:47 -0400 Subject: [PATCH] Reduce canary schedule frequency (AMD 4->2/day, ARM 8->2/day) The scheduled canary runs the full matrix on all versions and is by far the most expensive run type. AMD ran 4x/day and ARM 8x/day; halving AMD alone saves ~1,900 compute-h / 2 weeks (~6% of AMD CI), and cutting ARM 8->2/day removes 75% of the ARM canary schedule. The two crons are interleaved (AMD 01:58 & 13:58, ARM 07:28 & 19:28) so a full-matrix canary still runs roughly every ~6h, alternating architecture - so the 'trust earned on main' backstop keeps a ~6h effective cadence for arch-agnostic regressions (12h for arch-specific ones) while the scheduled compute drops substantially. It also relieves runner-pool queuing, since each canary is the heaviest job-flood. check_ci_workflows_in_sync.py expected blocks updated to match. --- .github/workflows/ci-amd.yml | 9 +++++---- .github/workflows/ci-arm.yml | 6 +++++- scripts/ci/prek/check_ci_workflows_in_sync.py | 15 ++++++++++----- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml index 43276945a9c69..3e7635a6a94c6 100644 --- a/.github/workflows/ci-amd.yml +++ b/.github/workflows/ci-amd.yml @@ -26,10 +26,11 @@ name: Tests (AMD) on: # yamllint disable-line rule:truthy schedule: - # Mirror of the previous AMD canary cron from before the AMD/ARM split (PR #66348), - # offset by 30 min from ARM's `:28` slot in `ci-arm.yml` so the two scheduled - # canaries don't compete for runners at exactly the same minute. - - cron: '58 1,7,13,19 * * *' + # AMD canary runs 2x/day (01:58, 13:58), interleaved with ARM's 2x/day (07:28, 19:28) + # in `ci-arm.yml` so a full-matrix canary still runs roughly every ~6h (alternating + # architecture) while halving the scheduled AMD compute. The `:58` vs ARM's `:28` + # offset keeps the two from competing for runners at exactly the same minute. + - cron: '58 1,13 * * *' pull_request: branches: - main diff --git a/.github/workflows/ci-arm.yml b/.github/workflows/ci-arm.yml index 688408aa8e49d..8c752cbb19179 100644 --- a/.github/workflows/ci-arm.yml +++ b/.github/workflows/ci-arm.yml @@ -26,7 +26,11 @@ name: Tests (ARM) on: # yamllint disable-line rule:truthy schedule: - - cron: '28 1,3,7,9,13,15,19,21 * * *' + # ARM canary runs 2x/day (07:28, 19:28), interleaved with AMD's 2x/day (01:58, 13:58) + # in `ci-amd.yml` so a full-matrix canary still runs roughly every ~6h (alternating + # architecture). The `:28` vs AMD's `:58` offset keeps the two from competing for + # runners at exactly the same minute. + - cron: '28 7,19 * * *' push: # Post-merge pushes to release-prep / providers branches run on both # AMD and ARM (the matching block lives in the other wrapper too — diff --git a/scripts/ci/prek/check_ci_workflows_in_sync.py b/scripts/ci/prek/check_ci_workflows_in_sync.py index b64600cd16576..d6116d856b8bf 100755 --- a/scripts/ci/prek/check_ci_workflows_in_sync.py +++ b/scripts/ci/prek/check_ci_workflows_in_sync.py @@ -107,14 +107,19 @@ # file and must NOT appear in the other. The blocks are stripped before # diffing so they don't show up as drift. ARM_ONLY_BLOCK = """ schedule: - - cron: '28 1,3,7,9,13,15,19,21 * * *' + # ARM canary runs 2x/day (07:28, 19:28), interleaved with AMD's 2x/day (01:58, 13:58) + # in `ci-amd.yml` so a full-matrix canary still runs roughly every ~6h (alternating + # architecture). The `:28` vs AMD's `:58` offset keeps the two from competing for + # runners at exactly the same minute. + - cron: '28 7,19 * * *' """ AMD_ONLY_BLOCK = """ schedule: - # Mirror of the previous AMD canary cron from before the AMD/ARM split (PR #66348), - # offset by 30 min from ARM's `:28` slot in `ci-arm.yml` so the two scheduled - # canaries don't compete for runners at exactly the same minute. - - cron: '58 1,7,13,19 * * *' + # AMD canary runs 2x/day (01:58, 13:58), interleaved with ARM's 2x/day (07:28, 19:28) + # in `ci-arm.yml` so a full-matrix canary still runs roughly every ~6h (alternating + # architecture) while halving the scheduled AMD compute. The `:58` vs ARM's `:28` + # offset keeps the two from competing for runners at exactly the same minute. + - cron: '58 1,13 * * *' pull_request: branches: - main