From 4ef0cdbf84e00515d33be2bb3b0d9dce3e626d64 Mon Sep 17 00:00:00 2001 From: Alaeddin <15094821+BSalaeddin@users.noreply.github.com> Date: Tue, 15 Sep 2026 16:32:07 +0100 Subject: [PATCH] ci(turbo): pass PATHEXT and ComSpec through on Windows so the pnpm shim finds pnpm.exe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Turbo's default strict env mode strips PATHEXT and ComSpec from task environments. On Windows that breaks every task turbo runs: the `pnpm` on PATH is a shim that re-executes the engine pinned by `packageManager`, and with no PATHEXT it looks for an extensionless `pnpm`, never considers `pnpm.exe`, and dies with ERR_PNPM_ENGINE_BIN_MISSING. Upstream fixed this in vercel/turborepo#13114 by adding both variables to turbo's default passthrough list, released in turbo v2.10.0; this repo is on turbo 2.5.4, so the passthrough is declared here instead. Proven on the affected machine: `turbo run lint --force` without --env-mode=loose goes from 0 of 2 tasks succeeding to 2 of 2. This is globalPassThroughEnv only — it declares no build-time variables, so the Dockerfile rule stands unchanged: the image build stays `pnpm --filter caramel-app run build`, never `turbo run build`. No-op on Linux CI: neither variable exists there, and passing through an unset variable changes nothing. --- turbo.json | 1 + 1 file changed, 1 insertion(+) diff --git a/turbo.json b/turbo.json index 8ee10145..47eefff7 100644 --- a/turbo.json +++ b/turbo.json @@ -1,5 +1,6 @@ { "$schema": "https://turbo.build/schema.json", + "globalPassThroughEnv": ["PATHEXT", "ComSpec"], "tasks": { "dev": { "cache": false,