build(tradein/frontend): состав зависимостей перестаёт зависеть от даты сборки (#2770) #2772
6 changed files with 8665 additions and 3721 deletions
|
|
@ -49,6 +49,7 @@ cd frontend && npm install --legacy-peer-deps --no-audit --no-fund
|
|||
- Pre-push check: `git diff main..HEAD -- frontend/package.json frontend/package-lock.json` — если только один из двух тронут → STOP, regen lock.
|
||||
- Imports без deps entry (TypeScript авто-resolve через transitive) — **latent bomb** до first `npm ci`.
|
||||
- Reference incident: PR #344 (2026-05-17) добавил `lucide-react` без regen lockfile → deploy #135 fail → P0 hotfix PR #345 (commit `6ee20294f2`).
|
||||
- **То же правило для `tradein-mvp/frontend/`** (#2770): там теперь тоже tracked `package-lock.json` + `npm ci` в Dockerfile и в `ci-tradein.yml`. До #2770 лока не было вовсе (лежал `pnpm-lock.yaml`, из которого никто не ставил), и состав зависимостей прод-образа определялся датой сборки.
|
||||
|
||||
## Prettier / lint
|
||||
|
||||
|
|
|
|||
|
|
@ -285,20 +285,23 @@ jobs:
|
|||
|
||||
- name: Set up Node
|
||||
# Node 20 — major из tradein-mvp/frontend/Dockerfile (node:20-alpine).
|
||||
# npm-кэш setup-node НЕ настраиваем: в tradein-mvp/frontend нет
|
||||
# package-lock.json (Dockerfile ставит через npm install), а cache=npm
|
||||
# без lockfile падает. Кэш wheels/node тут не критичен для type-check/lint.
|
||||
# cache: npm включён с #2770 — package-lock.json теперь tracked.
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20"
|
||||
cache: npm
|
||||
cache-dependency-path: tradein-mvp/frontend/package-lock.json
|
||||
|
||||
- name: Install deps (npm install, no lockfile)
|
||||
# ТОЧНЫЕ флаги из tradein-mvp/frontend/Dockerfile (deps stage):
|
||||
# --legacy-peer-deps — Tailwind/React 19 peer-dep mismatches;
|
||||
# --no-audit --no-fund — тише и быстрее в CI. `install` (не `ci`):
|
||||
# в tradein-mvp/frontend НЕТ package-lock.json (есть pnpm-lock.yaml, но
|
||||
# Dockerfile ставит именно npm install) → `npm ci` упал бы.
|
||||
run: npm install --legacy-peer-deps --no-audit --no-fund
|
||||
- name: Install deps (npm ci)
|
||||
# ТОЧНЫЕ флаги из tradein-mvp/frontend/Dockerfile (deps stage), чтобы гейт
|
||||
# видел то же дерево, что уедет в образ. `ci`, а не `install` (#2770): до
|
||||
# него лока не было вовсе (лежал мёртвый pnpm-lock.yaml, из которого никто
|
||||
# не ставил), и версии в CI и в прод-образе выбирались независимо по дате
|
||||
# сборки — гейт проверял не тот код, который деплоится.
|
||||
#
|
||||
# Правишь package.json — регенерируй лок в том же PR: `npm ci` требует
|
||||
# точного match и иначе роняет и этот job, и build образа.
|
||||
run: npm ci --legacy-peer-deps --no-audit --no-fund
|
||||
|
||||
- name: Type-check (tsc --noEmit)
|
||||
# Blocking: любая TS-ошибка → job RED.
|
||||
|
|
|
|||
5
tradein-mvp/.gitignore
vendored
5
tradein-mvp/.gitignore
vendored
|
|
@ -15,7 +15,10 @@ frontend/node_modules/
|
|||
frontend/.next/
|
||||
frontend/out/
|
||||
frontend/dist/
|
||||
frontend/package-lock.json
|
||||
# frontend/package-lock.json — TRACKED с #2770: Dockerfile и CI ставят `npm ci`,
|
||||
# которому лок обязателен. Правишь frontend/package.json — регенерируй лок
|
||||
# (`npm install --legacy-peer-deps --no-audit --no-fund`) в том же PR, иначе
|
||||
# `npm ci` роняет сборку образа и весь deploy откатывается.
|
||||
frontend/next-env.d.ts
|
||||
|
||||
# Docker
|
||||
|
|
|
|||
|
|
@ -4,9 +4,13 @@
|
|||
# ---- deps ----
|
||||
FROM node:20-alpine AS deps
|
||||
WORKDIR /app
|
||||
COPY package.json package-lock.json* ./
|
||||
# Лок ОБЯЗАТЕЛЕН (без `*`): `npm ci` без него падает, и это правильно —
|
||||
# отсутствие лока раньше молча давало `npm install`, т.е. состав зависимостей
|
||||
# определялся датой сборки (#2770).
|
||||
COPY package.json package-lock.json ./
|
||||
# --legacy-peer-deps: React 19 peer-dep mismatches (как в соседнем frontend/).
|
||||
RUN --mount=type=cache,target=/root/.npm \
|
||||
npm install --legacy-peer-deps --no-audit --no-fund
|
||||
npm ci --legacy-peer-deps --no-audit --no-fund
|
||||
|
||||
|
||||
# ---- builder ----
|
||||
|
|
|
|||
8641
tradein-mvp/frontend/package-lock.json
generated
Normal file
8641
tradein-mvp/frontend/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
3708
tradein-mvp/frontend/pnpm-lock.yaml
generated
3708
tradein-mvp/frontend/pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue