test(ci): verify the extracted out-of-tree bgfx backend (#386 Phase 6c) - #413
Conversation
bgfx is now extracted to its own repo, github.com/labelle-toolkit/labelle-bgfx
(v0.1.0) — the first real backend to leave the assembler monorepo. It vendors
the shared sdl_gamepad/android_gamepad sub-packages so the package is
self-contained (an external backend can't reference the bundled `../` ones).
This adds the OPT-IN verification (the default `.backend = .bgfx` shorthand flip
is deferred until the package is validated against real games like FP):
- examples/bgfx-external/: a bgfx game configured via
`.backend_package = .{ .name="bgfx", .repo="github.com/labelle-toolkit/labelle-bgfx", .version="0.1.0" }`
(local framework pins, like examples/bgfx).
- a CI step in examples-integration that drives the assembler binary directly
to `install` (fetch the package from GitHub) + `generate` (stage + codegen),
asserts the package staged self-contained (manifest + vendored gamepad
sub-packages) and wired `labelle_bgfx`, then resolves the FULL build graph
(`zig build --help` → zbgfx/zglfw + the vendored sub-packages + url deps).
It deliberately stops short of the heavy bgfx C++ compile — that's identical
to the bundled backend and is covered by the dedicated cached `bgfx-build` job.
Verified locally end-to-end (install→stage→generate→graph-resolve all green);
this lands the CI regression coverage.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (5)
📝 WalkthroughWalkthroughAdds an Changesbgfx-external example and CI integration test
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Code Review
This pull request introduces a new external bgfx example project under examples/bgfx-external. It includes a .gitignore file to ignore local .labelle metadata, a project.labelle configuration file setting up the project metadata, backend package, and layers, and a main.jsonc scene file defining a player entity and a title label. There are no review comments, and I have no feedback to provide.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
… (#418) Pluggable-backends Phases 5+6 (epic #386): the assembler can now FETCH, verify, and build out-of-tree backend packages, and bgfx is extracted to its own repo. - #409 6a: remote .backend_package cache-fetch (fetched like a plugin) - #410 6b: contract-verify an external backend (assertBackend/Window/Input) - #411: conform raylib + null windows to the canonical window contract - #412 Phase 5: enum-as-shorthand resolution (a built-in tag can resolve to a package) - #413 6c: bgfx extracted -> github.com/labelle-toolkit/labelle-bgfx; opt-in CI-verified - #414: select the GUI bridge by backend name, not the enum (external backends) - #415: labelle-bgfx v0.2.0 — gamepad sources extracted to their own packages - #416/#417: the two flip-blockers (callback-external guard; android enum-fallthrough) Opt-in today via .backend_package; built-in .backend = .bgfx still ships bundled (the default-flip is a follow-up gated on this release). Built-in backends are byte-identical. External bgfx validated on-device (Galaxy Tab A7): builds, runs crash-free, behaves identically to bundled.
bgfx extracted out-of-tree — opt-in verification
bgfx is now its own repo:
labelle-toolkit/labelle-bgfx(v0.1.0) — the first real backend to leave the assembler monorepo, building on the merged pipeline (6a fetch + 6b verify + Phase-5 enum-shorthand).It's self-contained: it vendors the shared
sdl_gamepad/android_gamepadsub-packages (an external backend can't reference the bundled../copies). De-duplicating those into standalone shared repos (so raylib/sokol can also consume them) is a follow-up.This PR (assembler side)
Per the agreed plan — verify opt-in via CI, defer the default flip:
examples/bgfx-external/— a bgfx game selected via.backend_package = .{ .name = "bgfx", .repo = "github.com/labelle-toolkit/labelle-bgfx", .version = "0.1.0" }(local framework pins, likeexamples/bgfx).install(fetch the package from GitHub) →generate(stage + codegen), asserts the package staged self-contained (backend.manifest.zon+ vendoredsdl_gamepad/android_gamepad) and wiredlabelle_bgfx, then resolves the full build graph (zig build --help→ zbgfx/zglfw + vendored sub-packages + url deps). It deliberately stops short of the heavy bgfx C++ compile — that's byte-identical to the bundled backend and is covered by the dedicated cachedbgfx-buildjob.The default
.backend = .bgfxshorthand flip is NOT in this PR — that stays bundled until the extracted package is validated against a real game (Flying Platform). No existing project changes behavior.Verified locally
Full
install → stage → generate → graph-resolvechain is green: the package fetches/stages with the manifest + vendored sub-packages, codegen wiresb.dependency("labelle_bgfx")with the manifest params + bgfx/glfw artifacts, and the complete generated dependency graph resolves. (Local env can't run the bgfx C++ build — pre-existing engine pin drift — so CI is the validator, matching the chosen plan.)Follow-ups
.bgfxenum shorthand → the package, after FP validation (one-lineconfig.builtinProviderentry).Summary by CodeRabbit
New Features
Bug Fixes