Repository navigation
chore: read the Stryker caches on main every day - #209
Merged
Merged
Conversation
GitHub evicts a cache nobody reads for 7 days, and a push to main only refreshes the incremental files of the packages it changed, so a pull request after a quiet week ran every mutant of the others cold: core found no cache on #202 and ran out of time.
benatespina
force-pushed
the
chore/keep-stryker-caches
branch
from
October 24, 2026 11:17
8158dcd to
b967571
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
main, and a push tomainrefreshes only the incremental Stryker files of the packages it changed. So after a quiet week, a pull request ran every mutant of the other packages cold. On chore(deps): update non-major dependencies #202,Mutation (core)found nostryker-core-cache (last written 2026-10-10), ran all 6,333 mutants and hit the timeout.stryker-cache.yml: once a day, and on demand, each package restores itsstryker-<package>-cache frommain. A restore counts as a read, so the cache is not evicted. Each job takes about 3 seconds and needs no checkout.Why this mechanism
mutationjob rewrites a package's file whenever that package changes onmain. Running Stryker on a schedule would cost minutes per package every day just to keep a file alive.fail-on-cache-miss). Reading cannot create a cache thatmainlacks, so a red run is the signal. The next mutation run of that package onmainwrites the cache.Validation
workflow_dispatchonly works once the file is onmain, and pull requests do not trigger a schedule-only workflow. To test it, I pushed the same file with an extrapushtrigger to a throwaway branch, which can readmain's caches, and deleted that branch afterwards:Read (cli)restoredstryker-cli-a52ee3e…fromrefs/heads/main. That cache'slast_accessed_atmoved from 10:44:17Z to 10:50:39Z, which confirms that a restore with no checkout resets the eviction clock.mainhas no Stryker cache for them, because they were evicted.After merge
Until
mainhas a cache for every package, the daily run fails for the missing ones. #208 changesci.yml, so its merge runs mutation for every package onmainand writes all seven caches. After that, run this workflow once withworkflow_dispatchto confirm that every job is green.pnpm checkexits 0. No changeset: no package changes.