#!/usr/bin/env bash # Triggered by the Payload afterChange webhook. # Pulls the latest source and rebuilds the static site. set -euo pipefail REPO_DIR="${REPO_DIR:-/opt/softvowels}" BRANCH="${BRANCH:-main}" LOG_FILE="${LOG_FILE:-/var/log/softvowels-rebuild.log}" cd "$REPO_DIR" echo "[$(date -Is)] Rebuild start" >> "$LOG_FILE" if ! git fetch --depth 1 origin "$BRANCH" >> "$LOG_FILE" 2>&1; then echo "[$(date -Is)] git fetch failed" >> "$LOG_FILE" exit 1 fi LOCAL=$(git rev-parse HEAD) REMOTE=$(git rev-parse "origin/$BRANCH") if [ "$LOCAL" = "$REMOTE" ]; then echo "[$(date -Is)] No changes (HEAD=$LOCAL). Skip." >> "$LOG_FILE" exit 0 fi git reset --hard "origin/$BRANCH" >> "$LOG_FILE" 2>&1 echo "[$(date -Is)] Updated to $REMOTE" >> "$LOG_FILE" if command -v pnpm >/dev/null 2>&1; then PKG=pnpm elif command -v npm >/dev/null 2>&1; then PKG="npm run --workspace=web" else echo "[$(date -Is)] No package manager found" >> "$LOG_FILE" exit 2 fi case "$PKG" in pnpm) pnpm install --frozen-lockfile >> "$LOG_FILE" 2>&1 pnpm --filter web build >> "$LOG_FILE" 2>&1 ;; *) (cd apps/web && npm ci --no-audit --no-fund >> "$LOG_FILE" 2>&1) (cd apps/web && npm run build >> "$LOG_FILE" 2>&1) ;; esac echo "[$(date -Is)] Rebuild done" >> "$LOG_FILE"