#!/usr/bin/env bash set -euo pipefail APP_ROOT="${APP_ROOT:-/opt/desineuron-velocity-site}" REPO_URL="${REPO_URL:-https://git.desineuron.in/sagnik/Project_Velocity.git}" BRANCH="${BRANCH:-main}" REPO_DIR="${REPO_DIR:-$APP_ROOT/repo}" APP_DIR="${APP_DIR:-$REPO_DIR/app}" BUILD_DIR="${BUILD_DIR:-$APP_DIR/dist}" SERVE_ROOT="${SERVE_ROOT:-/var/www/velocity.desineuron.in}" CURRENT_DIR="${CURRENT_DIR:-$SERVE_ROOT/current}" STATE_DIR="${STATE_DIR:-$APP_ROOT/state}" REVISION_FILE="${REVISION_FILE:-$STATE_DIR/current_revision.txt}" PERSISTENT_VIDEO_DIR="${PERSISTENT_VIDEO_DIR:-$APP_ROOT/shared/videos}" mkdir -p "$APP_ROOT" "$STATE_DIR" "$SERVE_ROOT" "$PERSISTENT_VIDEO_DIR" if ! command -v git >/dev/null 2>&1; then echo "git is required" >&2 exit 1 fi if ! command -v npm >/dev/null 2>&1; then echo "npm is required" >&2 exit 1 fi if [ ! -d "$REPO_DIR/.git" ]; then git clone "$REPO_URL" "$REPO_DIR" fi git -C "$REPO_DIR" fetch --all --prune git -C "$REPO_DIR" checkout "$BRANCH" git -C "$REPO_DIR" reset --hard "origin/$BRANCH" pushd "$APP_DIR" >/dev/null if [ -f package-lock.json ]; then npm ci else npm install fi npm run build popd >/dev/null rm -rf "$CURRENT_DIR" mkdir -p "$CURRENT_DIR" cp -a "$BUILD_DIR"/. "$CURRENT_DIR"/ if [ -d "$PERSISTENT_VIDEO_DIR" ] && [ "$(find "$PERSISTENT_VIDEO_DIR" -maxdepth 1 -type f | wc -l)" -gt 0 ]; then mkdir -p "$CURRENT_DIR/videos" cp -a "$PERSISTENT_VIDEO_DIR"/. "$CURRENT_DIR/videos"/ fi git -C "$REPO_DIR" rev-parse HEAD > "$REVISION_FILE" date -u +"%Y-%m-%dT%H:%M:%SZ" > "$STATE_DIR/last_deploy_utc.txt" echo "Deployed revision $(cat "$REVISION_FILE") to $CURRENT_DIR"