Files
chatballs/scripts/check.ps1
T
AndreyandClaude Opus 5 2976856760 ✅ fix(scripts): check.ps1 действительно проверяет, а не делает вид
Скрипт был зелёным всегда. `$ErrorActionPreference = "Stop"` не влияет на код
возврата нативных команд, поэтому упавший pytest проходил как успех: проверено
на живом примере — прежняя схема при команде с кодом 3 доходила до конца и
возвращала 0. Теперь каждый шаг сверяется с $LASTEXITCODE, провалившиеся
перечисляются в конце, скрипт выходит с 1.

Кроме этого:

- явные `-f compose.yaml -f compose.dev.yaml`: сервисы frontend и web-chat
  (node) существуют только в dev-оверлее, в базовом compose frontend —
  production-образ nginx, где нет npm. Голый `docker compose` три шага из
  четырёх выполнить не мог в принципе;
- добавлены CLI-тесты и e2e — раньше их не было ни в одном скрипте;
- порядок от быстрых проверок к длинным: typecheck, vitest, CLI, e2e, backend
  (~20 минут). Дешёвые ошибки всплывают за секунды;
- скрипт не останавливается на первом падении: прогоняет всё и показывает
  список провалов, иначе каждая ошибка стоила бы отдельного круга.

playwright.config.ts: `webServer` поднимал только internal-ui на :5173, а
проект web-chat-mobile ходит на :5175 — без заранее поднятого dev-стека прогон
падал. Описаны оба сервера, e2e стали самодостаточными; без этого включать их
в check.ps1 не имело смысла.

Проверка: полный прогон скрипта — 6 шагов, все зелёные, exit code 0
(typecheck ×2, vitest 76, CLI 9, e2e 8, backend 624).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 20:10:00 +03:00

53 lines
2.7 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Полная проверка репозитория Chatballs (Windows).
#
# Запускается из любого каталога: скрипт сам переходит в корень code/chatballs.
#
# Два места, где прежняя редакция скрипта молча врала:
# 1) голый `docker compose` читает только compose.yaml, а сервисы frontend и
# web-chat (node) существуют лишь в dev-оверлее — в базовом compose
# frontend это production-образ nginx, где нет npm;
# 2) $ErrorActionPreference не останавливает скрипт на ненулевом коде
# возврата нативных команд, поэтому падение тестов проходило как успех.
# Каждый шаг проверяется явно по $LASTEXITCODE.
#
# Требуется один раз: npx playwright install chromium.
$ErrorActionPreference = "Stop"
Set-Location (Join-Path $PSScriptRoot "..")
$compose = "compose", "-f", "compose.yaml", "-f", "compose.dev.yaml"
$failed = @()
function Invoke-Step {
param(
[Parameter(Mandatory = $true)][string] $Name,
[Parameter(Mandatory = $true)][scriptblock] $Body
)
Write-Host ""
Write-Host "==> $Name" -ForegroundColor Cyan
& $Body
if ($LASTEXITCODE -ne 0) {
$script:failed += $Name
Write-Host "!!! $Name — код возврата $LASTEXITCODE" -ForegroundColor Red
}
}
# Сначала быстрые проверки, затем длинные: backend-сьют идёт около 20 минут.
Invoke-Step "internal-ui · typecheck" { docker @compose run --rm --no-deps frontend npm run typecheck }
Invoke-Step "web-chat · typecheck" { docker @compose run --rm --no-deps web-chat npm run typecheck }
Invoke-Step "internal-ui · vitest" { docker @compose run --rm --no-deps frontend npm run test }
Invoke-Step "deployment CLI · pytest" { python -m pytest -q tests/cli }
# Playwright сам поднимает нужные dev-серверы (webServer в playwright.config.ts).
Invoke-Step "e2e · playwright" { npx playwright test }
# backend-app сам поднимает postgres, redis и миграции через сервис init.
Invoke-Step "backend · pytest" { docker @compose run --rm backend-app pytest -q }
Write-Host ""
if ($failed.Count -gt 0) {
Write-Host "Провалено шагов: $($failed.Count)" -ForegroundColor Red
$failed | ForEach-Object { Write-Host " - $_" -ForegroundColor Red }
exit 1
}
Write-Host "Все проверки пройдены." -ForegroundColor Green