Commit d6a376c
ci(cli): cache only the pnpm content store, not the virtual store (#6471)
## Summary
Since #6424 enabled `virtualStoreType: global`, `pnpm store path`
includes `links/`, the global virtual store. It is a tree of directory
links between packages: symlinks on POSIX, NTFS junctions on Windows.
The shared setup action cached that whole directory, and on Windows the
junctions do not survive the actions/cache tar round trip as traversable
directories. pnpm then trusts every restored `links/` directory as
complete and skips relinking, so the first dependency resolved through a
restored junction fails. That is the `DiscoveryError: Unable to resolve
@typescript/typescript-win32-x64` from the root `prepare` script in
[this release
run](https://github.com/supabase/cli/actions/runs/33854068778/job/100967241418).
The failure was deterministic, not transient: every Windows release
smoke-test with a pnpm-store cache hit failed, and the only success with
the new store layout was the cache-miss run that populated the cache.
The earlier Windows failures that week were the unrelated CRLF
patch-file problem fixed in #6461.
## Changes
- Cache only `files/` and the SQLite index of the pnpm store, never
`links/`. pnpm rebuilds the virtual store from the cached files with
hardlinks and no network. The first Linux jobs after #6424 already
demonstrated this path when they restored an older files-only archive
via `restore-keys`.
- Bump the cache key prefix to `pnpm-store-files-…`. actions/cache
restores whatever an archive contains regardless of the current `path`
input, so without the bump Windows would keep restoring the existing
archive that carries `links/` until the lockfile changed.
- Remove the Windows-only cache exclusion from #6464, restoring
dependency caching on the Windows release jobs.
## Reviewer context
The release workflow only runs on `develop`, so PR CI exercises the new
caching on Linux but not the Windows smoke-test job. The first run on
each OS will be a cache miss under the new prefix. The second Windows
release run after merge is the real confirmation, since it is the first
cache hit.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>1 parent adc1dfa commit d6a376c
1 file changed
Lines changed: 19 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
26 | | - | |
27 | 26 | | |
28 | | - | |
| 27 | + | |
29 | 28 | | |
30 | 29 | | |
31 | 30 | | |
32 | 31 | | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
33 | 44 | | |
34 | | - | |
| 45 | + | |
35 | 46 | | |
36 | 47 | | |
37 | | - | |
38 | | - | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
39 | 52 | | |
40 | | - | |
| 53 | + | |
41 | 54 | | |
42 | 55 | | |
43 | 56 | | |
| |||
0 commit comments