Fix Node Installation on ARM-based Macs with FNM (#1701)
This commit is contained in:
parent
1372042228
commit
689f078aa3
@ -5,6 +5,7 @@ from __future__ import annotations
|
||||
import glob
|
||||
import json
|
||||
import os
|
||||
import platform
|
||||
import re
|
||||
import stat
|
||||
import sys
|
||||
@ -326,14 +327,22 @@ def install_node():
|
||||
# Add execute permissions to fnm executable.
|
||||
os.chmod(constants.FNM_EXE, stat.S_IXUSR)
|
||||
# Install node.
|
||||
# Specify arm64 arch explicitly for M1s and M2s.
|
||||
architecture_arg = (
|
||||
["--arch=arm64"]
|
||||
if platform.system() == "Darwin" and platform.machine() == "arm64"
|
||||
else []
|
||||
)
|
||||
|
||||
process = processes.new_process(
|
||||
[
|
||||
constants.FNM_EXE,
|
||||
"install",
|
||||
*architecture_arg,
|
||||
constants.NODE_VERSION,
|
||||
"--fnm-dir",
|
||||
constants.FNM_DIR,
|
||||
]
|
||||
],
|
||||
)
|
||||
processes.show_status("Installing node", process)
|
||||
|
||||
|
@ -549,13 +549,32 @@ def test_node_install_windows(tmp_path, mocker):
|
||||
download.assert_called_once()
|
||||
|
||||
|
||||
def test_node_install_unix(tmp_path, mocker):
|
||||
@pytest.mark.parametrize(
|
||||
"machine, system",
|
||||
[
|
||||
("x64", "Darwin"),
|
||||
("arm64", "Darwin"),
|
||||
("x64", "Windows"),
|
||||
("arm64", "Windows"),
|
||||
("armv7", "Linux"),
|
||||
("armv8-a", "Linux"),
|
||||
("armv8.1-a", "Linux"),
|
||||
("armv8.2-a", "Linux"),
|
||||
("armv8.3-a", "Linux"),
|
||||
("armv8.4-a", "Linux"),
|
||||
("aarch64", "Linux"),
|
||||
("aarch32", "Linux"),
|
||||
],
|
||||
)
|
||||
def test_node_install_unix(tmp_path, mocker, machine, system):
|
||||
fnm_root_path = tmp_path / "reflex" / "fnm"
|
||||
fnm_exe = fnm_root_path / "fnm"
|
||||
|
||||
mocker.patch("reflex.utils.prerequisites.constants.FNM_DIR", fnm_root_path)
|
||||
mocker.patch("reflex.utils.prerequisites.constants.FNM_EXE", fnm_exe)
|
||||
mocker.patch("reflex.utils.prerequisites.constants.IS_WINDOWS", False)
|
||||
mocker.patch("reflex.utils.prerequisites.platform.machine", return_value=machine)
|
||||
mocker.patch("reflex.utils.prerequisites.platform.system", return_value=system)
|
||||
|
||||
class Resp(Base):
|
||||
status_code = 200
|
||||
@ -571,9 +590,21 @@ def test_node_install_unix(tmp_path, mocker):
|
||||
|
||||
assert fnm_root_path.exists()
|
||||
download.assert_called_once()
|
||||
process.assert_called_with(
|
||||
[fnm_exe, "install", constants.NODE_VERSION, "--fnm-dir", fnm_root_path]
|
||||
)
|
||||
if system == "Darwin" and machine == "arm64":
|
||||
process.assert_called_with(
|
||||
[
|
||||
fnm_exe,
|
||||
"install",
|
||||
"--arch=arm64",
|
||||
constants.NODE_VERSION,
|
||||
"--fnm-dir",
|
||||
fnm_root_path,
|
||||
]
|
||||
)
|
||||
else:
|
||||
process.assert_called_with(
|
||||
[fnm_exe, "install", constants.NODE_VERSION, "--fnm-dir", fnm_root_path]
|
||||
)
|
||||
chmod.assert_called_once()
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user