ci: enable downstream client smoke (pad/cli/desktop) — Phase 2#7924
Conversation
Implements the per-kind orchestration (clone @ pinned ref, inject core's freshly-generated wire-vectors fixture via ETHERPAD_WIRE_VECTORS, run each client's vectorTest + smokeCmd against the booted server) in a testable run-clients.sh, and flips the three manifest entries to enabled, pinned to the commits that carry their Phase 2 tests: ether/pad#1, ether/etherpad-cli-client#136, ether/etherpad-desktop#78. Validated end-to-end locally against a real core: all three clients' vectors + live smoke pass. Refs should be bumped to the squash-merge commits once those client PRs land. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Qodo reviews are paused for this user.Troubleshooting steps vary by plan Learn more → On a Teams plan? Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center? |
Code Review by Qodo
Context used 1. Clone failure aborts loop
|
|
Thanks @qodo — both fixed in 7abf3ad:
Verified: two bogus clients → both reported, loop continues, exit 1; happy path (cli, no server) → vectors pass, smoke skips, exit 0. |
PR Summary by Qodo
CI: enable live downstream client smoke gate for pad/cli/desktop
🧪 Tests⚙️ Configuration changes🕐 20-40 MinutesWalkthroughs
User Description
Builds on #7923 (Phase 1). Turns on the live downstream-smoke gate now that each client has its Phase 2 vector + smoke tests.
What this adds
src/tests/downstream/run-clients.sh— per-kindorchestration: for each enabled manifest entry, clone the client @ its pinned ref, set up its toolchain, point it at core's freshly generated fixture viaETHERPAD_WIRE_VECTORS, then run the client'svectorTest+smokeCmdagainst the booted server (ETHERPAD_SMOKE_URL+ETHERPAD_SMOKE_APIKEY). Clients test against current core's serialization, not a vendored snapshot.clients.json— all three flipped toenabled:true, pinned to the commits carrying their Phase 2 tests.downstream-smoke.yml— adds the Rust toolchain and calls the runner with the smoke env.The three client PRs (each adds vendored fixture +
vectorTest+ livesmokeCmd)PadSessionround-trip)Verification
Ran the full orchestration locally against a real core — clone @ pinned SHA → inject fixture → vectors + live smoke — all green:
Follow-up
Once the three client PRs squash-merge, bump their
refs inclients.jsonto the merge commits (the pinned pre-merge SHAs stay fetchable, so the gate keeps working until then).🤖 Generated with Claude Code
AI Description
Diagram
graph TD wf["downstream-smoke.yml"] --> srv(["Booted core server"]) --> vec["Generate vectors"] --> fx["wire-vectors.json"] --> runner["run-clients.sh"] --> clients[["Downstream clients"]] manifest["clients.json"] --> runner clients --> srv subgraph Legend direction LR _cfg["Config/File"] ~~~ _svc(["Service"]) ~~~ _ext[["External component"]] endHigh-Level Assessment
The following are alternative approaches to this PR:
1. GitHub Actions matrix (one job per client kind/name)
2. Package runner as a composite action / reusable workflow
3. Avoid full clones (shallow fetch pinned commit)
Recommendation: The current approach (single runner script + manifest) is a good Phase 2 activation step: it’s straightforward, keeps client config data-driven, and makes local reproduction easy. If CI duration becomes an issue, consider moving to a matrix workflow for parallelism and better per-client isolation; also consider shallow-fetching pinned SHAs to reduce checkout cost.
File Changes
Other (3)