fix(ci): bound stalled Apple probes and record verified native APK
Android validation / emulator (35) (push) Failing after 4s
Android validation / emulator (37.0) (push) Failing after 9s
iOS validation / simulator (push) Failing after 1m5s
Android validation / build (push) Canceled after 2m0s

Mac Node bootstrap and checkout now pass, but Apple-tool preflight stalled after Xcode version output for twenty minutes. Add per-command deadlines and diagnostics without changing licenses/host settings; fourteen preflight/probe regressions pass. Record successful Android build/upload, downloaded APK signature/version and emulator install/launch, and unchanged missing-KVM matrix failures. No Apple app success is claimed.
This commit is contained in:
Yuvomi Mobile Contributors committed 2026-10-21 09:37:12 +02:00
1 parent 40a7962307
commit 92dbd0e06d
7 files changed
+120 -18

No files matched your search

+37
View File
@@ -0,0 +1,37 @@
#!/usr/bin/env python3
"""Bounded Apple toolchain probes; never install components or change the host."""
import subprocess
import sys
def probe(command, timeout=60):
label = " ".join(command)
print(f"Runner prerequisite: checking {label} (timeout {timeout}s)", flush=True)
try:
result = subprocess.run(command, capture_output=True, text=True, timeout=timeout, check=False)
except subprocess.TimeoutExpired as error:
raise RuntimeError(
f"{label} did not return within {timeout}s. Check selected Xcode, first-launch components "
"and CoreSimulator in the runner user's interactive login session; run this command there. "
"CI has not accepted licenses or changed host settings."
) from error
except OSError as error:
raise RuntimeError(f"Cannot start {label}: {error}") from error
if result.returncode:
raise RuntimeError(f"{label} exited {result.returncode}: {(result.stderr or result.stdout).strip()}")
return result.stdout
def main():
try:
print(probe(["xcodebuild", "-version"]).strip(), flush=True)
probe(["xcrun", "--find", "swift"])
probe(["xcrun", "simctl", "list", "devices", "available"])
except RuntimeError as error:
print(f"Runner prerequisite: {error}", file=sys.stderr)
return 1
return 0
if __name__ == "__main__":
sys.exit(main())