# syntax=docker/dockerfile:1.7

# Build from the monorepo root context so this image can use:
# - apps/crud-api
# - packages/contracts
FROM node:20-alpine AS base
WORKDIR /workspace
RUN corepack enable

FROM base AS deps
COPY package.json yarn.lock .yarnrc.yml ./
COPY .yarn/ ./.yarn/
COPY apps/crud-api/package.json ./apps/crud-api/package.json
COPY packages/contracts/package.json ./packages/contracts/package.json

# Use node_modules inside the container for predictable runtime behavior.
RUN YARN_NODE_LINKER=node-modules yarn install --immutable

FROM deps AS build
COPY apps/crud-api ./apps/crud-api
COPY packages/contracts ./packages/contracts
RUN yarn workspace crud-api build

FROM node:20-alpine AS runtime
WORKDIR /workspace
ENV NODE_ENV=production
RUN corepack enable

COPY --from=build /workspace/package.json /workspace/yarn.lock /workspace/.yarnrc.yml ./
COPY --from=build /workspace/.yarn ./.yarn
COPY --from=build /workspace/node_modules ./node_modules
COPY --from=build /workspace/apps/crud-api ./apps/crud-api
COPY --from=build /workspace/packages/contracts ./packages/contracts

EXPOSE 3000
CMD ["yarn", "workspace", "crud-api", "start"]
