mirror of
https://github.com/storytold/artcraft.git
synced 2026-10-20 17:02:53 -04:00
This is a fresh start for the `artcraft` repo. The old monorepo, which included our web API gateway, job services, SRE tools, various frontends, and more has moved to `artcraft-services` You can find the full git history here: https://github.com/storytold/artcraft-services This change was motivated by the fact that the entire git history was hundreds of gigabytes in size, which is unwieldy for anyone not in the core team that doesn't care about support services outside of the core artcraft app. We wanted to keep this repo in its well-known place since we already have users and activity here. Please update your remotes to either `artcraft-services` or make a fresh clone of this repo. History can be found at the artcraft-services repo.
87 lines
3.0 KiB
Bash
Executable File
87 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Shared preflight checks for the frontend dev/build scripts.
|
|
#
|
|
# Usage (from a script that has set ${frontend_path}):
|
|
#
|
|
# source "${root_dir}/script/common/frontend_preflight.sh"
|
|
# frontend_preflight "${frontend_path}"
|
|
# ...
|
|
# pushd "${frontend_path}"
|
|
# frontend_npm_install
|
|
#
|
|
|
|
# Node 20+ is required by Nx 21 and comfortably covers Vite 6.
|
|
FRONTEND_MINIMUM_NODE_MAJOR=20
|
|
|
|
frontend_preflight() {
|
|
local frontend_path="$1"
|
|
|
|
if [ ! -d "${frontend_path}" ]; then
|
|
echo "ERROR: frontend directory not found at: ${frontend_path}"
|
|
echo "Run this script from the repository root."
|
|
exit 1
|
|
fi
|
|
|
|
# --- Node and npm must be installed ---
|
|
if ! command -v node &>/dev/null; then
|
|
echo "ERROR: node is not installed (or not on PATH)."
|
|
echo "Install Node.js ${FRONTEND_MINIMUM_NODE_MAJOR}+ via nvm (https://github.com/nvm-sh/nvm),"
|
|
echo "https://nodejs.org, or:"
|
|
echo " brew install node"
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v npm &>/dev/null; then
|
|
echo "ERROR: npm is not installed (or not on PATH). It normally ships with Node.js."
|
|
echo "Reinstall Node.js to get it back."
|
|
exit 1
|
|
fi
|
|
|
|
# --- Node must be recent enough for Nx 21 / Vite 6 ---
|
|
local node_major
|
|
node_major=$(node --version | sed -E 's/^v([0-9]+).*/\1/')
|
|
if [ "${node_major}" -lt "${FRONTEND_MINIMUM_NODE_MAJOR}" ]; then
|
|
echo "ERROR: Node.js ${FRONTEND_MINIMUM_NODE_MAJOR}+ is required (found $(node --version))."
|
|
echo "Upgrade via nvm ('nvm install --lts') or https://nodejs.org."
|
|
exit 1
|
|
fi
|
|
|
|
# --- The frontend uses npm; stale pnpm state breaks installs ---
|
|
# pnpm was briefly adopted ("add pnpm to solve build issues") and then dropped
|
|
# ("fix(frontend): consume video-editor libs via nx path aliases, drop pnpm").
|
|
# A node_modules tree written by pnpm makes npm fail with ENOTEMPTY errors.
|
|
if [ -e "${frontend_path}/pnpm-lock.yaml" ] \
|
|
|| [ -e "${frontend_path}/pnpm-workspace.yaml" ] \
|
|
|| [ -d "${frontend_path}/node_modules/.pnpm" ]; then
|
|
echo "ERROR: Stale pnpm artifacts detected in ${frontend_path}."
|
|
echo "The frontend uses npm (pnpm was dropped; see frontend/README.md)."
|
|
echo "Clean up with:"
|
|
echo " cd ${frontend_path} && rm -rf node_modules pnpm-lock.yaml pnpm-workspace.yaml && npm install"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Run `npm install` in the current directory. If it fails (typically from a
|
|
# corrupted node_modules tree, eg. an interrupted install or a leftover pnpm
|
|
# layout causing ENOTEMPTY rename errors), wipe node_modules and the nx cache
|
|
# and retry once before giving up.
|
|
frontend_npm_install() {
|
|
if npm install; then
|
|
return 0
|
|
fi
|
|
|
|
echo ""
|
|
echo "WARNING: npm install failed. node_modules may be corrupted (eg. an"
|
|
echo "interrupted install or a mixed npm/pnpm tree). Wiping and retrying..."
|
|
echo ""
|
|
|
|
rm -rf node_modules .nx
|
|
|
|
if ! npm install; then
|
|
echo ""
|
|
echo "ERROR: npm install failed again. See the npm output above and the"
|
|
echo "troubleshooting section in frontend/README.md."
|
|
exit 1
|
|
fi
|
|
}
|