#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")" MIRROR="${NPM_REGISTRY:-https://registry.npmmirror.com}" MIRROR="${MIRROR%/}" NODE_VERSION="${NODE_VERSION:-22.14.0}" NODE_DIR="${PWD}/.tools/node" NODE_BIN="${NODE_DIR}/bin" echo "==> npm registry: $MIRROR" # Node پرتابل از میرور (بدون apt و بدون docker pull) if [ ! -x "${NODE_BIN}/node" ]; then echo "==> دانلود Node ${NODE_VERSION} از npmmirror..." mkdir -p .tools curl -fL --retry 5 --retry-delay 2 \ "https://npmmirror.com/mirrors/node/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz" \ -o /tmp/node.tar.xz rm -rf "${NODE_DIR}" mkdir -p .tools tar -xJf /tmp/node.tar.xz -C .tools mv ".tools/node-v${NODE_VERSION}-linux-x64" "${NODE_DIR}" rm -f /tmp/node.tar.xz fi export PATH="${NODE_BIN}:${PATH}" echo "==> $(node -v) / npm $(npm -v)" echo "==> آماده‌سازی package-lock برای میرور..." sed -i \ -e "s|https://registry.npmjs.org|${MIRROR}|g" \ -e "s|https://mirror.iranserver.com/npm|${MIRROR}|g" \ package-lock.json npm config set registry "$MIRROR" npm config set fetch-retries 5 npm config set fetch-retry-mintimeout 20000 npm config set fetch-retry-maxtimeout 120000 npm config set progress true npm config set loglevel info echo "==> npm ci روی دیسک سرور (سریع‌تر از داخل Docker)..." npm ci --no-audit --no-fund echo "==> prisma generate + build..." npx prisma generate npm run build npm prune --omit=dev npm install prisma ts-node typescript --no-save --no-audit --no-fund --registry="$MIRROR" echo "==> Docker فقط برای اجرا (Postgres + API)..." export RUN_SEED="${RUN_SEED:-true}" # برای بیلد prebuilt به ایمیج پایه node نیاز است؛ اگر نباشد از هاب می‌گیرد if ! docker image inspect node:22-alpine >/dev/null 2>&1; then echo "==> pull node:22-alpine برای ایمیج نهایی..." docker pull node:22-alpine || true fi docker compose -f docker-compose.prebuilt.yml up -d --build echo "" echo "OK → curl http://127.0.0.1:3000/api/health" echo "logs → docker compose -f docker-compose.prebuilt.yml logs -f api"