#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")/.." # Serialize dependency install when multiple containers share the same workspace. LOCK_FILE=/app/Frontend/.npm-install.lock exec 9>"$LOCK_FILE" # 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 echo "Waiting for PostgreSQL..." sleep 1 done exec npm run worker:delivery