Merge pull request 'Регрессия: web/ из git, без шага npm-ci (#181)' (#182) from feat/181-regress-web-from-git into main

This commit is contained in:
aep 2026-10-28 14:02:11 +03:00
commit b754799694
3 changed files with 8 additions and 10 deletions

View File

@ -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` всех репозиториев `make regress` в docs (`scripts/regression/regress.sh`) прогоняет всё перечисленное выше по `main` всех репозиториев
сразу, не останавливаясь на первой ошибке, плюс то, чего нет в `check-full`: фронт в чистой копии с `npm ci`, e2e ядра с сразу, не останавливаясь на первой ошибке, плюс то, чего нет в `check-full`: фронт в чистой копии из git, e2e ядра с
настоящим парсером, стенд с нуля в отдельном compose-проекте со сценарием по API и контрольными цифрами, UI-смоук и настоящим парсером, стенд с нуля в отдельном compose-проекте со сценарием по API и контрольными цифрами, UI-смоук и
прогон парсера по банку первички со сравнением с прошлым прогоном. Описание этапов и итога — `scripts/regression/README.md`. прогон парсера по банку первички со сравнением с прошлым прогоном. Описание этапов и итога — `scripts/regression/README.md`.

View File

@ -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` — прогнать как есть, с пометкой в итоге) | | `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` во всех репозиториях (окружения по текущим зависимостям) | | `venv` | `make venv` во всех репозиториях (окружения по текущим зависимостям) |
| `static` | `make check` docs (контракты, OpenSpec, снимок контура, `sync-statements`), обзор свежести копий `arm_statements`, `lint` и `test` arm-statements и трёх сервисов, `dbml-check` ядра | | `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` не трогают | | `integration` | инфраструктура общего compose-проекта `arm-ka` (`make up`), `check-infra`, `test-integration` трёх сервисов; у ядра — с циклом миграций `upgrade → downgrade base → upgrade`. Тесты создают свои БД, рабочую `armka` не трогают |
| `fixtures` | реальные данные парсера: `test-fixtures` (golden, покрытие словарей) и `golden-check` tabular-parser | | `fixtures` | реальные данные парсера: `test-fixtures` (golden, покрытие словарей) и `golden-check` tabular-parser |
| `images` | сборка образов `arm-core:dev`, `tabular-parser:dev`, `scan-gateway:dev` из `main` (профиль `services`) | | `images` | сборка образов `arm-core:dev`, `tabular-parser:dev`, `scan-gateway:dev` из `main` (профиль `services`) |
@ -65,5 +65,5 @@ preflight не пройден.
## Если шаг красный ## Если шаг красный
Сначала лог шага (`logs/<этап>.<шаг>.log`, путь — в `summary.md`). Частые причины не в коде: занятая NATS (preflight Сначала лог шага (`logs/<этап>.<шаг>.log`, путь — в `summary.md`). Частые причины не в коде: занятая NATS (preflight
`shared-consumers`), не поднятая инфраструктура, сеть для `npm ci` / `uv`. Шаг можно перезапустить отдельно: `shared-consumers`), не поднятая инфраструктура, сеть для `npm install` / `uv`. Шаг можно перезапустить отдельно:
`--only <этап> --out <тот же каталог>`. `--only <этап> --out <тот же каталог>`.

View File

@ -138,17 +138,16 @@ st_static() {
} }
# --- фронт arm-core/web ---------------------------------------------------------------------------------------------- # --- фронт arm-core/web ----------------------------------------------------------------------------------------------
# В чистой копии web/ (без node_modules и dist) во временном каталоге, main не меняется (npm install в main переписывает # Копия web/ из git (`git archive HEAD:web` — ровно то, что в коммите, без node_modules, dist и прочих неотслеживаемых
# package-lock.json, а node_modules main бывают собраны под другую ОС). Шаг npm-ci — воспроизводимость lock: красный, # файлов) во временном каталоге; рабочий каталог main не меняется и не читается. web/package-lock.json в arm-core не
# если lock расходится с package.json. Остальные шаги идут на установке без lock (npm-install): lock собран на linux, и # коммитится (OQ-63, dev/contour-transfer-guide.md §5): установка без lock, как в контуре; локальный lock рабочего
# по нему npm не ставит нативные пакеты другой ОС (biome, rspack, canvas — npm/cli#4828); так же ставит и контур, в # каталога (устаревший, собранный под другую ОС) в копию не попадает — 28.10.2026 он дал ложный красный npm ci (docs#181).
# снимке lock нет (dev/contour-transfer-guide.md §3.2).
WEB_TMP="" STAND_UP=0 WEB_TMP="" STAND_UP=0
PLAYWRIGHT="${PLAYWRIGHT:-playwright==1.55.0}" PLAYWRIGHT="${PLAYWRIGHT:-playwright==1.55.0}"
web_copy() { web_copy() {
WEB_TMP=$(mktemp -d "${TMPDIR:-/tmp}/regress-web.XXXXXX") 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" echo "$WEB_TMP"
} }
@ -158,7 +157,6 @@ st_web() {
web_copy >/dev/null web_copy >/dev/null
local w="$WEB_TMP" local w="$WEB_TMP"
echo "$w" >"$OUT/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 npm-install web_install "$w"
step web biome sh -c "cd '$w' && npx biome check src" step web biome sh -c "cd '$w' && npx biome check src"
step web tsc sh -c "cd '$w' && npx tsc --noEmit" step web tsc sh -c "cd '$w' && npx tsc --noEmit"