Files
chatballs/scripts/check.ps1
T
AndreyandClaude Opus 5 482fa73d95 🚨 fix(lint): привести код к своей же конфигурации ruff и включить её в CI
Линтер никогда не проверял то, что задумано. Конфигурация лежит в корневом
pyproject.toml (`select = ["E","F","I","UP","B","DJ"]`), а запускали ruff из
apps/backend — там конфигурации нет, и он молча брал правила по умолчанию.
Из корня та же команда показывает 1102 нарушения вместо четырнадцати.

Что с ними сделано:

- E501 (968 из 1102) вынесен в ignore с объяснением: длину строки правит
  форматтер, а `ruff format` в этом репозитории не принят — он переписал бы
  374 файла. Порога, до которого можно поднять line-length, нет: 398 строк
  длиннее 120 символов, 222 длиннее 140. Правило, которое всегда красное,
  просто перестают читать.
- Миграции исключены из проверки: их пишет Django.
- Остальные 104 исправлены. Содержательное: assertRaises(Exception) в тесте
  доставки приглашения заменён на конкретный CallInviteDeliveryError; убрана
  мёртвая переменная identity в демо-сиде (у Conversation нет такого поля —
  единственный источник identity это контакт); порядок членов у пяти моделей
  по Django Style Guide; __str__ двум синглтонам инстанса, которые в админке
  показывались бы как «object (1)»; isinstance с кортежем → оператор |.

CI: ruff добавлен в .github/workflows/checks.yml (push и pull request — до
этого на GitHub не проверялось ничего до первого тега), в стадию validate
GitLab и в scripts/check.ps1. Везде запуск из корня репозитория, иначе
повторится та же подмена правил. Версия берётся из requirements бэкенда,
чтобы CI и образ не разъезжались.

Из pre-commit убран ruff-format: висел хук, который при первой же установке
переписал бы 374 файла — это отдельное решение, а не побочный эффект.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-09 07:39:18 +03:00

57 lines
3.2 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 минут.
# Линтер запускается из корня репозитория: конфигурация лежит в pyproject.toml,
# а в контейнер смонтирован только apps/backend — без корня ruff взял бы
# правила по умолчанию вместо проектных и молча пропускал бы половину.
Invoke-Step "backend · ruff" { docker @compose run --rm --no-deps -v "${PWD}:/repo" -w /repo backend-app ruff check apps/backend }
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