feat: fallback arm64 to x64 architecture for win32 platform (#131)

* feat: fallback arm64 to x64 architecture for win32 platform

closes https://github.com/oven-sh/setup-bun/issues/130

* [autofix.ci] apply automated fixes

* ci: test on windows-11-arm runner

* refactor: move logic to getEffectiveArch func

* [autofix.ci] apply automated fixes

* feat: add warning message for windows arm64 fallback to x64

* [autofix.ci] apply automated fixes

* feat: don't mention arch in warning msg aboout fallback

* [autofix.ci] apply automated fixes

* debug time

* [autofix.ci] apply automated fixes

* feat: force baseline for win32 arm fallback to x64

* [autofix.ci] apply automated fixes

* ci: dont use windows-11-arm on setup bun from download url

* fix

* [autofix.ci] apply automated fixes

* fix

* [autofix.ci] apply automated fixes

* fix

* [autofix.ci] apply automated fixes

* fix

* [autofix.ci] apply automated fixes

* fix

* [autofix.ci] apply automated fixes

* apply changes

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* [autofix.ci] apply automated fixes

* docs: clarify

* [autofix.ci] apply automated fixes

* test: add unit tests for getAvx2 Windows ARM64 fallback logic (#154)

* Initial plan

* Add unit tests for getAvx2 function

Co-authored-by: xhyrom <56601352+xhyrom@users.noreply.github.com>

* Consolidate duplicate test assertions in getAvx2 tests

Co-authored-by: xhyrom <56601352+xhyrom@users.noreply.github.com>

* Fix whitespace formatting in test file

Co-authored-by: xhyrom <56601352+xhyrom@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: xhyrom <56601352+xhyrom@users.noreply.github.com>

* test: add unit tests for getArchitecture and getAvx2 Windows ARM64 fallback logic (#153)

* Initial plan

* Add unit tests for getArchitecture function

Co-authored-by: xhyrom <56601352+xhyrom@users.noreply.github.com>

* Remove unused import in utils.spec.ts

Co-authored-by: xhyrom <56601352+xhyrom@users.noreply.github.com>

* Apply suggestion from @Copilot

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Merge pr-131 and resolve test file conflicts

Co-authored-by: xhyrom <56601352+xhyrom@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: xhyrom <56601352+xhyrom@users.noreply.github.com>
Co-authored-by: Jozef Steinhübl <generalkubo@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
This commit is contained in:
Jozef Steinhübl
2026-01-05 01:16:53 +01:00
committed by GitHub
parent 8c296f9cb7
commit b02f8a8a6e
5 changed files with 266 additions and 113 deletions

View File

@@ -42,13 +42,33 @@ export function getPlatform(): string {
return platform;
}
export function getArchitecture(): string {
const arch = process.arch;
if (arch === "arm64") return "aarch64";
export function getArchitecture(os: string, arch: string): string {
if (os === "windows" && (arch === "aarch64" || arch === "arm64")) {
warning(
[
"⚠️ Bun does not provide native arm64 builds for Windows.",
"Using x64 baseline build which will run through Microsoft's x64 emulation layer.",
"This may result in reduced performance and potential compatibility issues.",
"💡 For best performance, consider using x64 Windows runners or other platforms with native support.",
].join("\n"),
);
return "x64";
}
if (arch === "arm64") return "aarch64";
return arch;
}
export function getAvx2(os: string, arch: string, avx2?: boolean): boolean {
// Temporary workaround for absence of arm64 builds on Windows (#130)
if (os === "windows" && (arch === "aarch64" || arch === "arm64")) {
return false;
}
return avx2 ?? true;
}
const FILE_VERSION_READERS = {
"package.json": (content: string) => {
const pkg = JSON.parse(content);