dx: add windows arm64 pnpm dev support (#1113)

* chore: align dev scripts for Windows

* refactor: isolate Windows dev flow
This commit is contained in:
ben
2026-03-22 16:48:38 -07:00
committed by GitHub
parent 1dc2884f1f
commit 3709ea33ec
5 changed files with 99 additions and 2 deletions

View File

@@ -6,6 +6,7 @@
"type": "module",
"scripts": {
"dev": "OPENWORK_DEV_MODE=1 OPENWORK_DATA_DIR=\"$HOME/.openwork/openwork-orchestrator-dev\" tauri dev --config src-tauri/tauri.dev.conf.json --config \"{\\\"build\\\":{\\\"devUrl\\\":\\\"http://localhost:${PORT:-5173}\\\"}}\"",
"dev:windows": "node ./scripts/dev-windows.mjs",
"build": "tauri build",
"prepare:sidecar": "node ./scripts/prepare-sidecar.mjs"
},

View File

@@ -0,0 +1,87 @@
import { spawnSync } from "node:child_process";
import { existsSync } from "node:fs";
import { homedir } from "node:os";
const pnpmCmd = process.platform === "win32" ? "corepack.cmd" : "pnpm";
const pnpmArgs = process.platform === "win32" ? ["pnpm"] : [];
const port = Number.parseInt(process.env.PORT ?? "", 10);
const resolvedPort = Number.isFinite(port) && port > 0 ? port : 5173;
const tauriTarget =
process.platform === "win32" && process.arch === "arm64" ? "x86_64-pc-windows-msvc" : null;
const loadWindowsBuildEnv = () => {
if (process.platform !== "win32") return {};
const vsDevCmd =
process.env.VSDEVCMD_PATH ||
"C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\Common7\\Tools\\VsDevCmd.bat";
if (!existsSync(vsDevCmd)) return {};
const targetArch = tauriTarget === "x86_64-pc-windows-msvc" ? "x64" : process.arch;
const hostArch = process.arch === "arm64" ? "arm64" : "x64";
const command = `\"${vsDevCmd}\" -arch=${targetArch} -host_arch=${hostArch} >nul && set`;
const result = spawnSync(process.env.ComSpec || "cmd.exe", ["/d", "/s", "/c", command], {
encoding: "utf8",
});
if (result.status !== 0 || !result.stdout) {
return {};
}
return Object.fromEntries(
result.stdout
.split(/\r?\n/)
.filter((line) => line.includes("="))
.map((line) => {
const index = line.indexOf("=");
return [line.slice(0, index), line.slice(index + 1)];
}),
);
};
const windowsBuildEnv = loadWindowsBuildEnv();
const mergedPath =
windowsBuildEnv.Path || windowsBuildEnv.PATH || process.env.Path || process.env.PATH || "";
const env = {
...process.env,
...windowsBuildEnv,
OPENWORK_DEV_MODE: process.env.OPENWORK_DEV_MODE || "1",
OPENWORK_DATA_DIR:
process.env.OPENWORK_DATA_DIR ||
`${homedir()}${process.platform === "win32" ? "\\" : "/"}.openwork${process.platform === "win32" ? "\\" : "/"}openwork-orchestrator-dev`,
OPENWORK_USE_COREPACK_PNPM: "1",
PORT: String(resolvedPort),
...(tauriTarget
? {
TAURI_ENV_TARGET_TRIPLE: tauriTarget,
CARGO_BUILD_TARGET: tauriTarget,
}
: {}),
};
if (mergedPath) {
env.PATH = mergedPath;
env.Path = mergedPath;
}
const result = spawnSync(
pnpmCmd,
[
...pnpmArgs,
"exec",
"tauri",
"dev",
...(tauriTarget ? ["--target", tauriTarget] : []),
"--config",
"src-tauri/tauri.dev.conf.json",
],
{
stdio: "inherit",
env,
shell: process.platform === "win32",
},
);
process.exit(result.status ?? 1);

View File

@@ -3,7 +3,9 @@ import { readFileSync } from "node:fs";
import { resolve } from "node:path";
import { fileURLToPath } from "node:url";
const pnpmCmd = process.platform === "win32" ? "pnpm.cmd" : "pnpm";
const useCorepackPnpm = process.platform === "win32" && process.env.OPENWORK_USE_COREPACK_PNPM === "1";
const pnpmCmd = useCorepackPnpm ? "corepack.cmd" : process.platform === "win32" ? "pnpm.cmd" : "pnpm";
const pnpmArgs = useCorepackPnpm ? ["pnpm"] : [];
const readPort = () => {
const value = Number.parseInt(process.env.PORT ?? "", 10);
@@ -193,7 +195,7 @@ const ensureLinuxDesktopDependencies = () => {
};
const runUiDevServer = () => {
const child = spawn(pnpmCmd, ["-w", "dev:ui"], {
const child = spawn(pnpmCmd, [...pnpmArgs, "-w", "dev:ui"], {
stdio: "inherit",
shell: process.platform === "win32",
detached: process.platform !== "win32",

View File

@@ -4,6 +4,7 @@
"version": "0.0.0",
"scripts": {
"dev": "OPENWORK_DEV_MODE=1 pnpm --filter @openwork/desktop dev",
"dev:windows": "scripts/dev-windows.cmd",
"dev:ui": "OPENWORK_DEV_MODE=1 pnpm --filter @openwork/app dev",
"dev:story": "OPENWORK_DEV_MODE=1 pnpm --filter @openwork/story-book dev",
"dev:web": "OPENWORK_DEV_MODE=1 pnpm --filter @openwork-ee/den-web dev",

6
scripts/dev-windows.cmd Normal file
View File

@@ -0,0 +1,6 @@
@echo off
setlocal
set "VSDEVCMD=%VSDEVCMD_PATH%"
if not defined VSDEVCMD if exist "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\Tools\VsDevCmd.bat" set "VSDEVCMD=C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\Tools\VsDevCmd.bat"
if defined VSDEVCMD call "%VSDEVCMD%" -arch=x64 -host_arch=arm64 >nul
call corepack pnpm --filter @openwork/desktop dev:windows