From bce2b415336204e3c1d2b8b273733993f6d65db7 Mon Sep 17 00:00:00 2001 From: cornfeedhobo Date: Tue, 22 Feb 2022 20:50:06 -0600 Subject: [PATCH 1/2] Wholesale cleanup of nodejs related components - remove redundant cite - support Basher - add nenv plugin - uplift nodenv to follow newer pattern and standard - ensure node components play well with *env tools --- clean_files.txt | 1 + completion/available/npm.completion.bash | 5 +- plugins/available/nenv.plugin.bash | 15 +++ plugins/available/node.plugin.bash | 13 ++- plugins/available/nodenv.plugin.bash | 13 ++- plugins/available/nvm.plugin.bash | 34 ++----- test/lib/helpers.bats | 114 +++++++++++------------ 7 files changed, 99 insertions(+), 96 deletions(-) create mode 100644 plugins/available/nenv.plugin.bash diff --git a/clean_files.txt b/clean_files.txt index 54180c19fd..0c8492f6bc 100644 --- a/clean_files.txt +++ b/clean_files.txt @@ -114,6 +114,7 @@ plugins/available/jump.plugin.bash plugins/available/latex.plugin.bash plugins/available/less-pretty-cat.plugin.bash plugins/available/man.plugin.bash +plugins/available/nenv.plugin.bash plugins/available/nginx.plugin.bash plugins/available/node.plugin.bash plugins/available/nodenv.plugin.bash diff --git a/completion/available/npm.completion.bash b/completion/available/npm.completion.bash index cf24585ef7..7093ead974 100644 --- a/completion/available/npm.completion.bash +++ b/completion/available/npm.completion.bash @@ -1,7 +1,8 @@ # shellcheck shell=bash -cite "about-completion" about-completion "npm (Node Package Manager) completion" -if _command_exists npm; then +# Test `npm version` because *env tools create shim scripts that will be found in PATH +# but do not always resolve to a working install. +if _command_exists npm && npm --version &> /dev/null; then eval "$(npm completion)" fi diff --git a/plugins/available/nenv.plugin.bash b/plugins/available/nenv.plugin.bash new file mode 100644 index 0000000000..9ec0c32fc9 --- /dev/null +++ b/plugins/available/nenv.plugin.bash @@ -0,0 +1,15 @@ +# shellcheck shell=bash +about-plugin 'Node.js environment management using https://github.com/ryuone/nenv' + +# Load after basher +# BASH_IT_LOAD_PRIORITY: 260 + +export NENV_ROOT="${NENV_ROOT:-${HOME?}/.nenv}" + +if [[ -d "${NENV_ROOT?}/bin" ]]; then + pathmunge "${NENV_ROOT?}/bin" +fi + +if _command_exists nenv; then + eval "$(nenv init - bash)" +fi diff --git a/plugins/available/node.plugin.bash b/plugins/available/node.plugin.bash index 8bf876df24..50c1a63b82 100644 --- a/plugins/available/node.plugin.bash +++ b/plugins/available/node.plugin.bash @@ -1,14 +1,13 @@ # shellcheck shell=bash -cite about-plugin about-plugin 'Node.js helper functions' -# Check that we have npm -_command_exists npm || return +# Load after *env plugins +# BASH_IT_LOAD_PRIORITY: 270 # Ensure local modules are preferred in PATH -pathmunge "./node_modules/.bin" "after" +pathmunge './node_modules/.bin' 'after' -# If not using nodenv, ensure global modules are in PATH -if [[ ! "$(type -p npm)" == *"nodenv/shims"* ]]; then - pathmunge "$(npm config get prefix)/bin" "after" +# If not using an *env tool, ensure global modules are in PATH +if [[ ! "$(type -p npm)" == *'/shims/npm' ]]; then + pathmunge "$(npm config get prefix)/bin" 'after' fi diff --git a/plugins/available/nodenv.plugin.bash b/plugins/available/nodenv.plugin.bash index 262a57c399..729ab96347 100644 --- a/plugins/available/nodenv.plugin.bash +++ b/plugins/available/nodenv.plugin.bash @@ -1,9 +1,14 @@ # shellcheck shell=bash -cite about-plugin -about-plugin 'load nodenv, if you are using it' +about-plugin 'Node.js environment management using https://github.com/nodenv/nodenv' -export NODENV_ROOT="$HOME/.nodenv" -pathmunge "$NODENV_ROOT/bin" +# Load after basher +# BASH_IT_LOAD_PRIORITY: 260 + +export NODENV_ROOT="${NODENV_ROOT:-${HOME?}/.nodenv}" + +if [[ -d "${NODENV_ROOT?}/bin" ]]; then + pathmunge "${NODENV_ROOT?}/bin" +fi if _command_exists nodenv; then eval "$(nodenv init - bash)" diff --git a/plugins/available/nvm.plugin.bash b/plugins/available/nvm.plugin.bash index 0e6da5d8cf..1280a5bb23 100644 --- a/plugins/available/nvm.plugin.bash +++ b/plugins/available/nvm.plugin.bash @@ -1,31 +1,13 @@ # shellcheck shell=bash -# -# BASH_IT_LOAD_PRIORITY: 225 -# -# Bash-it no longer bundles nvm, as this was quickly becoming outdated. -# Please install nvm from https://github.com/creationix/nvm.git if you want to use it. +about-plugin 'Node.js version manager, https://github.com/nvm-sh/nvm' -cite about-plugin -about-plugin 'node version manager configuration' +# Load after basher +# BASH_IT_LOAD_PRIORITY: 260 -export NVM_DIR="${NVM_DIR:-$HOME/.nvm}" -# This loads nvm -if _bash_it_homebrew_check && [[ -s "${BASH_IT_HOMEBREW_PREFIX}/nvm.sh" ]] -then - source "${BASH_IT_HOMEBREW_PREFIX}/nvm.sh" -else - [[ -s "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh" -fi +export NVM_DIR="${NVM_DIR:-${HOME?}/.nvm}" -if ! _command_exists nvm -then - function nvm() { - echo "Bash-it no longer bundles the nvm script. Please install the latest version from" - echo "" - echo "https://github.com/creationix/nvm.git" - echo "" - echo "if you want to use nvm. You can keep this plugin enabled once you have installed nvm." - } - - nvm +if _bash_it_homebrew_check && [[ -s "${BASH_IT_HOMEBREW_PREFIX?}/nvm.sh" ]]; then + source "${BASH_IT_HOMEBREW_PREFIX?}/nvm.sh" +else + [[ -s "${NVM_DIR?}/nvm.sh" ]] && source "${NVM_DIR?}/nvm.sh" fi diff --git a/test/lib/helpers.bats b/test/lib/helpers.bats index 8c340c58f8..1775ad6867 100755 --- a/test/lib/helpers.bats +++ b/test/lib/helpers.bats @@ -166,35 +166,35 @@ function local_setup { @test "helpers: enable the node plugin" { run _enable-plugin "node" - assert_line -n 0 'node enabled with priority 250.' - assert_link_exist "$BASH_IT/enabled/250---node.plugin.bash" "../plugins/available/node.plugin.bash" + assert_line -n 0 'node enabled with priority 270.' + assert_link_exist "$BASH_IT/enabled/270---node.plugin.bash" "../plugins/available/node.plugin.bash" } @test "helpers: enable the node plugin through the bash-it function" { run bash-it enable plugin "node" - assert_line -n 0 'node enabled with priority 250.' - assert_link_exist "$BASH_IT/enabled/250---node.plugin.bash" + assert_line -n 0 'node enabled with priority 270.' + assert_link_exist "$BASH_IT/enabled/270---node.plugin.bash" } @test "helpers: enable the node and nvm plugins through the bash-it function" { run bash-it enable plugin "node" "nvm" - assert_line -n 0 'node enabled with priority 250.' - assert_line -n 1 'nvm enabled with priority 225.' - assert_link_exist "$BASH_IT/enabled/250---node.plugin.bash" - assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash" + assert_line -n 0 'node enabled with priority 270.' + assert_line -n 1 'nvm enabled with priority 260.' + assert_link_exist "$BASH_IT/enabled/270---node.plugin.bash" + assert_link_exist "$BASH_IT/enabled/260---nvm.plugin.bash" } @test "helpers: enable the foo-unkown and nvm plugins through the bash-it function" { run bash-it enable plugin "foo-unknown" "nvm" assert_line -n 0 'sorry, foo-unknown does not appear to be an available plugin.' - assert_line -n 1 'nvm enabled with priority 225.' - assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash" + assert_line -n 1 'nvm enabled with priority 260.' + assert_link_exist "$BASH_IT/enabled/260---nvm.plugin.bash" } @test "helpers: enable the nvm plugin" { run _enable-plugin "nvm" - assert_line -n 0 'nvm enabled with priority 225.' - assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash" + assert_line -n 0 'nvm enabled with priority 260.' + assert_link_exist "$BASH_IT/enabled/260---nvm.plugin.bash" } @test "helpers: enable an unknown plugin" { @@ -229,24 +229,24 @@ function local_setup { @test "helpers: enable and disable the nvm plugin" { run _enable-plugin "nvm" - assert_line -n 0 'nvm enabled with priority 225.' - assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash" - assert [ ! -L "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" ] + assert_line -n 0 'nvm enabled with priority 260.' + assert_link_exist "$BASH_IT/enabled/260---nvm.plugin.bash" + assert [ ! -L "$BASH_IT/plugins/enabled/260---nvm.plugin.bash" ] run _disable-plugin "nvm" assert_line -n 0 'nvm disabled.' - assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ] + assert [ ! -L "$BASH_IT/enabled/260---nvm.plugin.bash" ] } @test "helpers: disable the nvm plugin if it was enabled with a priority, but in the component-specific directory" { - ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/225---nvm.plugin.bash - assert_link_exist "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" - assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ] + ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/260---nvm.plugin.bash + assert_link_exist "$BASH_IT/plugins/enabled/260---nvm.plugin.bash" + assert [ ! -L "$BASH_IT/enabled/260---nvm.plugin.bash" ] run _disable-plugin "nvm" assert_line -n 0 'nvm disabled.' - assert [ ! -L "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" ] - assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ] + assert [ ! -L "$BASH_IT/plugins/enabled/260---nvm.plugin.bash" ] + assert [ ! -L "$BASH_IT/enabled/260---nvm.plugin.bash" ] } @test "helpers: disable the nvm plugin if it was enabled without a priority" { @@ -265,29 +265,29 @@ function local_setup { run _enable-plugin "nvm" assert_line -n 0 'nvm is already enabled.' assert_link_exist "$BASH_IT/plugins/enabled/nvm.plugin.bash" - assert [ ! -L "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" ] - assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ] + assert [ ! -L "$BASH_IT/plugins/enabled/260---nvm.plugin.bash" ] + assert [ ! -L "$BASH_IT/enabled/260---nvm.plugin.bash" ] } @test "helpers: enable the nvm plugin if it was enabled with a priority, but in the component-specific directory" { - ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/225---nvm.plugin.bash - assert_link_exist "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" + ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/260---nvm.plugin.bash + assert_link_exist "$BASH_IT/plugins/enabled/260---nvm.plugin.bash" run _enable-plugin "nvm" assert_line -n 0 'nvm is already enabled.' assert [ ! -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ] - assert_link_exist "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" - assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ] + assert_link_exist "$BASH_IT/plugins/enabled/260---nvm.plugin.bash" + assert [ ! -L "$BASH_IT/enabled/260---nvm.plugin.bash" ] } @test "helpers: enable the nvm plugin twice" { run _enable-plugin "nvm" - assert_line -n 0 'nvm enabled with priority 225.' - assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash" + assert_line -n 0 'nvm enabled with priority 260.' + assert_link_exist "$BASH_IT/enabled/260---nvm.plugin.bash" run _enable-plugin "nvm" assert_line -n 0 'nvm is already enabled.' - assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash" + assert_link_exist "$BASH_IT/enabled/260---nvm.plugin.bash" } @test "helpers: profile load command sanity" { @@ -474,8 +474,8 @@ function local_setup { assert_line -n 1 'todo.txt-cli disabled.' assert_line -n 2 'todo.txt-cli enabled with priority 150.' - assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash" - assert_link_exist "$BASH_IT/enabled/250---node.plugin.bash" + assert_link_exist "$BASH_IT/enabled/260---nvm.plugin.bash" + assert_link_exist "$BASH_IT/enabled/270---node.plugin.bash" assert_link_exist "$BASH_IT/enabled/250---ssh.plugin.bash" assert_link_exist "$BASH_IT/enabled/150---todo.txt-cli.aliases.bash" assert [ ! -L "$BASH_IT/plugins/enabled/node.plugin.bash" ] @@ -484,11 +484,11 @@ function local_setup { } @test "helpers: migrate enabled plugins that use the new priority-based configuration in the individual directories" { - ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/225---nvm.plugin.bash - assert_link_exist "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" + ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/260---nvm.plugin.bash + assert_link_exist "$BASH_IT/plugins/enabled/260---nvm.plugin.bash" - ln -s $BASH_IT/plugins/available/node.plugin.bash $BASH_IT/plugins/enabled/250---node.plugin.bash - assert_link_exist "$BASH_IT/plugins/enabled/250---node.plugin.bash" + ln -s $BASH_IT/plugins/available/node.plugin.bash $BASH_IT/plugins/enabled/270---node.plugin.bash + assert_link_exist "$BASH_IT/plugins/enabled/270---node.plugin.bash" ln -s $BASH_IT/aliases/available/todo.txt-cli.aliases.bash $BASH_IT/aliases/enabled/250---todo.txt-cli.aliases.bash assert_link_exist "$BASH_IT/aliases/enabled/250---todo.txt-cli.aliases.bash" @@ -497,12 +497,12 @@ function local_setup { assert_link_exist "$BASH_IT/enabled/250---ssh.plugin.bash" run _bash-it-migrate - assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash" - assert_link_exist "$BASH_IT/enabled/250---node.plugin.bash" + assert_link_exist "$BASH_IT/enabled/260---nvm.plugin.bash" + assert_link_exist "$BASH_IT/enabled/270---node.plugin.bash" assert_link_exist "$BASH_IT/enabled/250---ssh.plugin.bash" assert_link_exist "$BASH_IT/enabled/150---todo.txt-cli.aliases.bash" - assert [ ! -L "$BASH_IT/plugins/enabled/225----node.plugin.bash" ] - assert [ ! -L "$BASH_IT/plugins/enabled/250----nvm.plugin.bash" ] + assert [ ! -L "$BASH_IT/plugins/enabled/270----node.plugin.bash" ] + assert [ ! -L "$BASH_IT/plugins/enabled/260----nvm.plugin.bash" ] assert [ ! -L "$BASH_IT/aliases/enabled/250----todo.txt-cli.aliases.bash" ] } @@ -598,33 +598,33 @@ function __migrate_all_components() { run bash-it enable plugin "node" assert_line -n 0 'Migrating plugin nvm.' assert_line -n 1 'nvm disabled.' - assert_line -n 2 'nvm enabled with priority 225.' + assert_line -n 2 'nvm enabled with priority 260.' assert_line -n 3 'If any migration errors were reported, please try the following: reload && bash-it migrate' - assert_line -n 4 'node enabled with priority 250.' + assert_line -n 4 'node enabled with priority 270.' assert [ ! -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ] - assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash" - assert_link_exist "$BASH_IT/enabled/250---node.plugin.bash" + assert_link_exist "$BASH_IT/enabled/260---nvm.plugin.bash" + assert_link_exist "$BASH_IT/enabled/270---node.plugin.bash" } @test "helpers: verify that existing components are automatically migrated when something is disabled" { ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/nvm.plugin.bash assert_link_exist "$BASH_IT/plugins/enabled/nvm.plugin.bash" - ln -s $BASH_IT/plugins/available/node.plugin.bash $BASH_IT/plugins/enabled/250---node.plugin.bash - assert_link_exist "$BASH_IT/plugins/enabled/250---node.plugin.bash" + ln -s $BASH_IT/plugins/available/node.plugin.bash $BASH_IT/plugins/enabled/270---node.plugin.bash + assert_link_exist "$BASH_IT/plugins/enabled/270---node.plugin.bash" run bash-it disable plugin "node" assert_line -n 0 'Migrating plugin node.' assert_line -n 1 'node disabled.' - assert_line -n 2 'node enabled with priority 250.' + assert_line -n 2 'node enabled with priority 270.' assert_line -n 3 'Migrating plugin nvm.' assert_line -n 4 'nvm disabled.' - assert_line -n 5 'nvm enabled with priority 225.' + assert_line -n 5 'nvm enabled with priority 260.' assert_line -n 6 'If any migration errors were reported, please try the following: reload && bash-it migrate' assert_line -n 7 'node disabled.' assert [ ! -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ] - assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash" - assert [ ! -L "$BASH_IT/plugins/enabled/250---node.plugin.bash" ] - assert [ ! -L "$BASH_IT/enabled/250---node.plugin.bash" ] + assert_link_exist "$BASH_IT/enabled/260---nvm.plugin.bash" + assert [ ! -L "$BASH_IT/plugins/enabled/270---node.plugin.bash" ] + assert [ ! -L "$BASH_IT/enabled/270---node.plugin.bash" ] } @test "helpers: enable all plugins" { @@ -672,8 +672,8 @@ function __migrate_all_components() { ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/250---nvm.plugin.bash assert_link_exist "$BASH_IT/plugins/enabled/250---nvm.plugin.bash" - ln -s $BASH_IT/plugins/available/node.plugin.bash $BASH_IT/plugins/enabled/250---node.plugin.bash - assert_link_exist "$BASH_IT/plugins/enabled/250---node.plugin.bash" + ln -s $BASH_IT/plugins/available/node.plugin.bash $BASH_IT/plugins/enabled/270---node.plugin.bash + assert_link_exist "$BASH_IT/plugins/enabled/270---node.plugin.bash" local enabled=$(find $BASH_IT/plugins/enabled -name *.plugin.bash | wc -l | xargs) assert_equal "2" "$enabled" @@ -712,8 +712,8 @@ function __migrate_all_components() { @test "helpers: describe the nvm plugin after enabling it" { run _enable-plugin "nvm" - assert_line -n 0 'nvm enabled with priority 225.' - assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash" + assert_line -n 0 'nvm enabled with priority 260.' + assert_link_exist "$BASH_IT/enabled/260---nvm.plugin.bash" _bash-it-plugins | grep "nvm" | grep "\[x\]" } @@ -726,8 +726,8 @@ function __migrate_all_components() { } @test "helpers: describe the nvm plugin after enabling it in the old directory with priority" { - ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/225---nvm.plugin.bash - assert_link_exist "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" + ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/260---nvm.plugin.bash + assert_link_exist "$BASH_IT/plugins/enabled/260---nvm.plugin.bash" _bash-it-plugins | grep "nvm" | grep "\[x\]" } From 88a5ea5206cdfc56d66ff368123f21afb0a695ad Mon Sep 17 00:00:00 2001 From: cornfeedhobo Date: Tue, 22 Feb 2022 20:50:06 -0600 Subject: [PATCH 2/2] Wholesale cleanup of nodejs related components - remove redundant cite - support Basher - add nenv plugin - uplift nodenv to follow newer pattern and standard - ensure node components play well with *env tools --- test/lib/search.bats | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/lib/search.bats b/test/lib/search.bats index 057951a0a5..172d8956b5 100755 --- a/test/lib/search.bats +++ b/test/lib/search.bats @@ -47,7 +47,7 @@ function local_teardown { run _bash-it-search rails ruby gem bundler rake --no-color assert_line -n 0 ' aliases: bundler rails ' - assert_line -n 1 ' plugins: chruby chruby-auto rails ruby ' + assert_line -n 1 ' plugins: chruby chruby-auto nenv nodenv rails ruby ' assert_line -n 2 ' completions: bundler gem rake ' } @@ -55,7 +55,7 @@ function local_teardown { run _bash-it-search rails ruby gem bundler rake -chruby --no-color assert_line -n 0 ' aliases: bundler rails ' - assert_line -n 1 ' plugins: rails ruby ' + assert_line -n 1 ' plugins: nenv nodenv rails ruby ' assert_line -n 2 ' completions: bundler gem rake ' }