fix: harden deploys and close top security holes after /events outage
Isolate next dev from production .next, add build-guard/atomic deploy/health watchdog, error boundaries, and fix JWT startup, meetup leaks, media path traversal, SVG/memory uploads, and JSON-LD escaping. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Executable
+43
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Guard against serving a corrupted / dev-contaminated Next.js production build.
|
||||
#
|
||||
# Runs as an ExecStartPre for bbe-frontend.service. A stray `next dev` against
|
||||
# the production checkout overwrites .next/build-manifest.json (and friends) with
|
||||
# development artifacts, which makes every request-time route 500. Rather than
|
||||
# let the server boot and silently serve errors for days, we refuse to start and
|
||||
# log a clear, actionable message.
|
||||
#
|
||||
# Exit codes: 0 = build looks like a valid production build, non-zero otherwise.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Resolve the frontend dir relative to this script so it works regardless of cwd.
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
FRONTEND_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
NEXT_DIR="${FRONTEND_DIR}/.next"
|
||||
|
||||
fail() {
|
||||
echo "verify-prod-build: FATAL: $1" >&2
|
||||
echo "verify-prod-build: run 'npm run build' (or scripts/deploy-frontend.sh) to produce a clean production build." >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
[ -d "${NEXT_DIR}" ] || fail "no .next directory at ${NEXT_DIR}"
|
||||
[ -f "${NEXT_DIR}/BUILD_ID" ] || fail ".next/BUILD_ID is missing (incomplete or wiped build)"
|
||||
[ -f "${NEXT_DIR}/build-manifest.json" ] || fail ".next/build-manifest.json is missing"
|
||||
[ -f "${NEXT_DIR}/app-build-manifest.json" ] || fail ".next/app-build-manifest.json is missing"
|
||||
[ -f "${NEXT_DIR}/prerender-manifest.json" ] || fail ".next/prerender-manifest.json is missing (dev builds omit it)"
|
||||
|
||||
# A dev run leaves .next/static/development/ behind; production never has it.
|
||||
if [ -d "${NEXT_DIR}/static/development" ]; then
|
||||
fail ".next/static/development exists — this .next was contaminated by 'next dev'"
|
||||
fi
|
||||
|
||||
# Development manifests reference static/development/* chunks; production ones don't.
|
||||
if grep -q "static/development" "${NEXT_DIR}/build-manifest.json" 2>/dev/null; then
|
||||
fail "build-manifest.json references static/development — dev build detected"
|
||||
fi
|
||||
|
||||
echo "verify-prod-build: OK (BUILD_ID=$(cat "${NEXT_DIR}/BUILD_ID"))"
|
||||
exit 0
|
||||
Reference in New Issue
Block a user