CI: починить гейт сегментации, он молча пропускался
build / build (push) Successful in 7s

Шаг был зелёным, но не проверял ничего: распознавание на раннере работает,
а шаблон искал число сразу после стрелки, тогда как в выводе между ними
стоит русское слово («-> блоков 29»). Совпадения не было, и шаг выходил
с предупреждением вместо проверки.

RenderTest теперь печатает итог машиночитаемой строкой RESULT — так же, как
selftest. Отсутствие этой строки считается провалом: значит конвейер не
доработал до конца. Пропуск остался только для случая, когда на машине нет
языкового пакета распознавания.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-27 16:02:31 +03:00
parent 0e515604db
commit 12f974571c
3 changed files with 15 additions and 6 deletions
+4 -5
View File
@@ -79,15 +79,14 @@ jobs:
$out = & .\dist\RenderTest.exe --in .\dist\sample.png --out .\dist\ci --no-translate 2>&1 | Out-String $out = & .\dist\RenderTest.exe --in .\dist\sample.png --out .\dist\ci --no-translate 2>&1 | Out-String
Write-Host $out Write-Host $out
# Латиница в шаблонах намеренно — см. примечание о кодировке выше. # Латиница в шаблонах намеренно — см. примечание о кодировке выше.
if ($out -match 'OCR\s+\S*\s*=?\s*$' -or $out -match 'exit code 2') { if ($LASTEXITCODE -eq 2) {
Write-Host '::warning::no OCR language pack on the runner - frame check skipped' Write-Host '::warning::no OCR language pack on the runner - frame check skipped'
exit 0 exit 0
} }
if ($out -notmatch '->\s*(\d+)') { if ($out -notmatch 'RESULT lines=(\d+) blocks=(\d+)') {
Write-Host '::warning::no block count in output - frame check skipped' throw "RenderTest produced no RESULT line - the pipeline did not finish"
exit 0
} }
$blocks = [int]$Matches[1] $blocks = [int]$Matches[2]
Write-Host "blocks detected: $blocks" Write-Host "blocks detected: $blocks"
# На этом кадре стабильно выходит 27-29 блоков. Резкое расхождение означает, что # На этом кадре стабильно выходит 27-29 блоков. Резкое расхождение означает, что
# правки в Blocks.cs поехали — либо всё слиплось, либо рассыпалось. # правки в Blocks.cs поехали — либо всё слиплось, либо рассыпалось.
+5 -1
View File
@@ -30,7 +30,11 @@
## Установка ## Установка
Скопировать папку `dist` куда угодно и запустить `ScreenTranslator.exe`. Всё. Скачать `ScreenTranslator.zip` из [релизов](../../releases), распаковать куда угодно и запустить
`ScreenTranslator.exe`. Всё — установщика нет, программа живёт в трее.
Релиз `latest` пересобирается автоматически при каждом изменении в `master`, так что по этой
ссылке всегда лежит свежая сборка. Релизы с номером версии остаются неизменными.
Если Windows покажет «SmartScreen защитил ваш компьютер» — «Подробнее» → «Выполнить в любом случае» Если Windows покажет «SmartScreen защитил ваш компьютер» — «Подробнее» → «Выполнить в любом случае»
(файл без цифровой подписи). (файл без цифровой подписи).
+6
View File
@@ -227,6 +227,12 @@ namespace ScreenTranslator
if (missed.Count > 0) Console.WriteLine("не найдено: " + string.Join(", ", missed)); if (missed.Count > 0) Console.WriteLine("не найдено: " + string.Join(", ", missed));
} }
// Итог латиницей и в фиксированном формате — по нему сборщик решает, не поехала ли
// сегментация. Человеческую сводку выше он разбирать не может: кодировка временного
// скрипта у раннера портит кириллицу, и любой шаблон с русским словом промахивается.
Console.WriteLine("RESULT lines={0} blocks={1} translated={2}",
lines.Count, blocks.Count, blocks.Count(b => b.Translated != null));
Console.WriteLine("\nкартинки: " + outDir); Console.WriteLine("\nкартинки: " + outDir);
frame.Image.Dispose(); frame.Image.Dispose();
return 0; return 0;