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.
This commit is contained in:
bryanthaboi
2026-08-24 10:20:27 -04:00
parent 07c828cab0
commit 041051e154
+16 -3
View File
@@ -1582,9 +1582,17 @@ def t_png():
assert label_art("#123456") == art assert label_art("#123456") == art
class SelftestSkip(Exception):
pass
def t_roundtrip(): def t_roundtrip():
root = tempfile.mkdtemp(prefix="cartkit-selftest-") 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: try:
with contextlib.redirect_stdout(io.StringIO()): with contextlib.redirect_stdout(io.StringIO()):
_roundtrip(root, repo) _roundtrip(root, repo)
@@ -1650,12 +1658,15 @@ CHECKS = [
def cmd_selftest(args, repo): def cmd_selftest(args, repo):
failures = [] failures = []
skipped = []
for name, check in CHECKS: for name, check in CHECKS:
try: try:
check() check()
except SelftestSkip as why:
skipped.append((name, why))
print(f"skip {name}: {why}")
except Exception as problem: except Exception as problem:
failures.append((name, problem)) failures.append((name, problem))
if not args.quiet:
print(f"FAIL {name}: {problem!r}") print(f"FAIL {name}: {problem!r}")
else: else:
if not args.quiet: if not args.quiet:
@@ -1663,8 +1674,10 @@ def cmd_selftest(args, repo):
if failures: if failures:
print(f"FAIL {len(failures)} of {len(CHECKS)} checks") print(f"FAIL {len(failures)} of {len(CHECKS)} checks")
return 1 return 1
ran = len(CHECKS) - len(skipped)
tail = f" ({len(skipped)} skipped)" if skipped else ""
if not args.quiet: if not args.quiet:
print(f"ok {len(CHECKS)} checks") print(f"ok {ran} checks{tail}")
return 0 return 0