chore(ci): reduce cache bloat by saving only on main#8204
Merged
steveruizok merged 2 commits intomainfrom Mar 11, 2026
Merged
Conversation
Previously every PR saved its own ~1.1GB cache entry containing all node_modules directories. Now we: - Cache only .yarn/cache and install-state.gz (~200-400MB) - Use restore-only on PRs (actions/cache/restore) - Save only on pushes to main (actions/cache/save) PRs still restore from main's cache; yarn install reconstructs node_modules from the offline cache with minimal overhead. Co-Authored-By: Claude Opus 4.6 <[email protected]>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
5 Skipped Deployments
|
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
kaneel
reviewed
Mar 11, 2026
.github/actions/setup/action.yml
Outdated
| # Only save the cache on pushes to main to avoid per-PR duplicates. | ||
| # Runs after install so the cache is fully populated. | ||
| - name: Save yarn cache | ||
| if: github.event_name == 'push' && steps.yarn-cache.outputs.cache-hit != 'true' |
Contributor
There was a problem hiding this comment.
What the claude suggests is: if: github.event_name == 'push' && github.ref == 'refs/heads/main' && steps.yarn-cache.outputs.cache-hit != 'true'
Add github.ref check so cache is only saved on pushes to main, not production/bemo-production branches.
1 task
mimecuvalo
added a commit
that referenced
this pull request
Mar 24, 2026
This reverts commit c4df25a.
github-merge-queue bot
pushed a commit
that referenced
this pull request
Mar 24, 2026
…eous cache generation (#8333) Couple things going on here to unpack: - this reverts #8204 - b/c that was reverted our CI times went from 4/5 min back to 8min because we had to recompile things during setup.yml in the `yarn` step. this was adding ~2min back to each CI action. - we were hitting our 10GB limit before but the majority of that was because we were adding `-${{github.sha}}` to a bunch of our tooling caches, creating a bunch of extra cache entries for no reason Fixes: - removes the `${{github.sha}}` from the key, unnecessary. - caches `node_modules` again to save CI time again - I increased our org cache limit to 20GB for now, we only pay for actual usage, things get auto-purged after 7 days anyway <img width="476" height="137" alt="Screenshot 2026-03-24 at 14 26 19" src="https://github.com/user-attachments/assets/8ddfa763-554a-4270-a832-69628f23fa6f" /> - i'll manually clear some cache entries as well
github-merge-queue bot
pushed a commit
that referenced
this pull request
Mar 25, 2026
#8276) In order to stop docs-only hotfixes from triggering unwanted npm patch releases, this PR adds `yarn refresh-assets --force` before the `getAnyPackageDiff()` check in `publish-patch.ts`. ### Root cause PR #8204 added `.yarn/install-state.gz` to the CI cache. When Yarn determines that the install state hasn't changed (e.g. `node_modules` is already populated and no dependencies changed), it [skips lifecycle scripts](https://yarnpkg.com/advanced/lifecycle-scripts) including `postinstall` ([related discussion](yarnpkg/berry#5924)). This means the `postinstall` hook (`husky install && yarn refresh-assets`) never runs. Without `refresh-assets`, the gitignored asset directories in `@tldraw/assets` (`embed-icons/`, `fonts/`, `icons/`, `translations/`) don't exist on disk. The `getAnyPackageDiff()` guard runs `yarn pack` which produces a tarball missing these dirs (14 files), while the npm-published tarball has them (265 files) — always finding a diff, always publishing. **Before #8204 (working):** PR #8102 docs hotfix cherry-picked to v4.4.x — publish-patch skipped correctly, no version bump. **After #8204 (broken):** PRs #8263 and #8270 docs hotfixes cherry-picked to v4.5.x — both triggered unwanted npm publishes (v4.5.1 and v4.5.2). ### Why this approach Considered three options: 1. **Remove `install-state.gz` from cache** — doesn't actually help; Yarn skips postinstall based on dependency changes, not just the state file 2. **Add `refresh-assets` to the setup action** — overkill; lazyrepo already auto-runs it as a dependency of `build`, `build-types`, and `dev` 3. **Add `refresh-assets` to `publish-patch.ts`** — targeted fix matching what `trigger-sdk-hotfix.ts` already does (line 98) Option 3 is the right call. `publish-patch.ts` is the only workflow confirmed broken — everything else is protected by either lazyrepo's dependency graph or explicit `refresh-assets` calls in the workflow YAML. ### Change type - [x] `bugfix` ### Test plan Verified locally: 1. Removed asset dirs to simulate CI with warm cache (no postinstall) 2. `yarn pack` on `@tldraw/assets` → 14 files 3. Ran `yarn refresh-assets --force` 4. `yarn pack` again → 265 files On a release branch with only docs changes, `getAnyPackageDiff()` should now return `null` → "No packages have changed, skipping release" → no publish. ### Code changes | Section | LOC change | | -------------- | ---------- | | Config/tooling | +4 / -0 |
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.
In order to reduce GitHub Actions cache storage from ~1.1GB per PR to ~300MB shared, this PR changes the setup action to cache only
.yarn/cacheand.yarn/install-state.gz(droppingnode_modulesand.yarn/unplugged), use restore-only caching on PRs viaactions/cache/restore, and save the cache only on pushes to main viaactions/cache/save.Relates to #7628
Change type
improvementTest plan
Linux-node-24.13.1-yarn-*cache entries from the Actions cache pageCode changes
Note
Low Risk
CI-only caching behavior change; main risk is slower installs or cache misses if keys/paths are misconfigured, with no production/runtime impact.
Overview
The CI
setupcomposite action switches from cachingnode_modulesto caching only Yarn’s.yarn/cacheand.yarn/install-state.gz, reducing cache size and avoiding per-branch duplication.It now uses
actions/cache/restore@v5to restore caches for all runs, and conditionally saves the cache viaactions/cache/save@v5only onpushevents torefs/heads/main(and only when the restore wasn’t a hit).Written by Cursor Bugbot for commit 45d8053. This will update automatically on new commits. Configure here.