* chore: repoint OpenCode links to agentlabs.cc/opencode agentlabs.cc/opencode and /opencode/privacy are now live (200). Repoint README, distribution listings (Play/App Store/F-Droid/IzzyOnDroid/iOS), docs, and in-app privacy links (settings + telemetry consent) from www.vibebrowser.app/opencode to the canonical agentlabs.cc hub. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(ci): run local opencode server for CUA smoke true-E2E (#15) GitHub-hosted runners can't reach the Tailscale dev server (100.108.64.76:4096), so the CUA smoke always failed at session creation. - Install opencode-ai and run `opencode serve` on the runner host; the Android emulator reaches it via 10.0.2.2. OPENCODE_URL now points there. - Healthcheck /global/health before launching the app; dump server log on failure for diagnosis. - Add --only-connect-scenario to the smoke script and run just the connect-and-verify-sessions path in CI: deterministic, needs no model backend. The scenario now creates a session if the list is empty, so a fresh server still yields a non-empty list. This makes the smoke a true E2E and also exercises the #10 sessions-list rendering path against a real server. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(ci): emulator smoke script is dash, not bash — drop brace-group healthcheck android-emulator-runner runs the script: block under /usr/bin/sh (dash). The multi-line `|| { ...; }` healthcheck was a dash syntax error (end of file unexpected), failing the step before the smoke ran. Replace with a non-fatal one-line re-check; the server was already health-gated in the prior step. * docs(tasks): record smoke CI round 1 failure + dash fix --------- Co-authored-by: engineer <engineer@opencode.ai> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -603,8 +603,11 @@ def _connect_and_verify_sessions_goal(url: str) -> str:
|
||||
"Wait 3 seconds. "
|
||||
"Now navigate to the Sessions tab (bottom navigation bar). "
|
||||
"Wait 5 seconds for sessions to load. "
|
||||
"If the sessions list is empty or shows 'No sessions yet', tap the '+' button "
|
||||
"(top-right) to create a new session, wait 3 seconds, then navigate back to the "
|
||||
"Sessions tab and wait 3 seconds for the list to refresh. "
|
||||
"Report SUCCESS if you see at least one session listed (a session title is visible). "
|
||||
"Report FAILURE if the sessions list is empty, shows 'No sessions yet', or shows an error."
|
||||
"Report FAILURE if the sessions list is still empty, shows 'No sessions yet', or shows an error."
|
||||
)
|
||||
|
||||
|
||||
@@ -625,6 +628,12 @@ def main():
|
||||
action="store_true",
|
||||
help="Skip the default connect-and-verify regression scenario.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--only-connect-scenario",
|
||||
action="store_true",
|
||||
help="Run ONLY the connect-and-verify-sessions scenario. Use in CI with a "
|
||||
"local opencode server for a deterministic true-E2E (no model backend needed).",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
# Verify ADB
|
||||
@@ -635,15 +644,20 @@ def main():
|
||||
except FileNotFoundError:
|
||||
sys.exit("adb not found in PATH")
|
||||
|
||||
scenarios = [{"name": "custom", "goal": args.goal}] if args.goal else list(SMOKE_SCENARIOS)
|
||||
connect_url = args.opencode_url or os.environ.get("OPENCODE_URL") or "http://100.108.64.76:4096"
|
||||
connect_scenario = {
|
||||
"name": "connect_and_verify_sessions",
|
||||
"goal": _connect_and_verify_sessions_goal(connect_url),
|
||||
}
|
||||
|
||||
# Keep connect-and-verify in the default smoke path so regressions are exercised.
|
||||
if not args.goal and not args.skip_connect_scenario:
|
||||
connect_url = args.opencode_url or os.environ.get("OPENCODE_URL") or "http://100.108.64.76:4096"
|
||||
scenarios.append({
|
||||
"name": "connect_and_verify_sessions",
|
||||
"goal": _connect_and_verify_sessions_goal(connect_url),
|
||||
})
|
||||
if args.only_connect_scenario:
|
||||
# CI true-E2E: just connect to the local opencode server and verify the list.
|
||||
scenarios = [connect_scenario]
|
||||
else:
|
||||
scenarios = [{"name": "custom", "goal": args.goal}] if args.goal else list(SMOKE_SCENARIOS)
|
||||
# Keep connect-and-verify in the default smoke path so regressions are exercised.
|
||||
if not args.goal and not args.skip_connect_scenario:
|
||||
scenarios.append(connect_scenario)
|
||||
|
||||
results = []
|
||||
for scenario in scenarios:
|
||||
|
||||
Reference in New Issue
Block a user