41 lines
989 B
Bash
41 lines
989 B
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
RUNTIME_ROOT="/opt/zlh/runtime/node"
|
|
ARTIFACT_ROOT="/opt/zlh/devcontainer/node"
|
|
|
|
VERSION="${RUNTIME_VERSION:-24}"
|
|
|
|
ARCHIVE="node-v${VERSION}.*-linux-x64.tar.xz"
|
|
SRC_DIR="${ARTIFACT_ROOT}/${VERSION}"
|
|
DEST_DIR="${RUNTIME_ROOT}/${VERSION}"
|
|
|
|
echo "[node] Installing Node.js version ${VERSION}"
|
|
|
|
# Ensure runtime root exists
|
|
mkdir -p "${RUNTIME_ROOT}"
|
|
|
|
# Idempotency check
|
|
if [ -d "${DEST_DIR}" ]; then
|
|
echo "[node] Node ${VERSION} already installed"
|
|
else
|
|
ARCHIVE_PATH=$(ls "${SRC_DIR}/${ARCHIVE}" 2>/dev/null || true)
|
|
|
|
if [ -z "${ARCHIVE_PATH}" ]; then
|
|
echo "[node][ERROR] Artifact not found for Node ${VERSION}"
|
|
exit 1
|
|
fi
|
|
|
|
echo "[node] Extracting ${ARCHIVE_PATH}"
|
|
mkdir -p "${DEST_DIR}"
|
|
tar -xJf "${ARCHIVE_PATH}" -C "${DEST_DIR}" --strip-components=1
|
|
fi
|
|
|
|
# Update stable symlink
|
|
ln -sfn "${DEST_DIR}" "${RUNTIME_ROOT}/current"
|
|
|
|
# Permissions sanity
|
|
chmod -R 755 "${DEST_DIR}"
|
|
|
|
echo "[node] Node ${VERSION} installed successfully"
|