Files
troupe-standup/wizard-work/spark/rust-toolchain-check.py
T

58 lines
1.7 KiB
Python

#!/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()