Skip to content

[codex] Add emulator smoke CI#27

Merged
adamcohenhillel merged 13 commits into
mainfrom
codex/emulator-smoke-ci
Jul 1, 2026
Merged

[codex] Add emulator smoke CI#27
adamcohenhillel merged 13 commits into
mainfrom
codex/emulator-smoke-ci

Conversation

@adamcohenhillel

@adamcohenhillel adamcohenhillel commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add slot-aware local lab scripts for isolated OpenPhone emulator runs on the Mac Studio
  • add GCP lab lifecycle scripts and a trusted GCP lab workflow for maintainer-approved PR/release smoke runs
  • add scripts/run-emulator-smoke.sh to build/reuse the emulator image, boot a wiped headless emulator, verify OpenPhone services/package, run CLI runtime status, invoke openphone.screen.get, and run a local assistant task without provider keys
  • add Android SDK tool installation for clean GCP lab VMs
  • add warm GCP lab cache support with per-run writable disks cloned from a shared snapshot
  • wire release validation to require the GCP lab smoke gate by default
  • add local Mac/Linux lab preparation helpers, macOS JDK 17 preference, and opt-in --no-clone-bundle local sync mode for resumable cold prep

Why

This is the real CI/CD feedback loop we wanted: AI/runtime/assistant changes should be gated on a booted emulator and ADB-backed runtime checks, not just an emulator build target.

GCP Evidence

Cold scratch proof passed on 75bd752800d0c379b6527ec7489d517bda605ee6:

  • created a disposable c3-standard-22 GCP VM in openphone-lab
  • synced Android from scratch
  • applied OpenPhone patches
  • built openphone_sdk_phone_x86_64-bp4a-eng to 100% 156265/156265
  • booted OpenPhone SDK Phone x86_64
  • verified openphone_agent, openphone_context, and openphone_assistant_data
  • verified org.openphone.assistant versionCode:165
  • passed runtime status, screen, and local assistant task smoke
  • deleted the disposable VM

Warm snapshot proof passed on a838b93c6a9d0e2db44ab39834bbf2008e69ee68:

  • seeded cache snapshot openphone-cache-x86-64-bp4a-20260701-032204
  • created an isolated per-run writable disk from that snapshot
  • preserved the warmed Android path at /home/adamcohenhillel/openphone-android
  • used incremental repo sync and targeted OpenPhone patch reset/apply
  • reduced build work from the cold 156265 actions to about 17572 visible actions before final Ninja pruning
  • booted the emulator and passed the same runtime smoke suite
  • copied artifacts to .worktree/gcp-lab/openphone-lab-pr-27-warm-a838b93c2/artifacts
  • deleted the disposable VM

Local Lab State

  • local slot allocation, port isolation, artifact dirs, runtime URLs, and Android dir persistence are implemented
  • local prep can create/mount a case-sensitive macOS sparsebundle and sync/apply/build the Android tree
  • macOS scripts now prefer Homebrew JDK 17 and GNU coreutils where needed
  • local prep/up now support --no-clone-bundle for resumable cold syncs that should avoid huge upstream clone bundles
  • first Mac Studio cold sync was intentionally stopped at about 31G; no local Mac emulator build/smoke has passed yet

Validation

  • bash -n scripts/apply-patches.sh scripts/lab/gcp/run-smoke.sh scripts/check.sh
  • bash -n scripts/run-emulator-smoke.sh scripts/lab/gcp/run-smoke.sh scripts/check.sh
  • bash -n scripts/sync.sh scripts/lab/prepare-local.sh scripts/lab/up.sh scripts/check.sh
  • ./scripts/check.sh
  • git diff --check
  • full GCP scratch smoke passed
  • full GCP warm-snapshot smoke passed

Public Repo Safety

Public fork PRs must not run arbitrary code on persistent trusted runners or with cloud credentials. The GCP lab path is intended for trusted maintainer-approved/manual runs using disposable VMs in the single openphone-lab project.

The approved-PR workflow checks out trusted base code on GitHub-hosted Actions, then checks out the PR SHA only inside a disposable GCP VM with no attached service account/scopes.

Remaining Limitations

  • .github/workflows/gcp-lab.yml cannot be workflow-dispatched before this workflow file exists on main; GitHub returns 404 for new workflow files on non-default branches.
  • Approved-PR and release workflow wiring should be validated in GitHub Actions after merge.
  • Local Mac Studio full emulator smoke still needs the local Android tree/image to finish syncing/building.
  • OpenClaw/Hermes runtime launch commands are exposed as lab options but are not claimed as passing until real launch recipes exist.

@vercel

vercel Bot commented Jun 30, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
openphone-docs Ready Ready Preview, Comment Jul 1, 2026 7:26am

Request Review

@adamcohenhillel
adamcohenhillel marked this pull request as ready for review July 1, 2026 07:28
@adamcohenhillel
adamcohenhillel merged commit 88e2a79 into main Jul 1, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant