mirror of
https://github.com/different-ai/openwork
synced 2026-04-25 17:15:34 +02:00
dx: add windows arm64 pnpm dev support (#1113)
* chore: align dev scripts for Windows * refactor: isolate Windows dev flow
This commit is contained in:
@@ -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"
|
||||
},
|
||||
|
||||
87
apps/desktop/scripts/dev-windows.mjs
Normal file
87
apps/desktop/scripts/dev-windows.mjs
Normal 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);
|
||||
@@ -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",
|
||||
|
||||
@@ -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
6
scripts/dev-windows.cmd
Normal 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
|
||||
Reference in New Issue
Block a user