-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Description
Description:
When a repo with Yarn Berry is in a subfolder, cache: yarn does not get applied.
Action version:
setup-node@3.1.1
Platform:
- Ubuntu
- macOS
- Windows
Runner type:
- Hosted
- Self-hosted
Tools version:
Yarn 3.2
Repro steps:
Configure a pipeline that checks out the Node repo into a subfolder:
- name: Check out tooling
uses: actions/checkout@v3
with:
path: tooling ## 👈 👀
repository: example-org/example-tooling-repoSetup Node, as suggested in the action docs:
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18
cache: yarn
cache-dependency-path: tooling/yarn.lockExpected behavior:
actions/setup-node correctly launches the right version of Yarn (which is included into the repo). Therefore, the right folder is cached and the follow-up setup is faster.
Actual behavior:
Yarn cache dir is resolved to /home/runner/.cache/yarn/v6. This is because yarn --version is called in the default directory, which is followed by yarn cache dir instead of yarn config get cacheFolder inside tooling. Cache end up empty and so all packages are re-downloaded again each time.
Potential solution:
It’d be nice to pass working-directory down to actions/setup-node (similar to the run task).
Workaround:
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18
- cache: yarn
- cache-dependency-path: tooling/yarn.lock
+
+ - name: Get yarn cache directory path
+ id: yarn-cache-dir-path
+ run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
+ shell: bash
+ working-directory: tooling
+
+ - name: Restore yarn cache
+ uses: actions/cache@v3
+ with:
+ path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
+ key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }}
+ restore-keys: |
+ yarn-cache-folder-Cache key is inspired by #325