install.fairie/docs/scripts/before/run_onchange_before_08-install-zx.sh.tmpl.md

114 lines
4.2 KiB
Markdown
Raw Normal View History

---
title: Node.js / Volta / ZX Install
description: Ensures Node.js, Volta, and ZX are installed prior to Chezmoi applying the dotfile state.
sidebar_label: 08 Node.js / Volta / ZX Install
slug: /scripts/before/run_onchange_before_08-install-zx.sh.tmpl
githubLocation: https://github.com/megabyte-labs/install.doctor/blob/master/home/.chezmoiscripts/universal/run_onchange_before_08-install-zx.sh.tmpl
scriptLocation: https://github.com/megabyte-labs/install.doctor/raw/master/home/.chezmoiscripts/universal/run_onchange_before_08-install-zx.sh.tmpl
repoLocation: home/.chezmoiscripts/universal/run_onchange_before_08-install-zx.sh.tmpl
---
# Node.js / Volta / ZX Install
Ensures Node.js, Volta, and ZX are installed prior to Chezmoi applying the dotfile state.
## Overview
This script ensures required dependencies are installed. These dependencies include:
1. **[Node.js](https://nodejs.org/en)**: JavaScript runtime engine which is installed to ensure any user with Homebrew configured can access Node.js
2. **[Volta](https://volta.sh/)**: Node.js version manager that provides the capability of automatically using `package.json` defined Node.js versions
3. **[ZX](https://github.com/google/zx)**: Used for the script that installs the software packages on any OS
The Volta setup process will ensure that the user is configured to use the latest Node.js version, by default. It then
also ensures the user's `~/.bashrc` and `~/.zshrc` profiles are setup for use with Volta.
## Source Code
```
{{- if (ne .host.distro.family "windows") -}}
#!/usr/bin/env bash
# @file Node.js / Volta / ZX Install
# @brief Ensures Node.js, Volta, and ZX are installed prior to Chezmoi applying the dotfile state.
# @description
# This script ensures required dependencies are installed. These dependencies include:
#
# 1. **[Node.js](https://nodejs.org/en)**: JavaScript runtime engine which is installed to ensure any user with Homebrew configured can access Node.js
# 2. **[Volta](https://volta.sh/)**: Node.js version manager that provides the capability of automatically using `package.json` defined Node.js versions
# 3. **[ZX](https://github.com/google/zx)**: Used for the script that installs the software packages on any OS
#
# The Volta setup process will ensure that the user is configured to use the latest Node.js version, by default. It then
# also ensures the user's `~/.bashrc` and `~/.zshrc` profiles are setup for use with Volta.
{{ includeTemplate "universal/profile-before" }}
{{ includeTemplate "universal/logg-before" }}
### Ensure node is installed
if ! command -v node > /dev/null; then
if command -v brew; then
2023-11-04 18:46:18 -07:00
logg 'Installing node via Homebrew'
brew install node || NODE_EXIT_CODE=$?
if [ -n "$NODE_EXIT_CODE" ]; then
2023-11-04 18:46:18 -07:00
logg warn 'Calling brew link --overwrite node because the Node.js installation seems to be misconfigured'
brew link --overwrite node
fi
else
2023-11-04 18:46:18 -07:00
logg 'brew is unavailable. Cannot use it to perform a system installation of node.'
fi
else
2023-11-04 18:46:18 -07:00
logg 'node is available'
fi
### Ensure Volta is installed
if ! command -v volta > /dev/null; then
if command -v brew > /dev/null; then
2023-11-04 18:46:18 -07:00
logg 'Installing volta via brew'
brew install volta
else
2023-11-04 18:46:18 -07:00
logg warn 'brew needs to be available to install Volta'
fi
else
if ! node --version > /dev/null; then
volta install node@latest
fi
fi
### Setup Volta
if command -v volta > /dev/null; then
### Handle scenario where VOLTA_HOME is not defined yet
if [ -z "$VOLTA_HOME" ]; then
logg warn 'VOLTA_HOME is not defined'
2023-11-04 18:46:18 -07:00
logg info 'Running volta setup'
volta setup
fi
### Source .bashrc
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
else
2023-11-04 18:46:18 -07:00
logg warn 'Could not find ~/.bashrc to source the results of volta setup from'
fi
### Set PATH and install latest Node.js version via Volta
export PATH="$VOLTA_HOME/bin:$PATH"
2023-11-04 18:46:18 -07:00
logg 'Installing node via volta'
volta install node@latest
else
2023-11-04 18:46:18 -07:00
logg warn 'volta needs to be installed'
fi
### Ensure zx is installed
if ! command -v zx > /dev/null; then
if command -v volta > /dev/null; then
2023-11-04 18:46:18 -07:00
logg 'Installing zx via volta'
volta install zx
else
2023-11-04 18:46:18 -07:00
logg 'volta is missing'
fi
else
2023-11-04 18:46:18 -07:00
logg 'zx is already installed'
fi
{{ end -}}
```