diff --git a/Frontend/scripts/compose-dev.sh b/Frontend/scripts/compose-dev.sh index 2cb5d68..1521706 100755 --- a/Frontend/scripts/compose-dev.sh +++ b/Frontend/scripts/compose-dev.sh @@ -6,7 +6,6 @@ cd "$(dirname "$0")/.." # Serialize dependency install when multiple containers share the same workspace. LOCK_FILE=/app/Frontend/.npm-install.lock exec 9>"$LOCK_FILE" -flock 9 # Prevent path leakage between host Nuxt build cache and Docker runtime. # If any cache contains absolute /Users/... imports, Nitro dev runtime can break in /app. @@ -15,24 +14,29 @@ find .nuxt -mindepth 1 -maxdepth 1 -exec rm -rf {} + || true find .output -mindepth 1 -maxdepth 1 -exec rm -rf {} + || true rm -rf node_modules/.cache node_modules/.vite -# Install deps (container starts from a clean image). -# This workspace has mixed Apollo/Nuxt peer graphs; keep install deterministic in Docker. -npm install --legacy-peer-deps +# Only installation steps are serialized; runtime must not hold the lock. +( + flock 9 -# sharp is a native module and can break when cached node_modules were installed -# for a different CPU variant (for example arm64v8). Force a local rebuild. -ARCH="$(uname -m)" -if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then - npm rebuild sharp --platform=linux --arch=arm64v8 \ - || npm rebuild sharp --platform=linux --arch=arm64 \ - || npm install sharp --platform=linux --arch=arm64v8 --save-exact=false \ - || npm install sharp --platform=linux --arch=arm64 --save-exact=false -elif [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "amd64" ]; then - npm rebuild sharp --platform=linux --arch=x64 \ - || npm install sharp --platform=linux --arch=x64 --save-exact=false -else - npm rebuild sharp || true -fi + # Install deps (container starts from a clean image). + # This workspace has mixed Apollo/Nuxt peer graphs; keep install deterministic in Docker. + npm install --legacy-peer-deps + + # sharp is a native module and can break when cached node_modules were installed + # for a different CPU variant (for example arm64v8). Force a local rebuild. + ARCH="$(uname -m)" + if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then + npm rebuild sharp --platform=linux --arch=arm64v8 \ + || npm rebuild sharp --platform=linux --arch=arm64 \ + || npm install sharp --platform=linux --arch=arm64v8 --save-exact=false \ + || npm install sharp --platform=linux --arch=arm64 --save-exact=false + elif [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "amd64" ]; then + npm rebuild sharp --platform=linux --arch=x64 \ + || npm install sharp --platform=linux --arch=x64 --save-exact=false + else + npm rebuild sharp || true + fi +) # Wait until PostgreSQL is reachable before applying schema. until node -e "const u=new URL(process.env.DATABASE_URL||''); const net=require('net'); const s=net.createConnection({host:u.hostname,port:Number(u.port||5432)}); s.on('connect',()=>{s.end(); process.exit(0);}); s.on('error',()=>process.exit(1)); setTimeout(()=>process.exit(1), 1000);" ; do diff --git a/Frontend/scripts/compose-worker.sh b/Frontend/scripts/compose-worker.sh index 0a8907a..1441330 100644 --- a/Frontend/scripts/compose-worker.sh +++ b/Frontend/scripts/compose-worker.sh @@ -6,24 +6,28 @@ cd "$(dirname "$0")/.." # Serialize dependency install when multiple containers share the same workspace. LOCK_FILE=/app/Frontend/.npm-install.lock exec 9>"$LOCK_FILE" -flock 9 -# Worker container starts from clean image. -# Install deps without frontend postinstall hooks (nuxt prepare) to keep worker lean/stable. -npm install --ignore-scripts --legacy-peer-deps -ARCH="$(uname -m)" -if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then - npm rebuild sharp --platform=linux --arch=arm64v8 \ - || npm rebuild sharp --platform=linux --arch=arm64 \ - || npm install sharp --platform=linux --arch=arm64v8 --save-exact=false \ - || npm install sharp --platform=linux --arch=arm64 --save-exact=false -elif [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "amd64" ]; then - npm rebuild sharp --platform=linux --arch=x64 \ - || npm install sharp --platform=linux --arch=x64 --save-exact=false -else - npm rebuild sharp || true -fi -npx prisma generate +# Only dependency bootstrap is serialized; worker runtime must not hold the lock. +( + flock 9 + + # Worker container starts from clean image. + # Install deps without frontend postinstall hooks (nuxt prepare) to keep worker lean/stable. + npm install --ignore-scripts --legacy-peer-deps + ARCH="$(uname -m)" + if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then + npm rebuild sharp --platform=linux --arch=arm64v8 \ + || npm rebuild sharp --platform=linux --arch=arm64 \ + || npm install sharp --platform=linux --arch=arm64v8 --save-exact=false \ + || npm install sharp --platform=linux --arch=arm64 --save-exact=false + elif [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "amd64" ]; then + npm rebuild sharp --platform=linux --arch=x64 \ + || npm install sharp --platform=linux --arch=x64 --save-exact=false + else + npm rebuild sharp || true + fi + npx prisma generate +) # Ensure DB is reachable before the worker starts consuming jobs. until node -e "const u=new URL(process.env.DATABASE_URL||''); const net=require('net'); const s=net.createConnection({host:u.hostname,port:Number(u.port||5432)}); s.on('connect',()=>{s.end(); process.exit(0);}); s.on('error',()=>process.exit(1)); setTimeout(()=>process.exit(1), 1000);" ; do