mirror of
https://github.com/garrytan/gstack.git
synced 2026-08-31 18:30:39 +02:00
fix(ci): cp -r instead of cp -al — /opt and /workspace are different filesystems
The hardlink-copy fix landed and immediately broke with:
cp: cannot create hard link 'node_modules/<file>' to
'/opt/node_modules_cache/<file>': Invalid cross-device link
GitHub Actions runners mount the workspace volume at /workspace
(overlay-fs layered onto the runner image), and /opt is the runner
image's own filesystem. Cross-filesystem hardlinks aren't supported.
Switch `cp -al` → `cp -r`. Cost: ~5s for ~200 packages of small JS
files vs ~0s for the broken symlink. Still cheaper than the ~15s
`bun install` fallback. Realpath of /workspace/node_modules/<pkg>/...
stays inside /workspace, so bun build's sibling-dep resolution works.
Both evals.yml and evals-periodic.yml updated.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
999aefb472
commit
0492283610
@@ -101,14 +101,14 @@ jobs:
|
||||
echo "TMPDIR=/home/runner/.cache"
|
||||
} >> "$GITHUB_ENV"
|
||||
|
||||
# Hardlink copy (cp -al) instead of symlink: bun build resolves a file's
|
||||
# realpath when looking for sibling deps, which makes a symlinked
|
||||
# /opt/node_modules_cache fail to resolve transitive deps. See
|
||||
# evals.yml for the full explanation.
|
||||
# Recursive copy (cp -r) instead of symlink: bun build resolves a
|
||||
# file's realpath when looking for sibling deps. See evals.yml for the
|
||||
# full explanation. cp -al would be faster but /opt and /workspace
|
||||
# are on different overlay-fs layers, so cross-device hardlink fails.
|
||||
- name: Restore deps
|
||||
run: |
|
||||
if [ -d /opt/node_modules_cache ] && diff -q /opt/node_modules_cache/.package.json package.json >/dev/null 2>&1; then
|
||||
cp -al /opt/node_modules_cache node_modules
|
||||
cp -r /opt/node_modules_cache node_modules
|
||||
else
|
||||
bun install
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user