From 041051e1541fa57e8340c242b8b9dc76ef2808f4 Mon Sep 17 00:00:00 2001 From: bryanthaboi Date: Mon, 24 Aug 2026 10:20:27 -0400 Subject: [PATCH] cartkit: skip the scaffold round trip when there is no engine checkout The generated cart release workflow curls cartkit.py into RUNNER_TEMP and runs the selftest from the cart repo, where find_repo() finds nothing and scaffold exits non-zero, so every cart release failed at the first step. Report failures and skips even under --quiet; the workflow passes it, so the only output was the FAIL count with no indication of which check. --- tools/cartkit.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/tools/cartkit.py b/tools/cartkit.py index 0e1db64a..af6cb1a7 100644 --- a/tools/cartkit.py +++ b/tools/cartkit.py @@ -1582,9 +1582,17 @@ def t_png(): assert label_art("#123456") == art +class SelftestSkip(Exception): + pass + + def t_roundtrip(): root = tempfile.mkdtemp(prefix="cartkit-selftest-") - repo = find_repo(os.path.dirname(os.path.abspath(__file__))) + repo = find_repo(os.getcwd()) or find_repo( + os.path.dirname(os.path.abspath(__file__))) + if not repo: + raise SelftestSkip("scaffold needs an engine checkout; none found " + "from the cwd or the script") try: with contextlib.redirect_stdout(io.StringIO()): _roundtrip(root, repo) @@ -1650,21 +1658,26 @@ CHECKS = [ def cmd_selftest(args, repo): failures = [] + skipped = [] for name, check in CHECKS: try: check() + except SelftestSkip as why: + skipped.append((name, why)) + print(f"skip {name}: {why}") except Exception as problem: failures.append((name, problem)) - if not args.quiet: - print(f"FAIL {name}: {problem!r}") + print(f"FAIL {name}: {problem!r}") else: if not args.quiet: print(f"ok {name}") if failures: print(f"FAIL {len(failures)} of {len(CHECKS)} checks") return 1 + ran = len(CHECKS) - len(skipped) + tail = f" ({len(skipped)} skipped)" if skipped else "" if not args.quiet: - print(f"ok {len(CHECKS)} checks") + print(f"ok {ran} checks{tail}") return 0