FROM node:22-bookworm-slim

# Set working directory
WORKDIR /app

# Define volumes for persistent data storage
VOLUME [ "/app/assets" ]

# Install pnpm globally
RUN npm install pnpm@10.15.1 -g

# SHA used for versioning
ARG SHA=unknown

# Add package files and install dependencies
ADD package.json pnpm-lock.yaml ./
RUN pnpm i --frozen-lockfile

# Add configuration and source files
ADD tailwind.config.js tsconfig.json .babelrc .postcssrc .prettierrc .parcelrc srv.tsconfig.json ./
ADD common/ ./common/
ADD srv/ ./srv/
ADD web/ ./web
ADD ops/ ./ops/
ADD extras/ ./extras/

# Build the server and replace SHA in index.html
RUN pnpm run build:server && \
    sed -i "s/{{unknown}}/${SHA}/g" /app/web/index.html && \
    pnpm run build:prod && node ops/release.mjs media && mkdir -p /app/assets && \
    echo "${SHA}" > /app/version.txt
COPY source.tar.gz /app/dist/source.tar.gz

# Set environment variables
ENV LOG_LEVEL=info \
    INITIAL_USER=administrator \
    DB_NAME=river_story \
    ASSET_FOLDER=/app/assets \
    NODE_ENV=production

# Expose application ports
EXPOSE 3001

# Set the entry point and default command
CMD ["node", "srv/start.js"]
