authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-09-02 00:36:07-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-09-02 00:36:07-07:00
log7a8df3338f910cd18543cd3ea98b8b10385e8dcd
treefe71cdd3e55e929fd154d5e6f50a26ee8dccc31c
parent827345a07a3d2348abc63e5215e57184024078d8
signature Signed by PGP key B5690EEEBB952194

fix(desktop): skip cached monitor compiler check (#9184)


3 files changed, 56 insertions(+), 10 deletions(-)

docs/internals/scripts.md+2
...@@ -144,6 +144,8 @@ rustup target add aarch64-pc-windows-msvc...@@ -144,6 +144,8 @@ rustup target add aarch64-pc-windows-msvc
144144
145Windows supplies `tar.exe`; it is checked when `--wsl-prebuild` makes the artifact include the WSL145Windows supplies `tar.exe`; it is checked when `--wsl-prebuild` makes the artifact include the WSL
146runtime. NSIS is downloaded by electron-builder and does not need a separate installation.146runtime. NSIS is downloaded by electron-builder and does not need a separate installation.
147When `T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR=true` points the build at an existing resource monitor,
148the artifact script skips the Rust and Visual Studio checks because it does not compile the monitor.
147Unsigned local builds need no Azure credentials. Builds using `--signed` additionally require the149Unsigned local builds need no Azure credentials. Builds using `--signed` additionally require the
148Azure Trusted Signing configuration described below.150Azure Trusted Signing configuration described below.
149151
scripts/build-desktop-artifact.test.ts+42
...@@ -930,6 +930,48 @@ it.layer(NodeServices.layer)("build-desktop-artifact", (it) => {...@@ -930,6 +930,48 @@ it.layer(NodeServices.layer)("build-desktop-artifact", (it) => {
930 ),930 ),
931 );931 );
932932
933 it.effect("does not require MSVC when reusing a prebuilt Windows resource monitor", () =>
934 Effect.scoped(
935 Effect.gen(function* () {
936 const fs = yield* FileSystem.FileSystem;
937 const path = yield* Path.Path;
938 const tempDir = yield* fs.makeTempDirectoryScoped({ prefix: "t3-windows-preflight-" });
939 const pythonPath = path.join(tempDir, "python.exe");
940 yield* fs.writeFileString(pythonPath, "python");
941 const commands: string[] = [];
942 const spawner = Layer.succeed(
943 ChildProcessSpawner.ChildProcessSpawner,
944 ChildProcessSpawner.make((command) => {
945 const childProcess = command as unknown as { readonly command: string };
946 commands.push(childProcess.command);
947 return Effect.succeed(mockProcess(childProcess.command === "powershell.exe" ? 1 : 0));
948 }),
949 );
950
951 yield* preflightWindowsDesktopBuild({
952 arch: "x64",
953 bundlesWslRuntime: true,
954 }).pipe(
955 Effect.provide(
956 Layer.merge(
957 spawner,
958 ConfigProvider.layer(
959 ConfigProvider.fromEnv({
960 env: {
961 npm_config_python: pythonPath,
962 T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR: "true",
963 },
964 }),
965 ),
966 ),
967 ),
968 );
969
970 assert.notInclude(commands, "powershell.exe");
971 }),
972 ),
973 );
974
933 it.effect("rejects a PATH-discovered Python executable that is not Python 3", () =>975 it.effect("rejects a PATH-discovered Python executable that is not Python 3", () =>
934 Effect.scoped(976 Effect.scoped(
935 Effect.gen(function* () {977 Effect.gen(function* () {
scripts/build-desktop-artifact.ts+12-10
...@@ -1730,16 +1730,18 @@ export const preflightWindowsDesktopBuild = Effect.fn("preflightWindowsDesktopBu...@@ -1730,16 +1730,18 @@ export const preflightWindowsDesktopBuild = Effect.fn("preflightWindowsDesktopBu
1730 rustTargetIsInstalled(rustTarget),1730 rustTargetIsInstalled(rustTarget),
1731 ]).pipe(Effect.map(([cargo, target]) => cargo && target)),1731 ]).pipe(Effect.map(([cargo, target]) => cargo && target)),
1732 python: Effect.succeed(python !== undefined),1732 python: Effect.succeed(python !== undefined),
1733 msvc: desktopBuildProbeSucceeds(1733 msvc: reuseResourceMonitor
1734 ChildProcess.make("powershell.exe", [1734 ? Effect.succeed(true)
1735 "-NoLogo",1735 : desktopBuildProbeSucceeds(
1736 "-NoProfile",1736 ChildProcess.make("powershell.exe", [
1737 "-NonInteractive",1737 "-NoLogo",
1738 "-Command",1738 "-NoProfile",
1739 windowsVswherePrerequisiteScript(input.arch),1739 "-NonInteractive",
1740 ]),1740 "-Command",
1741 "Visual Studio Build Tools",1741 windowsVswherePrerequisiteScript(input.arch),
1742 ),1742 ]),
1743 "Visual Studio Build Tools",
1744 ),
1743 tar: input.bundlesWslRuntime1745 tar: input.bundlesWslRuntime
1744 ? desktopBuildProbeSucceeds(ChildProcess.make("tar.exe", ["--version"]), "tar")1746 ? desktopBuildProbeSucceeds(ChildProcess.make("tar.exe", ["--version"]), "tar")
1745 : Effect.succeed(true),1747 : Effect.succeed(true),