#!/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"