t3-code-android-nightly/scripts/lib/build-target-arch.test.ts
Julius Marminge 477795697d
refactor: resolve host process state through Effect (#2959)
Co-authored-by: Julius Marminge <julius@mac.lan>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 16:47:56 -07:00

56 lines
2.1 KiB
TypeScript

import { assert, describe, it } from "@effect/vitest";
import * as ConfigProvider from "effect/ConfigProvider";
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import { HostProcessArchitecture, HostProcessPlatform } from "@t3tools/shared/hostProcess";
import { getDefaultBuildArch } from "./build-target-arch.ts";
const compactEnv = (env: Readonly<Record<string, string | undefined>>): Record<string, string> =>
Object.fromEntries(
Object.entries(env).filter((entry): entry is [string, string] => entry[1] !== undefined),
);
const withHostRuntime = (
platform: NodeJS.Platform,
arch: NodeJS.Architecture,
env: Readonly<Record<string, string | undefined>> = {},
) =>
Effect.provide(
Layer.mergeAll(
Layer.succeed(HostProcessPlatform, platform),
Layer.succeed(HostProcessArchitecture, arch),
ConfigProvider.layer(ConfigProvider.fromEnv({ env: compactEnv(env) })),
),
);
describe("build-target-arch", () => {
it.effect("uses the resolved host arch when selecting the default Windows build arch", () =>
Effect.gen(function* () {
// This mirrors the packaging script's default-path behavior: the current
// process is x64, but the machine itself is ARM64, so the default build
// target should be win-arm64 rather than win-x64.
const arch = yield* getDefaultBuildArch("win", { archChoices: ["x64", "arm64"] }).pipe(
withHostRuntime("win32", "x64", {
PROCESSOR_ARCHITECTURE: "AMD64", // The currently running Node process is x64.
PROCESSOR_ARCHITEW6432: "ARM64", // The process is x64, but the actual Windows host is ARM64.
}),
);
assert.equal(arch, "arm64");
}),
);
it.effect("does not apply Windows host env heuristics for non-Windows targets", () =>
Effect.gen(function* () {
const arch = yield* getDefaultBuildArch("linux", { archChoices: ["x64", "arm64"] }).pipe(
withHostRuntime("linux", "x64", {
PROCESSOR_ARCHITECTURE: "AMD64",
PROCESSOR_ARCHITEW6432: "ARM64",
}),
);
assert.equal(arch, "x64");
}),
);
});