mise icon indicating copy to clipboard operation
mise copied to clipboard

Bun plugin does not set `bun/bin` path like it does for go and python

Open ferntheplant opened this issue 11 months ago • 2 comments

Describe the bug After successfully installing bun with mise use -g bun and installed some global package like bun add -g @biomejs/biome I cannot run biome directly from my shell via $ biome --version because ~/.bun/bin is not on my $PATH

For example with go I can install go with mise, run go install <some package>, and immediately be able to run the package in my shell with <some package> --version

To Reproduce From a fresh mise install run the following

~$ mise use -g bun
~$ mise use -g go
~$ bun add -g @biomejs/biome
~$ biome --version
zsh: command not found: biome
~$ .bun/bin/biome --version
Version: 1.6.1
~$ go install github.com/tomwright/dasel/v2/cmd/dasel@master
~$ dasel --version
dasel version development-v2.7.1-0.20240318190008-1cbdc830b263

Expected behavior I would expect globally installed bun packages to be accessible in my shell by having ~/.bun/bin on my path. The official bun install script sets this for you and emits a command to add to your bashrc in case the automatic path update didn't work.

mise doctor output

version: 2024.3.7 linux-x64 (3bde772 2024-03-21)
activated: yes
shims_on_path: no
                                                                                              
build_info:
  Target: x86_64-unknown-linux-gnu
  Features: DEFAULT, NATIVE_TLS, OPENSSL
  Built: Thu, 21 Mar 2024 00:54:44 +0000
  Rust Version: rustc 1.76.0 (07dca489a 2024-02-04)
  Profile: release
                                                                                              
shell:
  /usr/bin/zsh
  zsh 5.8.1 (x86_64-ubuntu-linux-gnu)
                                                                                              
dirs:
  data: ~/.local/share/mise
  config: ~/.config/mise
  cache: ~/.cache/mise
  state: ~/.local/state/mise
  shims: ~/.local/share/mise/shims
                                                                                              
config_files:
  ~/.config/mise/config.toml
  ~/dotfiles/.mise.toml
                                                                                              
plugins:
  bun      (core)
  deno     (core)
  fzf      https://github.com/kompiro/asdf-fzf.git#d19eb67
  go       (core)
  java     (core)
  lazygit  https://github.com/nklmilojevic/asdf-lazygit.git#78e04f1
  node     (core)
  python   (core)
  ruby     (core)
  shfmt    https://github.com/luizm/asdf-shfmt.git#a42c5ff
                                                                                              
toolset:
  [email protected]
  [email protected]
  [email protected]
  [email protected]
  [email protected]
  [email protected]
  [email protected]
                                                                                              
env_vars:
  MISE_SHELL=zsh
                                                                                              
settings:
  activate_aggressive = true
  all_compile = false
  always_keep_download = false
  always_keep_install = false
  asdf_compat = false
  cargo_binstall = true
  color = true
  disable_default_shorthands = false
  disable_tools = []
  experimental = false
  go_default_packages_file = "~/.default-go-packages"
  go_download_mirror = "https://dl.google.com/go"
  go_repo = "https://github.com/golang/go"
  go_set_gopath = false
  go_set_goroot = true
  go_skip_checksum = false
  jobs = 4
  legacy_version_file = true
  legacy_version_file_disable_tools = []
  node_compile = false
  not_found_auto_install = true
  paranoid = false
  plugin_autoupdate_last_check_duration = "7d"
  python_compile = false
  python_default_packages_file = "/home/fjorn/.default-python-packages"
  python_pyenv_repo = "https://github.com/pyenv/pyenv.git"
  raw = false
  trusted_config_paths = []
  quiet = false
  verbose = false
  yes = false
  ci = false
  debug = false
  trace = false
  log_level = "info"
  python_venv_auto_create = false
                                                                                              
  [status]
  missing_tools = "if_other_versions_installed"
  show_env = false
  show_tools = false
                                                                                              
1 problem found:
                                                                                              
1. shims are missing, run mise reshim to create them
   Missing shims: dasel

The dasel shim missing is irrelevant to the bun bin packages not being on path

Additional context Add any other context about the problem here.

ferntheplant avatar Mar 22 '24 16:03 ferntheplant

npm adds symlinks to ~/.local/share/mise/installs/node/18/bin/ and that's typical behavior for languages in mise. This effectively locks the node version to the globally installed packages which is useful in case they're not compatible with future versions. That said it is annoying because updating node versions gets rid of all of your global packages.

It looks like we could probably retain this behavior via something that uses the install.globalDir config, though I didn't see an env var way to configure that at first glance. Even that would require a shim though, so it wouldn't be ideal.

@Jarred-Sumner any thoughts on the best way to support bun? Can we use a single directory for all bun versions? Will bun be compatible with packages installed with different bun versions?

I am a little hesitant to use ~/.bun just because no other language uses a global directory like that but it could probably be done.

jdx avatar Mar 22 '24 16:03 jdx

Ah yea that makes sense - I'm not really used to considering having multiple versions installed simultaneously so the global ~.bun/bin dir didn't seem like a concern. For now I manually added it to my path so I can use global bun packages and I don't plan on having multiple bun version simultaneously installed so it won't cause any issues.

I guess optimally bun would place it's bin dir alongside itself like does golang and python.

ferntheplant avatar Mar 23 '24 18:03 ferntheplant