M4: Forgejo CI workflow + browser WHEP player + TESTING.md #8
Loading…
Reference in a new issue
No description provided.
Delete branch "m4-ci-and-tooling"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
First half of M4: CI infrastructure + manual smoke testing. The latency p95 gate is queued for a separate PR (a multi-hundred-line addition by itself).
.forgejo/workflows/test.yml
Three jobs, GitHub Actions syntax (Forgejo Actions accepts it as-is):
lint-and-vetgo vet+go buildtestgo test -race -short -count=1 ./...plus a no-race coverage pass that uploadscoverage.outas a 14-day artifactwebrtc-smokeTestIntegration_*and the WebRTC handler tests in isolationPinned to Go 1.24 to match
go.mod. Triggered on push tomain/m*/fix/**and on every pull request.test/whep-player.html
Self-contained browser WHEP subscriber. No external deps, works from
file://or any static host.RTCPeerConnectionwithaddTransceiver('video'|'audio', { direction: 'recvonly' })<video>getStats()Location?url=…&token=…test/TESTING.md
Short doc that ties together the three smoke surfaces — in-process race tests, browser player, Pion CLI helper — with copy-pasteable commands. Notes the latency gate as a known follow-up.
Why land this without the latency gate
The CI workflow is the highest-leverage piece of M4 — every subsequent PR benefits from the race + integration-test pass-fail signal. The browser player closes a real verification gap (acceptance criterion #4 from the M2 design says the user can watch live video; until now there was no off-the-shelf way to do that without the unfinished core-ui work). The latency gate is well-scoped but big; carving it into its own PR keeps review surface small.
Stacks on
m2-webrtc-core-integrationso it lands without depending on M3 (#5), the issue-#2 fix (#6), or the issue-#3 fix (#7).Co-authored with Claude Opus 4.7.
Three artifacts that close out the easier half of the M4 milestone: 1. .forgejo/workflows/test.yml — CI on every push and PR. Three jobs: - lint-and-vet: go vet + go build (~30s) - test: go test -race -short ./... + a no-race coverage pass that uploads coverage.out as an artifact - webrtc-smoke: TestIntegration_FiveViewerFanout and the rest of the WebRTC subsystem tests in isolation, so a failure on the egress path stays readable in the log. Pinned to Go 1.24 to match go.mod. The forge has a forgejo-runner sibling container; this YAML uses GitHub Actions syntax which Forgejo Actions accepts unchanged. 2. test/whep-player.html — self-contained browser WHEP subscriber for manual smoke testing. RTCPeerConnection (recvonly V+A) + fetch() POST/DELETE/PATCH against /api/v3/whep/:id, ICE/PC state pills, inbound-bitrate sampling at 1 Hz, codec hint pulled from the answer SDP, JWT token field, ?url=&token= shareable query string. No external deps; works from file:// or any static host. 3. test/TESTING.md — short doc that ties together the in-process race tests, the browser player, and the existing Pion CLI helper at test/whep-client/. Notes the latency p95 gate as a follow-up. Latency gate (FFmpeg drawtext frame counter + decode-side pixel sampling, p95 < 300ms RTMP / < 200ms SRT) is queued for a separate PR — it's a several-hundred-line addition in its own right and shouldn't block CI from landing. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>Merged into
mainvia direct push as part of the v0.1.0-dragonfork release. Branch commits are reachable from main; closing this PR. Release: https://forge.wilddragon.net/zgaetano/datarhei-dragonfork-core/releases/tag/v0.1.0-dragonforkPull request closed