#!/usr/bin/env python3 """Rust toolchain health check - verifies rustc, cargo, and rustup are functional.""" import subprocess import sys import json def run_cmd(cmd): try: result = subprocess.run(cmd, capture_output=True, text=True, timeout=10) return result.returncode, result.stdout.strip(), result.stderr.strip() except FileNotFoundError: return -1, "", "command not found" except subprocess.TimeoutExpired: return -2, "", "timeout" def check_rustc(): code, out, err = run_cmd(["rustc", "--version"]) if code == 0: version = out.split()[-1] if out else "unknown" return {"status": "ok", "version": version, "raw": out} return {"status": "error", "error": err or out or "not installed"} def check_cargo(): code, out, err = run_cmd(["cargo", "--version"]) if code == 0: version = out.split()[-1] if out else "unknown" return {"status": "ok", "version": version, "raw": out} return {"status": "error", "error": err or out or "not installed"} def check_rustup(): code, out, err = run_cmd(["rustup", "--version"]) if code == 0: return {"status": "ok", "raw": out} return {"status": "error", "error": err or out or "not installed"} def main(): results = { "rustc": check_rustc(), "cargo": check_cargo(), "rustup": check_rustup(), } all_ok = all( r["status"] == "ok" for r in results.values() ) print(json.dumps({ "all_ok": all_ok, "timestamp": __import__('datetime').datetime.utcnow().isoformat() + "Z", "components": results }, indent=2)) sys.exit(0 if all_ok else 1) if __name__ == "__main__": main()