Adopt the Evergine.Bindings toolbox - #5
Merged
Conversation
CI and CD moved from evergine-standards@v2 to the Evergine.Bindings@v1 reusable workflows, which is where the fleet standard now lives; Meshoptimizer and the other tracked bindings are already there. Adds binding.yml, the manifest both the deterministic and the agentic workflows read. It validates against binding.schema.json. Its NOTE comments record the two hazards specific to this repository: rtcore_config.h is generated by Embree's CMake rather than fetched, and the headers cannot move without a native rebuild. CD becomes three jobs, matching Meshoptimizer. binding-resolve-upstream settles on one release, embree-cmake builds the natives at that release, and binding-tracked-cd regenerates and publishes. One place decides the revision: if the headers and the binaries each worked it out for themselves, a release published midway through a run would leave them on different versions, and that mismatch is invisible until it throws in a consumer's application. embree-cmake.yml gains workflow_call so the CD can drive it, and its artifacts now carry their final repository paths so unpacking them over the tree is the whole mapping. rtcore_config.h comes from the linux-x64 leg alone: every leg generates an identical file but the Windows one is CRLF, so letting them all contribute would flip the committed header's line endings depending on unpack order. Unlike most of the fleet, generation stays on ubuntu-latest. MeshOptimizer, RenderDoc and KTX all generate on Windows because the libclang in the CppAst package cannot resolve system headers on Linux; this generator parses against the stubs in EmbreeGen/Headers/stubs with a pinned x86_64 target, so it does not have that problem and its output is identical on any host.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Moves this repository onto the fleet's current infrastructure. It was built following
C2CSharpBinding.agent.md, which points atevergine-standards@v2— the previous location.Meshoptimizer and the other tracked bindings already consume
Evergine.Bindings@v1.binding.ymlThe manifest both the deterministic and the agentic workflows read. Validates against
binding.schema.json.kind: git-tree, tracking stable releases ofRenderKit/embree, withcurrent: v4.4.1— the one place the version lives, rewritten bybinding-fetch-upstreamwhena newer release arrives.
Its
NOTEcomments record the two hazards specific to this repository, because thebinding-updateragent reads and obeys them:rtcore_config.his not an upstream source. Embree's CMake generates it, and it decidesthe layout of several public structs —
RTC_MAX_INSTANCE_LEVEL_COUNTsizes theinstIDarrays,
RTC_GEOMETRY_INSTANCE_ARRAYadds theinstPrimIDones,RTC_MIN_WIDTHadds afield to
RTCIntersectArguments. It comes fromembree-cmake.ymlalongside the binaries.Refreshing the header tree leaves it alone: the
git-treeadapter only writes what itfetched.
mismatched package compiles, passes CI, publishes, and only then throws.
CD becomes three jobs
resolve→natives→cd, matching Meshoptimizer:binding-resolve-upstreamsettles on one release and nothing else decides it.embree-cmake.ymlbuilds the natives at that release. It gainsworkflow_callfor this,and its artifacts now carry their final repository paths so the CD unpacks them over the
tree.
binding-tracked-cdregenerates, packs and publishes, taking the natives by artifactpattern — but only when the natives job actually ran, since asking for artifacts that were
never produced fails the download.
nativesis gated onref_moved: four platform builds, the x64 legs alone about an hour, isnot something to spend on a maybe.
One detail worth a look:
rtcore_config.his collected from the linux-x64 leg only. Everyleg generates a byte-identical file, but the Windows one is written with CRLF, so letting all
four contribute would flip the committed header's line endings depending on unpack order.
Generation stays on Linux
MeshOptimizer, RenderDoc and KTX all generate on
windows-latestbecause the libclang in theCppAst package carries no system include paths and none of its own builtin headers, so
<stddef.h>does not resolve on Linux. This generator parses against the stubs inEmbreeGen/Headers/stubswith a pinnedx86_64target, so it does not have that problem — andas a side effect its output is identical on any host. Please don't "fix" it onto Windows; there
is a comment in
binding.ymlsaying so.Not in this PR
The agentic workflows (
binding-updaterand friends) andtoolbox-update.yml— block B of theroadmap. That needs
vars.APP_CLIENT_ID/secrets.APP_PRIVATE_KEYat the org level and a setof
agent:*labels on the repository, so it is worth its own change.