From 3ad910b61298b4f4dc59f9914010fa65604c66b3 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Wed, 28 Oct 2026 14:58:01 +0400 Subject: [PATCH] =?UTF-8?q?regression:=20web/=20=D0=B8=D0=B7=20git,=20?= =?UTF-8?q?=D0=B1=D0=B5=D0=B7=20=D1=88=D0=B0=D0=B3=D0=B0=20npm-ci=20(#181)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit web_copy копировал рабочий каталог arm-core/web вместе с неотслеживаемым локальным package-lock.json (устаревший, от 23.10). Lock в arm-core не коммитится (OQ-63, contour-transfer-guide §5), поэтому шаг npm-ci 28.10 был ложно красным — ложный баг AURORA-1912 (снят). Теперь копия — git archive HEAD:web, установка без lock, как в контуре; шаг npm-ci убран. README и dev/checks.md поправлены. Co-Authored-By: Claude Opus 5.5 --- dev/checks.md | 2 +- scripts/regression/README.md | 4 ++-- scripts/regression/regress.sh | 12 +++++------- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/dev/checks.md b/dev/checks.md index f3c3a6d..10fd4fb 100644 --- a/dev/checks.md +++ b/dev/checks.md @@ -122,7 +122,7 @@ docker compose -f ../docs/dev/docker-compose.yml --project-name arm-ka run --rm ### Перед выкладкой: полная регрессия `make regress` в docs (`scripts/regression/regress.sh`) прогоняет всё перечисленное выше по `main` всех репозиториев -сразу, не останавливаясь на первой ошибке, плюс то, чего нет в `check-full`: фронт в чистой копии с `npm ci`, e2e ядра с +сразу, не останавливаясь на первой ошибке, плюс то, чего нет в `check-full`: фронт в чистой копии из git, e2e ядра с настоящим парсером, стенд с нуля в отдельном compose-проекте со сценарием по API и контрольными цифрами, UI-смоук и прогон парсера по банку первички со сравнением с прошлым прогоном. Описание этапов и итога — `scripts/regression/README.md`. diff --git a/scripts/regression/README.md b/scripts/regression/README.md index 54e0f63..58876a0 100644 --- a/scripts/regression/README.md +++ b/scripts/regression/README.md @@ -25,7 +25,7 @@ preflight не пройден. | `preflight` | все репозитории (`docs`, `fixtures`, `arm-statements`, `arm-core`, `tabular-parser`, `scan-gateway`) на `main`, равны `origin/main`, без правок; Docker, `uv`, `npm`, `openspec`; нет чужих потребителей общей NATS (контейнеры сервисов `arm-ka`, ядро на `:8000`) — иначе интеграционные тесты и e2e падают по таймауту. Не пройден — прогон останавливается (`--allow-dirty` — прогнать как есть, с пометкой в итоге) | | `venv` | `make venv` во всех репозиториях (окружения по текущим зависимостям) | | `static` | `make check` docs (контракты, OpenSpec, снимок контура, `sync-statements`), обзор свежести копий `arm_statements`, `lint` и `test` arm-statements и трёх сервисов, `dbml-check` ядра | -| `web` | фронт `arm-core/web` в **чистой копии** во временном каталоге: `npm ci` (как пайплайн; при расхождении lock с `package.json` — красный, копия доустанавливается `npm install`), biome, `tsc`, ESLint + Prettier, vitest, сборка. `main` не меняется | +| `web` | фронт `arm-core/web` из git (`git archive HEAD:web`, неотслеживаемые файлы рабочего каталога не попадают) во временном каталоге: `npm install` без lock (lock в arm-core не коммитится, OQ-63 — как в контуре), biome, `tsc`, ESLint + Prettier, vitest, сборка. `main` не меняется | | `integration` | инфраструктура общего compose-проекта `arm-ka` (`make up`), `check-infra`, `test-integration` трёх сервисов; у ядра — с циклом миграций `upgrade → downgrade base → upgrade`. Тесты создают свои БД, рабочую `armka` не трогают | | `fixtures` | реальные данные парсера: `test-fixtures` (golden, покрытие словарей) и `golden-check` tabular-parser | | `images` | сборка образов `arm-core:dev`, `tabular-parser:dev`, `scan-gateway:dev` из `main` (профиль `services`) | @@ -65,5 +65,5 @@ preflight не пройден. ## Если шаг красный Сначала лог шага (`logs/<этап>.<шаг>.log`, путь — в `summary.md`). Частые причины не в коде: занятая NATS (preflight -`shared-consumers`), не поднятая инфраструктура, сеть для `npm ci` / `uv`. Шаг можно перезапустить отдельно: +`shared-consumers`), не поднятая инфраструктура, сеть для `npm install` / `uv`. Шаг можно перезапустить отдельно: `--only <этап> --out <тот же каталог>`. diff --git a/scripts/regression/regress.sh b/scripts/regression/regress.sh index f59135f..48d8114 100755 --- a/scripts/regression/regress.sh +++ b/scripts/regression/regress.sh @@ -138,17 +138,16 @@ st_static() { } # --- фронт arm-core/web ---------------------------------------------------------------------------------------------- -# В чистой копии web/ (без node_modules и dist) во временном каталоге, main не меняется (npm install в main переписывает -# package-lock.json, а node_modules main бывают собраны под другую ОС). Шаг npm-ci — воспроизводимость lock: красный, -# если lock расходится с package.json. Остальные шаги идут на установке без lock (npm-install): lock собран на linux, и -# по нему npm не ставит нативные пакеты другой ОС (biome, rspack, canvas — npm/cli#4828); так же ставит и контур, в -# снимке lock нет (dev/contour-transfer-guide.md §3.2). +# Копия web/ из git (`git archive HEAD:web` — ровно то, что в коммите, без node_modules, dist и прочих неотслеживаемых +# файлов) во временном каталоге; рабочий каталог main не меняется и не читается. web/package-lock.json в arm-core не +# коммитится (OQ-63, dev/contour-transfer-guide.md §5): установка без lock, как в контуре; локальный lock рабочего +# каталога (устаревший, собранный под другую ОС) в копию не попадает — 28.10.2026 он дал ложный красный npm ci (docs#181). WEB_TMP="" STAND_UP=0 PLAYWRIGHT="${PLAYWRIGHT:-playwright==1.55.0}" web_copy() { WEB_TMP=$(mktemp -d "${TMPDIR:-/tmp}/regress-web.XXXXXX") - rsync -a --exclude node_modules --exclude dist "$WS/arm-core/web/" "$WEB_TMP/" + git -C "$WS/arm-core" archive HEAD:web | tar -x -C "$WEB_TMP" echo "$WEB_TMP" } @@ -158,7 +157,6 @@ st_web() { web_copy >/dev/null local w="$WEB_TMP" echo "$w" >"$OUT/web-tmp" - step web npm-ci npm --prefix "$w" ci --no-audit --no-fund --dry-run step web npm-install web_install "$w" step web biome sh -c "cd '$w' && npx biome check src" step web tsc sh -c "cd '$w' && npx tsc --noEmit"