#!/usr/bin/env bash # Bring up / refresh the pms1 STAGING instance with the latest master, for smoke # testing before tagging a release. Runs the app as pm2 process `ppms-staging` on # port 3200, against the prod-mirror test DB (pelagia_test), in safe dev mode # (no real emails/uploads). Separate from ~/pms (prod) and ~/pelagia-autofix. # # Usage on pms1: ~/issue-watcher/staging-up.sh # Re-run any time to pull latest master and restart staging. set -euo pipefail export NVM_DIR="$HOME/.nvm"; . "$NVM_DIR/nvm.sh" DIR="$HOME/pelagia-staging" PORT=3200 NAME="ppms-staging" REPO_URL="http://127.0.0.1:3001/shad0w/pelagia-portal.git" if [ ! -d "$DIR/.git" ]; then echo "Cloning into $DIR ..." git clone -q "$REPO_URL" "$DIR" fi cd "$DIR" git fetch origin -q git checkout -f master -q 2>/dev/null || git checkout -fB master origin/master -q git reset --hard origin/master echo "Staging checkout: $(git log --oneline -1)" # One-time env: test DB, dev mode, port 3200. if [ ! -f "$DIR/App/.env" ]; then PROD_URL=$(grep -E '^DATABASE_URL' "$HOME/pms/App/.env" | sed -E 's/^DATABASE_URL=//; s/^"//; s/"$//') TEST_URL=$(printf '%s' "$PROD_URL" | sed -E "s#(@[^/]+/)pelagia([?]|\$)#\1pelagia_test\2#") INV=$(grep -E '^NEXT_PUBLIC_INVENTORY_ENABLED' "$HOME/pms/App/.env" || echo 'NEXT_PUBLIC_INVENTORY_ENABLED=true') SECRET=$(openssl rand -base64 32) cat > "$DIR/App/.env" < "$DIR/App/run-staging.sh" </dev/null 2>&1; then pm2 restart "$NAME" --update-env else pm2 start "$DIR/App/run-staging.sh" --name "$NAME" --interpreter bash fi pm2 save echo "Staging '$NAME' is up on port $PORT ($(git -C "$DIR" log --oneline -1))"