From 425c3491846461f7ce6aaadc558d3fa0b3adf050 Mon Sep 17 00:00:00 2001 From: JunghwanNA <70629228+shaun0927@users.noreply.github.com> Date: Thu, 16 Apr 2026 12:26:50 +0900 Subject: [PATCH 1/2] fix(ci): use PATH-based iverilog/vvp discovery for cross-layer tests The default IVERILOG and VVP paths were hardcoded to macOS Homebrew locations (/opt/homebrew/bin/iverilog). On Ubuntu CI runners, apt installs iverilog to /usr/bin/, so the Path.exists() check returns False and all Tier 2 Verilog cosim tests are silently skipped. Change defaults to bare command names so the existing which-based fallback at line 57-58 discovers the binary via PATH on any platform. --- 9_Firmware/tests/cross_layer/test_cross_layer_contract.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/9_Firmware/tests/cross_layer/test_cross_layer_contract.py b/9_Firmware/tests/cross_layer/test_cross_layer_contract.py index c3b950e..b24d2a3 100644 --- a/9_Firmware/tests/cross_layer/test_cross_layer_contract.py +++ b/9_Firmware/tests/cross_layer/test_cross_layer_contract.py @@ -49,8 +49,8 @@ sys.path.insert(0, str(cp.GUI_DIR)) # Helpers # =================================================================== -IVERILOG = os.environ.get("IVERILOG", "/opt/homebrew/bin/iverilog") -VVP = os.environ.get("VVP", "/opt/homebrew/bin/vvp") +IVERILOG = os.environ.get("IVERILOG", "iverilog") +VVP = os.environ.get("VVP", "vvp") CXX = os.environ.get("CXX", "c++") # Check tool availability for conditional skipping From ae7643975d87e124cc908efcdf114eb1bcdcfcaf Mon Sep 17 00:00:00 2001 From: Jason <83615043+JJassonn69@users.noreply.github.com> Date: Thu, 16 Apr 2026 10:27:58 +0545 Subject: [PATCH 2/2] fix(ci): fail hard when required tools missing in CI Silently skipping Tier 2/3 tests in CI defeats the purpose of running them. Add a GITHUB_ACTIONS guard that raises RuntimeError at module load if iverilog or C++ compiler is not found, preventing false-green CI results from skipped tests. --- .../tests/cross_layer/test_cross_layer_contract.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/9_Firmware/tests/cross_layer/test_cross_layer_contract.py b/9_Firmware/tests/cross_layer/test_cross_layer_contract.py index b24d2a3..6d103de 100644 --- a/9_Firmware/tests/cross_layer/test_cross_layer_contract.py +++ b/9_Firmware/tests/cross_layer/test_cross_layer_contract.py @@ -61,6 +61,20 @@ _has_cxx = subprocess.run( [CXX, "--version"], capture_output=True ).returncode == 0 +# In CI, missing tools must be a hard failure — never silently skip. +_in_ci = os.environ.get("GITHUB_ACTIONS") == "true" +if _in_ci: + if not _has_iverilog: + raise RuntimeError( + "iverilog is required in CI but was not found. " + "Ensure 'apt-get install iverilog' ran and IVERILOG/VVP are on PATH." + ) + if not _has_cxx: + raise RuntimeError( + "C++ compiler is required in CI but was not found. " + "Ensure build-essential is installed." + ) + def _parse_hex_results(text: str) -> list[dict[str, str]]: """Parse space-separated hex lines from TB output files."""