# syntax=docker/dockerfile:1
FROM node:24.18.0-alpine@sha256:a0b9bf06e4e6193cf7a0f58816cc935ff8c2a908f81e6f1a95432d679c54fbfd AS deps
WORKDIR /usr/src/app
COPY package.json ./
COPY yarn.lock ./
RUN --mount=type=cache,id=littlelink-yarn-v1-cache-v2,target=/usr/local/share/.cache/yarn/v6,sharing=locked \
    yarn install --frozen-lockfile --check-files --network-timeout 600000

FROM node:24.18.0-alpine@sha256:a0b9bf06e4e6193cf7a0f58816cc935ff8c2a908f81e6f1a95432d679c54fbfd AS node-build
WORKDIR /usr/src/app
COPY --from=deps /usr/src/app/node_modules ./node_modules
COPY package.json ./
COPY yarn.lock ./
COPY src ./src
COPY public ./public
COPY app ./app
COPY next.config.ts ./
COPY tsconfig.json ./
COPY tsconfig.server.json ./
COPY next-env.d.ts ./
COPY server.ts ./
ENV NEXT_TELEMETRY_DISABLED=1
RUN --mount=type=cache,id=littlelink-next-cache-v2,target=/usr/src/app/.next/cache,sharing=locked yarn build
RUN rm -rf \
    .next/standalone/node_modules/@img/sharp-libvips-linux-* \
    .next/standalone/node_modules/@img/sharp-linux-*

FROM node:24.18.0-alpine@sha256:a0b9bf06e4e6193cf7a0f58816cc935ff8c2a908f81e6f1a95432d679c54fbfd
WORKDIR /usr/src/app
ENV NODE_ENV=production
ENV HOSTNAME=0.0.0.0
ENV PORT=3000
ENV NEXT_TELEMETRY_DISABLED=1
COPY --from=node-build --chown=node:node /usr/src/app/.next/standalone ./
COPY --from=node-build --chown=node:node /usr/src/app/.next/static ./.next/static
COPY --from=node-build --chown=node:node /usr/src/app/public ./public
USER node
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
    CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:3000/healthcheck || exit 1
CMD [ "node", "server.js" ]
