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 glob
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
import platform
|
||||||
import re
|
import re
|
||||||
import stat
|
import stat
|
||||||
import sys
|
import sys
|
||||||
@ -326,14 +327,22 @@ def install_node():
|
|||||||
# Add execute permissions to fnm executable.
|
# Add execute permissions to fnm executable.
|
||||||
os.chmod(constants.FNM_EXE, stat.S_IXUSR)
|
os.chmod(constants.FNM_EXE, stat.S_IXUSR)
|
||||||
# Install node.
|
# 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(
|
process = processes.new_process(
|
||||||
[
|
[
|
||||||
constants.FNM_EXE,
|
constants.FNM_EXE,
|
||||||
"install",
|
"install",
|
||||||
|
*architecture_arg,
|
||||||
constants.NODE_VERSION,
|
constants.NODE_VERSION,
|
||||||
"--fnm-dir",
|
"--fnm-dir",
|
||||||
constants.FNM_DIR,
|
constants.FNM_DIR,
|
||||||
]
|
],
|
||||||
)
|
)
|
||||||
processes.show_status("Installing node", process)
|
processes.show_status("Installing node", process)
|
||||||
|
|
||||||
|
@ -549,13 +549,32 @@ def test_node_install_windows(tmp_path, mocker):
|
|||||||
download.assert_called_once()
|
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_root_path = tmp_path / "reflex" / "fnm"
|
||||||
fnm_exe = fnm_root_path / "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_DIR", fnm_root_path)
|
||||||
mocker.patch("reflex.utils.prerequisites.constants.FNM_EXE", fnm_exe)
|
mocker.patch("reflex.utils.prerequisites.constants.FNM_EXE", fnm_exe)
|
||||||
mocker.patch("reflex.utils.prerequisites.constants.IS_WINDOWS", False)
|
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):
|
class Resp(Base):
|
||||||
status_code = 200
|
status_code = 200
|
||||||
@ -571,9 +590,21 @@ def test_node_install_unix(tmp_path, mocker):
|
|||||||
|
|
||||||
assert fnm_root_path.exists()
|
assert fnm_root_path.exists()
|
||||||
download.assert_called_once()
|
download.assert_called_once()
|
||||||
process.assert_called_with(
|
if system == "Darwin" and machine == "arm64":
|
||||||
[fnm_exe, "install", constants.NODE_VERSION, "--fnm-dir", fnm_root_path]
|
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()
|
chmod.assert_called_once()
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user