devbox icon indicating copy to clipboard operation
devbox copied to clipboard

Node.js hook errors with direnv

Open evanleck opened this issue 1 year ago • 7 comments

What happened?

I installed nodejs@20 via devbox and added direnv with devbox generate direnv and now when I cd into that directory I get this error:

direnv: loading PATH/.envrc
direnv: using devbox
PATH/.devbox/gen/scripts/.raw-hooks.sh:1: DEVBOX_COREPACK_ENABLED: unbound variable
direnv: error exit status 1

Steps to reproduce

mkdir devbox-node-repro
cd devbox-node-repro/
devbox init
devbox add nodejs@20
# Info: Adding package "nodejs@20" to devbox.json
# 
# nodejs NOTES:
# Devbox automatically configures Corepack for Nodejs when DEVBOX_COREPACK_ENABLED=1. You can install Yarn or Pnpm by adding them to your `package.json` file using # `packageManager`
# Corepack binaries will be installed in your local `.devbox` directory
# 
# This plugin creates the following helper files:
# 
# To show this information, run `devbox info nodejs`
# 
# 
devbox generate direnv
# ✓ Computed the Devbox environment.
# Success: generated .envrc file
# Success: ran `direnv allow`
# direnv: loading ~/Documents/devbox-node-repro/.envrc
# direnv: using devbox
# devbox-node-repro/.devbox/gen/scripts/.raw-hooks.sh:1: DEVBOX_COREPACK_ENABLED: unbound variable
# direnv: error exit status 1

Command

add, generate

devbox.json

{
  "$schema":  "https://raw.githubusercontent.com/jetpack-io/devbox/0.10.1/.schema/devbox.schema.json",
  "packages": ["nodejs@20"],
  "shell": {
    "init_hook": [
      "echo 'Welcome to devbox!' > /dev/null"
    ],
    "scripts": {
      "test": [
        "echo \"Error: no test specified\" && exit 1"
      ]
    }
  }
}

Devbox version

0.10.1

Nix version

nix (Nix) 2.20.5

What system does this bug occur on?

macOS (Apple Silicon)

Debug logs

No response

evanleck avatar Mar 28 '24 22:03 evanleck

Probably worth noting that I’m using fish shell.

evanleck avatar Mar 31 '24 15:03 evanleck

@evanleck which version of fish shell are you using?

savil avatar Apr 01 '24 19:04 savil

@savil fish 3.7.1 and direnv 2.34.0

evanleck avatar Apr 01 '24 20:04 evanleck

Hey @evanleck, I've been trying to reproduce this but I can't get the error to replicate with Fish + Direnv. Can you try the following:

  1. Update to the latest version of Devbox using devbox version update
  2. Delete the contents of your .devbox directory, then regenerate them using devbox shell.

If those don't fix your issue, can you share the contents of the file at devbox-node-repro/.devbox/gen/scripts/.raw-hooks.sh

Lagoja avatar Apr 10 '24 19:04 Lagoja

@Lagoja thanks for looking into the issue.

  1. Done, I'm on 0.10.4 now.
  2. Done.

Unfortunately, that didn't seem to fix the issue. The contents of .raw-hooks.sh is:

test -z $DEVBOX_COREPACK_ENABLED || corepack enable --install-directory "/Users/evan/Code/devbox-node-repro/.devbox/virtenv/nodejs/corepack-bin/"
test -z $DEVBOX_COREPACK_ENABLED || export PATH="/Users/evan/Code/devbox-node-repro/.devbox/virtenv/nodejs/corepack-bin/:$PATH"

I don't see DEVBOX_COREPACK_ENABLED anywhere in the output of env if that's of any help.

evanleck avatar Apr 11 '24 15:04 evanleck

FWIW changing the contents of .raw-hooks to use test -v seems to fix the issue, though I'm not 100% sure it's functionally equivalent. Worth noting, test -v was introduced in bash 4.2, so this won't work on versions prior to that.

test -v DEVBOX_COREPACK_ENABLED || corepack enable --install-directory "/Users/evan/Code/devbox-node-repro/.devbox/virtenv/nodejs/corepack-bin/"
test -v DEVBOX_COREPACK_ENABLED || export PATH="/Users/evan/Code/devbox-node-repro/.devbox/virtenv/nodejs/corepack-bin/:$PATH"

evanleck avatar Apr 24 '24 15:04 evanleck

I have exact same issue, with devbox 0.10.9 and zsh 5.9 (NixOS from the current release-24.05 tag). The test -v trick works (thanks a lot for the advice!), and so does wrapping the tests with set +u/set -u.

drdaeman avatar May 28 '24 23:05 drdaeman