Wordpress/tools/local-env/install-node-nvm.sh

95 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
NVM_VERSION=`curl -Ls -w %{url_effective} -o /dev/null https://github.com/nvm-sh/nvm/releases/latest | rev | cut -d '/' -f 1 | rev`
# Exit if any command fails
set -e
# Include useful functions
. "$(dirname "$0")/includes.sh"
# Load NVM
if [ -n "$NVM_DIR" ]; then
# The --no-use option ensures loading NVM doesn't switch the current version.
if [ -f "$NVM_DIR/nvm.sh" ]; then
. "$NVM_DIR/nvm.sh" --no-use
elif command_exists "brew" && [ -f "$(brew --prefix nvm)/nvm.sh" ]; then
# use homebrew if that's how nvm was installed
. "$(brew --prefix nvm)/nvm.sh" --no-use
fi
fi
# Change to the expected directory
cd "$(dirname "$0")/../.."
# Check if nvm is installed
if [ "$TRAVIS" != "true" ] && ! command_exists "nvm"; then
if ask "$(error_message "NVM isn't installed, would you like to download and install it automatically?")" Y; then
# The .bash_profile file needs to exist for NVM to install
if [ ! -e ~/.bash_profile ]; then
touch ~/.bash_profile
fi
echo -en $(status_message "Installing NVM..." )
download "https://raw.githubusercontent.com/nvm-sh/nvm/$NVM_VERSION/install.sh" | bash >/dev/null 2>&1
echo ' done!'
echo -e $(warning_message "NVM was updated, please run this command to reload it:" )
echo -e $(warning_message "$(action_format ". \$HOME/.nvm/nvm.sh")" )
echo -e $(warning_message "After that, re-run the setup script to continue." )
else
echo -e $(error_message "")
echo -e $(error_message "Please install NVM manually, then re-run the setup script to continue.")
echo -e $(error_message "NVM installation instructions can be found here: $(action_format "https://github.com/nvm-sh/nvm")")
fi
exit 1
fi
# Check if the current nvm version is up to date.
if [ "$TRAVIS" != "true" ] && [ $NVM_VERSION != "v$(nvm --version)" ]; then
echo -en $(status_message "Updating NVM..." )
download "https://raw.githubusercontent.com/nvm-sh/nvm/$NVM_VERSION/install.sh" | bash >/dev/null 2>&1
echo ' done!'
echo -e $(warning_message "NVM was updated, please run this command to reload it:" )
echo -e $(warning_message "$(action_format ". \$HOME/.nvm/nvm.sh")" )
echo -e $(warning_message "After that, re-run the setup script to continue." )
exit 1
fi
# Check if the current node version is up to date.
if [ "$TRAVIS" != "true" ] && [ "$(nvm current)" != "$(nvm version-remote --lts)" ]; then
echo -e $(warning_message "Node version does not match the latest long term support version. Please run this command to install and use it:" )
echo -e $(warning_message "$(action_format "nvm install")" )
echo -e $(warning_message "After that, re-run the setup script to continue." )
exit 1
fi
# Install/update packages
echo -e $(status_message "Installing and updating NPM packages..." )
npm install
# Make sure npm is up-to-date
npm install npm -g
# There was a bug in NPM that caused changes in package-lock.json. Handle that.
if [ "$TRAVIS" != "true" ] && ! git diff --no-ext-diff --exit-code package-lock.json >/dev/null; then
if ask "$(warning_message "Your package-lock.json changed, which may mean there's an issue with your NPM cache. Would you like to try and automatically clean it up?" )" N 10; then
rm -rf node_modules/
npm cache clean --force >/dev/null 2>&1
git checkout package-lock.json
echo -e $(status_message "Reinstalling NPM packages..." )
npm install
# Check that it's cleaned up now.
if git diff --no-ext-diff --exit-code package-lock.json >/dev/null; then
echo -e $(warning_message "Confirmed that the NPM cache is cleaned up." )
else
echo -e $(error_message "We were unable to clean the NPM cache, please manually review the changes to package-lock.json. Continuing with the setup process..." )
fi
else
echo -e $(warning_message "Please manually review the changes to package-lock.json. Continuing with the setup process..." )
fi
fi