# syntax=docker/dockerfile:1.3-labs
FROM node:lts-alpine as builder

ARG DATABASE_URL
ENV DATABASE_URL ${DATABASE_URL}}

ENV ENV development
ENV NODE_ENV development
ENV PNPM_HOME=/usr/local/bin
ENV PATH /app/node_modules/.bin/:/usr/local/bin:$PATH
ENV CPPFLAGS "-DPNG_ARM_NEON_OPT=0"

WORKDIR /app

RUN apk add zlib zlib-dev optipng pkgconfig autoconf automake libtool nasm build-base python3 && \
  npm i -g npm pnpm

COPY package.json pnpm-lock.yaml ./

RUN pnpm install --no-optional --strict-peer-dependencies=false

COPY . .

RUN pnpm run build:ssr

FROM node:lts-alpine

ENV ENV production
ENV NODE_ENV production
ENV PATH /app/node_modules/.bin/:/usr/local/bin:$PATH

WORKDIR /app

COPY --from=builder --chown=node:node /app/dist ./dist
COPY --from=builder --chown=node:node /app/prisma ./prisma
COPY --from=builder --chown=node:node /app/package.json ./package.json
COPY --from=builder --chown=node:node /app/pnpm-lock.yaml ./pnpm-lock.yaml

RUN npm i -g npm pnpm

RUN curl -sfL https://install.goreleaser.com/github.com/tj/node-prune.sh | bash -s -- -b /usr/local/bin

RUN pnpm config set store-dir /app/.pnpm-store && \
  pnpm install --no-optional --strict-peer-dependencies=false && \
  chown -R node:node /app

RUN /usr/local/bin/node-prune && rm -f /usr/local/bin/node-prune

USER node
EXPOSE 4200

HEALTHCHECK --timeout=5s \
  CMD curl --fail http://localhost:4200/api/healthz || exit 1

ENTRYPOINT ["node", "--max_old_space_size=4096", "/app/dist/skillcourt-website/server/main.js"]
