Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion .github/workflows/sonar.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@
# для .NET (Automatic Analysis язык не поддерживает) — begin → build → test → end.
# Результат уезжает на sonarcloud.io. Секрет SONAR_TOKEN секретам форков не виден,
# поэтому анализ гоняем на push в main и вручную, а не на PR из форков.
#
# sonar.coverage.exclusions — из ИЗМЕРЕНИЯ покрытия исключены края, которые мы намеренно
# не покрываем юнитами (политика из CLAUDE.md: чистую логику тестируем, UI и железо — глазами):
# UI/WinForms, системная интеграция, точка входа, tools и два файла живого WMI —
# MifsClient/MifsEventWatcher (они дёргают ManagementObject, без ноутбука не выполняются;
# логика над ними тестируется через шов IMifsClient на фейках). Mifs.cs НЕ исключён:
# это чистые таблицы и маппинги, они покрыты тестами и должны такими оставаться.
# На статический анализ (баги, smells, уязвимости) исключение не влияет — только на coverage.
# Важно: Quality Gate «Sonar way» требует ≥80% покрытия нового кода, а свой гейт на бесплатном
# тарифе не завести (Team/Enterprise) — поэтому измеряем только то, что реально тестируем.
name: sonarcloud

on:
Expand Down Expand Up @@ -43,7 +53,7 @@ jobs:
/d:sonar.token="$env:SONAR_TOKEN"
/d:sonar.cs.opencover.reportsPaths="**/coverage.opencover.xml"
/d:sonar.scanner.scanAll=false
/d:sonar.coverage.exclusions="src/Ui/**,src/SystemIntegration/**,src/Program.cs,tools/**"
/d:sonar.coverage.exclusions="src/Ui/**,src/SystemIntegration/**,src/Wmi/MifsClient.cs,src/Wmi/MifsEventWatcher.cs,src/Program.cs,tools/**"

- name: Build
run: dotnet build XiControl.sln -c Release
Expand Down
7 changes: 7 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,13 @@ WMI-событий). `Program.cs`: single-instance mutex → DI-контейне
- Тег с суффиксом через дефис (`v0.7.0-pre`) помечается pre-release и winget **не** трогает.
- Каждый push в `main` собирает скользящий pre-release под тегом `pre` — всегда свежий билд из main;
winget его не видит (слушает только `release: [released]`).
- **SonarCloud** (`.github/workflows/sonar.yml`, только push в `main`): бесплатный тариф даёт лишь
встроенный Quality Gate «Sonar way» — свой не завести (Team/Enterprise), а он требует **≥80%
покрытия нового кода**. Поэтому из ИЗМЕРЕНИЯ покрытия (`sonar.coverage.exclusions`) исключены
края, которые мы намеренно не покрываем юнитами: `src/Ui/**`, `src/SystemIntegration/**`,
`Program.cs`, `tools/**` и живой WMI — `MifsClient.cs`/`MifsEventWatcher.cs`. Чистая логика
(`Mifs.cs`, конфиг, guard-ы, роутер) измеряется и должна оставаться покрытой. Добавляешь новый
файл с живым железом — впиши его в исключения, иначе гейт покраснеет на ровном месте.
- Локальная сборка помечается версией `0.0.0-dev` (дев-дефолт в `XiControl.csproj`, суффикс виден
в AboutTab); реальную версию подставляет CI из тега: `publish -p:Version=X.Y.Z`.

Expand Down
Loading