From f6888d39f190944640b8af0c353adfd7d78d7bd9 Mon Sep 17 00:00:00 2001 From: Joseph Mearman Date: Wed, 28 Oct 2026 12:47:40 +0000 Subject: [PATCH] docs(github-runner-arc): say how pnpm 10 uses the node cache The node-cache example names the store with `pnpm_config_store_dir` and turns on the global virtual store through the environment, which is pnpm 11. pnpm 10 does not read `pnpm_config_*` variables, and it switches the global virtual store off whenever `CI` is set, so an Actions job on pnpm 10 gets the store only through `--store-dir` and imports from it by copying, because the store sits on another mount than the workspace. --- roles/github_runner_arc/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/roles/github_runner_arc/README.md b/roles/github_runner_arc/README.md index 950ee9f..a1fadf8 100644 --- a/roles/github_runner_arc/README.md +++ b/roles/github_runner_arc/README.md @@ -165,6 +165,12 @@ github_runner_arc_capabilities: pnpm_config_enable_global_virtual_store: "true" ``` +That step is for pnpm 11. pnpm 10 (checked with 10.29.3) does not read `pnpm_config_*` variables, and its configuration cannot turn the global virtual store on in an Actions job: it sets `enableGlobalVirtualStore` to false whenever `CI` is set, which GitHub Actions always does, whatever the configuration says (pnpm 11 does so only when the setting is not given). With pnpm 10 the store is named on the command line and imported by copying, since the store's mount is not the workspace's and a hard link cannot cross it (`auto` would try a link first and log the failure). The install then writes every package file of the dependency tree into `node_modules`, as it does from any store on another mount, but fetches nothing from a registry or the Actions cache once the node's store holds the packages: + +```yaml +- run: pnpm install --frozen-lockfile --store-dir "$NODE_CACHE_PNPM_STORE_DIR" --package-import-method copy +``` + The `hostPath` volume needs a cluster that admits one: a namespace that enforces Pod Security's baseline or restricted level refuses it. ```yaml