FROM node:22-alpine

WORKDIR /app

# Dynamic build arguments & environment variables
ARG SITE_DOMAIN
ARG SITE_URL
ARG PORT=8080
ENV SITE_DOMAIN=$SITE_DOMAIN
ENV SITE_URL=$SITE_URL
ENV PORT=$PORT
ENV NODE_ENV=production

# Install dependencies
COPY package*.json ./
RUN npm ci

# Copy application source files
COPY . .
RUN chmod +x /app/entrypoint.sh

# Pre-compile baseline static assets
RUN npm run build

# Expose web server port dynamically
EXPOSE ${PORT}

# Native container healthcheck probing IPv4 loopback
HEALTHCHECK --interval=30s --timeout=5s --start-period=3s --retries=3 \
  CMD node -e "fetch('http://127.0.0.1:' + (process.env.PORT || 8080) + '/healthz').then(r => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))"

# Serve site using dynamic entrypoint
ENTRYPOINT ["/app/entrypoint.sh"]
