FROM repo.nstart.cloud/library/node:22-alpine AS build
# Git commit для VersionBadge / UpdateBanner (vite.config.ts читает
# process.env.CI_COMMIT_SHORT_SHA на build time). Внутри Docker build
# context нет .git/ (BUILD_CONTEXT=ordinis-admin-ui/), vite
# execSync('git rev-parse') падает → fallback "unknown".
# CI передаёт реальный SHA через --build-arg GIT_COMMIT (см. .gitlab-ci.yml
# publish_script). ENV exposes его vite-процессу через CI_COMMIT_SHORT_SHA
# (тот же ключ что vite.config.ts проверяет первым).
ARG GIT_COMMIT=unknown
ENV CI_COMMIT_SHORT_SHA=$GIT_COMMIT
WORKDIR /app
# .npmrc нужен ДО pnpm install, иначе @nstart/* резолвятся в public npm и 404.
# pnpm-lock.yaml — для воспроизводимости (frozen lockfile в CI).
COPY package.json pnpm-lock.yaml .npmrc ./
# Pin pnpm@9.15.4 — exact version для reproducibility + lockfile compat
# (pnpm-lock.yaml lockfileVersion: '9.0').
# - corepack может hang в CI на integrity-check / non-TTY prompts. npm
#   install --silent надёжнее.
# - v10+ блокирует postinstall scripts ("Run pnpm approve-builds..."), в CI
#   нет интерактивного prompt'а → exit 1. v9 keeps старое поведение.
RUN npm install -g --silent pnpm@9.15.4
RUN --mount=type=cache,target=/root/.local/share/pnpm/store pnpm install --frozen-lockfile
COPY . .
RUN pnpm build

FROM repo.nstart.cloud/library/nginx:1.27-alpine
COPY --from=build /app/dist /usr/share/nginx/html
# Шаблон обрабатывается официальным entrypoint nginx-image:
# /docker-entrypoint.d/20-envsubst-on-templates.sh пробегает по
# /etc/nginx/templates/*.template и envsubst'ит ENV vars в /etc/nginx/conf.d/.
COPY nginx.conf /etc/nginx/templates/default.conf.template
ENV NGINX_ENVSUBST_TEMPLATE_DIR=/etc/nginx/templates \
    NGINX_ENVSUBST_TEMPLATE_SUFFIX=.template \
    NGINX_ENVSUBST_OUTPUT_DIR=/etc/nginx/conf.d
EXPOSE 80
