oven-sh / bun

Incredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one
https://bun.sh
Other
71.81k stars 2.56k forks source link

bun install fails for private SSH git repo that definitely exists #12257

Open jonblatho opened 5 days ago

jonblatho commented 5 days ago

What version of Bun is running?

1.1.17+bb66bba1b

What platform is your computer?

Darwin 23.5.0 arm64 arm

What steps can reproduce the bug?

  1. Add a private SSH Git repository dependency in package.json, e.g. "my_module": "git+ssh://my.gitlab.instance.com/path/to/repo.git#some-tag"
  2. Attempt bun install.
  3. Change the dependency URL to git+ssh://git@my.gitlab.instance.com/path/to/repo.git#some-tag
  4. Reattempt bun install

What is the expected behavior?

Git repository should be cloned over SSH successfully.

What do you see instead?

It depends.

If I do not include the username git in the dependency URL — it should be used anyway on that hostname, per my ~/.ssh/config file — cloning the repository fails with the following message:

error: "git clone" for "my_module" failed

error: RepositoryNotFound cloning repository for my_module

If I add the username git into the URL as suggested in step 3 above, the package manager seems to hang. Here's about two minutes' worth of bun install --verbose output, which might be important with the variable number of Resolving [1/1] lines between lines that don't include that:

bun install v1.1.17 (bb66bba1)
Loaded 277 hoisted_dependencies
Loaded 511 resolutions
Loaded 511 dependencies
Loaded 0 extern_strings
Loaded 22452 string_bytes
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
[PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks
  🔍 Resolving [1/1] [PackageManager] waiting for 1 tasks

I killed it manually because it shouldn't take that long to clone this rather small repo. I've been able to find workarounds generally for private Git repo issues, but I've yet to find one for this one.

Additional information

The repository it's trying to load definitely exists. Yarn and NPM are able to install the above without issue, and git clone for the repository over SSH works perfectly. Removing the tag portion of the URL doesn't help.

My ~/.ssh/config file instructs SSH to use the user git with this hostname by default, e.g.:

Host my.gitlab.instance.com
  User git

so specifying git@ in the URL shouldn't be necessary and definitely shouldn't cause differing behavior.

jonblatho commented 5 days ago

Ahh, quick update — when I thought it was hanging, it wasn't. I was running this in the VS Code terminal and it was prompting me for an HTTP password at the top of the window where it failed to catch my eye. It's not being resolved as SSH.