Skip to content

Commit

Permalink
[REF-1586] [WiP] Use bun as a package manager on windows
Browse files Browse the repository at this point in the history
Although bun support for windows is currently extremely limited/broken,
eventually we want to migrate over to it for the installation speed gains over
npm.
  • Loading branch information
masenf committed Jan 5, 2024
1 parent 51baa94 commit f5eb57c
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 24 deletions.
2 changes: 2 additions & 0 deletions reflex/constants/compiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ class Ext(SimpleNamespace):
CSS = ".css"
# The extension for zip files.
ZIP = ".zip"
# The extension for executable files on Windows.
EXE = ".exe"


class CompileVars(SimpleNamespace):
Expand Down
11 changes: 10 additions & 1 deletion reflex/utils/console.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,15 @@ def set_log_level(log_level: LogLevel):
_LOG_LEVEL = log_level


def is_debug() -> bool:
"""Check if the log level is debug.
Returns:
True if the log level is debug.
"""
return _LOG_LEVEL <= LogLevel.DEBUG


def print(msg: str, **kwargs):
"""Print a message.
Expand All @@ -44,7 +53,7 @@ def debug(msg: str, **kwargs):
msg: The debug message.
kwargs: Keyword arguments to pass to the print function.
"""
if _LOG_LEVEL <= LogLevel.DEBUG:
if is_debug():
msg_ = f"[blue]Debug: {msg}[/blue]"
if progress := kwargs.pop("progress", None):
progress.console.print(msg_, **kwargs)
Expand Down
44 changes: 21 additions & 23 deletions reflex/utils/prerequisites.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,16 +110,13 @@ def get_bun_version() -> version.Version | None:

def get_install_package_manager() -> str | None:
"""Get the package manager executable for installation.
Currently on unix systems, bun is used for installation only.
Currently, bun is used for installation only.
Returns:
The path to the package manager.
"""
# On Windows, we use npm instead of bun.
if constants.IS_WINDOWS:
return get_package_manager()

# On other platforms, we use bun.
return get_config().bun_path + constants.Ext.EXE
return get_config().bun_path


Expand Down Expand Up @@ -589,11 +586,6 @@ def install_bun():
Raises:
FileNotFoundError: If required packages are not found.
"""
# Bun is not supported on Windows.
if constants.IS_WINDOWS:
console.debug("Skipping bun installation on Windows.")
return

# Skip if bun is already installed.
if os.path.exists(get_config().bun_path) and get_bun_version() == version.parse(
constants.Bun.VERSION
Expand All @@ -602,16 +594,25 @@ def install_bun():
return

# if unzip is installed
unzip_path = path_ops.which("unzip")
if unzip_path is None:
raise FileNotFoundError("Reflex requires unzip to be installed.")

# Run the bun install script.
download_and_run(
constants.Bun.INSTALL_URL,
f"bun-v{constants.Bun.VERSION}",
BUN_INSTALL=constants.Bun.ROOT_PATH,
)
if constants.IS_WINDOWS:
processes.new_process(
["powershell", "-c", f"irm {constants.Bun.INSTALL_URL}.ps1|iex"],
env={"BUN_INSTALL": constants.Bun.ROOT_PATH},
shell=True,
run=True,
show_logs=console.is_debug(),
)
else:
unzip_path = path_ops.which("unzip")
if unzip_path is None:
raise FileNotFoundError("Reflex requires unzip to be installed.")

# Run the bun install script.
download_and_run(
constants.Bun.INSTALL_URL,
f"bun-v{constants.Bun.VERSION}",
BUN_INSTALL=constants.Bun.ROOT_PATH,
)


def install_frontend_packages(packages: set[str]):
Expand Down Expand Up @@ -759,9 +760,6 @@ def validate_frontend_dependencies(init=True):
)
raise typer.Exit(1)

if constants.IS_WINDOWS:
return

if init:
# we only need bun for package install on `reflex init`.
validate_bun()
Expand Down

0 comments on commit f5eb57c

Please sign in to comment.