2017-01-08 11 views
0

Я следующий appveyor.yml файл:Как сбой сценария CI в случае ошибки команды при использовании файлов forfiles?

test_script: 
- forfiles /m *.mqh /c "mql /s @path" 
build: off 
platform: x86 

, целью которого является проверка синтаксиса (/s) всех файлов исходного кода, найденных в текущем каталоге.

Однако, несмотря на ошибки компилятора, конечный результат представлен как: Успех сборки.

Как я могу скрыть тестовый скрипт, используя вышеуказанный подход?


Я ищу что-то похожее на set -e на Linux. Компилятор возвращает 1 ошибку при выходе, как и ожидалось, поскольку она отлично работает при использовании с wine в Linux. Но весь скрипт сборки не сработает, как ожидалось.

ответ

1

AppVeyor счастлив, потому что весь код возврата команды равен 0. Я думаю, что это код возврата 0, потому что последняя итерация была счастлива. Я не знаю, как сделать это вернет ошибку в случае, если хотя бы одна итерация не удалось с forfiles, но с помощью PowerShell это должно работать:

test_script: - ps: $mqlScriptSuccess = $true - ps: Get-ChildItem | ForEach-Object {if ($_.Name.EndsWith(".mqh")){.\mql /s /mql$env:ver $_.FullName; if(!$?){$mqlScriptSuccess = $?; Write-Warning "mlq error"}}} - ps: if (!$mqlScriptSuccess) {throw "At least one mql test failed"}

Обратите внимание, что вы можете также изменить Get-ChildItem к Get-ChildItem -Recurse, чтобы получить более глубокий охват.