The GitHub Actions job "Required Checks" on texera.git/main has failed.
Run started by GitHub user github-merge-queue[bot] (triggered by 
github-merge-queue[bot]).

Head commit for run:
3f877734610ec4ae077bf87ce2c653d7ff78a250 / Yicong Huang 
<[email protected]>
feat(local-dev): add --json status output and a non-TTY build heartbeat (#6027)

### What changes were proposed in this PR?

Two small, agent/script-friendly additions to `bin/local-dev.sh` — no
change to the human TTY experience.

**1. `--json` machine-readable status.** `status --json` prints one JSON
object on stdout (no colours, no table) and exits `0` iff every service
is running, else `1`:

```json
{"branch":"...","sha":"...","running":14,"total":14,"services":[
  
{"service":"texera-web","port":8080,"type":"jvm","pid":25823,"state":"running"},
 ...]}
```

`up` and `down` also accept `--json`: human progress is routed to
**stderr** (unbuffered) and the final status JSON goes to **stdout**
(via a saved fd), so a caller can `up --json >state.json 2>progress.log`
and parse stdout directly.

**2. Non-TTY build heartbeat.** In non-TTY mode the spinner can't render
in place, so a long silent step (`sbt dist`, output redirected to a log)
used to print one line then go quiet for 25s+ — indistinguishable from
"stuck" to a non-interactive caller. `tui_spinner` now emits `… still
running (Ns)` every `TUI_HEARTBEAT_SECS` (default 15), polling at 1s so
it still returns within ~1s of the job finishing (no trailing latency).

### Any related issues, documentation, discussions?

Closes #6026. Usage banner (`--help`) updated to document `--json` on
`status`/`up`/`down`.

### How was this PR tested?

- `bash bin/local-dev/tests/test_local_dev_sh.sh` → **19 passed, 0
failed** (added 6: JSON shape/consistency, health-based exit code,
unknown-flag negative case, `--help` coverage, heartbeat regression
guard, up/down `--json` wiring).
- `python -m pytest bin/local-dev/tests/` → **38 passed** (no
regression).
- Dogfooded end to end: `down --json` → stdout pure JSON (`running:0`,
14 `stopped`), exit 0; `up --json` → single-line JSON `running:14/14` on
stdout, and stderr showed the new heartbeat across a ~60s build (`…
still running (15s/30s/45s/60s)`), 14/14 healthy.
- Verified stdout/stderr separation: `up --json >state.json
2>progress.log` yields parseable JSON in `state.json`.

### Was this PR authored or co-authored using generative AI tooling?

Generated-by: Claude Code (Opus 4.8)

Report URL: https://github.com/apache/texera/actions/runs/28411073643

With regards,
GitHub Actions via GitBox

Reply via email to