Skip to content

Commit 4e549ea

Browse files
committed
fix(cli): retourner un code non-zero si engine compile --json echoue
1 parent ed206de commit 4e549ea

2 files changed

Lines changed: 72 additions & 0 deletions

File tree

cli/click_app.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,8 @@ def engine_dry_run(engine_id, file_path, workspace, as_json):
593593
)
594594
result = app.run_compilation(engine_id, str(Path(file_path)), dry_run=True)
595595
if as_json:
596+
if not result.get("success"):
597+
_emit_and_exit(result, EXIT_PRECHECK_FAILED, as_json=True)
596598
_echo_payload(result, as_json=True)
597599
return
598600
if result.get("success"):
@@ -618,6 +620,8 @@ def engine_compile(engine_id, file_path, workspace, as_json):
618620
)
619621
result = app.run_compilation(engine_id, str(Path(file_path)), dry_run=False)
620622
if as_json:
623+
if not result.get("success"):
624+
_emit_and_exit(result, EXIT_PRECHECK_FAILED, as_json=True)
621625
_echo_payload(result, as_json=True)
622626
return
623627
if result.get("success"):

tests/test_click_cli_commands.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import json
1919
import sys
20+
import types
2021
from pathlib import Path
2122

2223
ROOT = Path(__file__).resolve().parents[1]
@@ -461,3 +462,70 @@ def test_venv_status_and_use_system_json(monkeypatch, tmp_path) -> None:
461462
assert use_system_result.exit_code == 0
462463
use_system_payload = json.loads(use_system_result.output)
463464
assert use_system_payload["mode"] == "system"
465+
466+
467+
def test_engine_compile_json_exits_non_zero_on_failure(monkeypatch, tmp_path) -> None:
468+
runner = CliRunner()
469+
cli = build_cli("test")
470+
entry = tmp_path / "app.py"
471+
entry.write_text("print('ok')\n", encoding="utf-8")
472+
473+
fake_mod = types.ModuleType("OnlyMod.EngineOnlyMod.app")
474+
475+
class _FakeApp:
476+
def __init__(self, **_kwargs) -> None:
477+
return None
478+
479+
def run_compilation(self, engine_id, file_path, dry_run=False):
480+
return {
481+
"success": False,
482+
"engine_id": engine_id,
483+
"file_path": file_path,
484+
"dry_run": dry_run,
485+
"error": "compile failed",
486+
}
487+
488+
fake_mod.EnginesStandaloneApp = _FakeApp
489+
monkeypatch.setitem(sys.modules, "OnlyMod.EngineOnlyMod.app", fake_mod)
490+
491+
result = runner.invoke(
492+
cli, ["engine", "compile", "pyinstaller", str(entry), "--json"]
493+
)
494+
495+
assert result.exit_code == 3
496+
payload = json.loads(result.output)
497+
assert payload["success"] is False
498+
assert payload["error"] == "compile failed"
499+
500+
501+
def test_engine_compile_json_returns_zero_on_success(monkeypatch, tmp_path) -> None:
502+
runner = CliRunner()
503+
cli = build_cli("test")
504+
entry = tmp_path / "app.py"
505+
entry.write_text("print('ok')\n", encoding="utf-8")
506+
507+
fake_mod = types.ModuleType("OnlyMod.EngineOnlyMod.app")
508+
509+
class _FakeApp:
510+
def __init__(self, **_kwargs) -> None:
511+
return None
512+
513+
def run_compilation(self, engine_id, file_path, dry_run=False):
514+
return {
515+
"success": True,
516+
"engine_id": engine_id,
517+
"file_path": file_path,
518+
"dry_run": dry_run,
519+
"stdout": "ok",
520+
}
521+
522+
fake_mod.EnginesStandaloneApp = _FakeApp
523+
monkeypatch.setitem(sys.modules, "OnlyMod.EngineOnlyMod.app", fake_mod)
524+
525+
result = runner.invoke(
526+
cli, ["engine", "compile", "pyinstaller", str(entry), "--json"]
527+
)
528+
529+
assert result.exit_code == 0
530+
payload = json.loads(result.output)
531+
assert payload["success"] is True

0 commit comments

Comments
 (0)