Workflow and Publish Discipline
tsbindgen participates in release waves, not just one-off generation.
Normal workflow
- regenerate the affected binding repos
- run the relevant repo-local checks
- rerun compiler gates for affected call surfaces or bindings metadata
- rerun downstream applications for affected real programs
- check version drift
- publish the coherent wave
Why the workflow is strict
Generated binding work can break:
- overload selection
- nullable and generic projection
- package metadata expectations
- downstream application builds
It can also fail only after:
tsonicE2E fixtures- downstream application startup
- publish-time version checks
- cross-package import ownership checks
That is why regen and publish are part of a verified wave.
Repo-local scripts matter
In the generated binding repos, prefer the repo-local scripts over ad hoc manual publishing. The stack uses:
- repo-local generation scripts for each binding family
tsbindgentest suites for generator worktsbindgen/scripts/wave-publish.shfor release-wave preflight and publish of npm packages and NuGet runtime packages
Those scripts enforce the release rules:
- clean
main - latest
origin/main - no same-version silent republish
- preflight across the whole wave before publishing any package
- content-drift checks since the last version-bump commit
- NuGet runtime publishing before npm packages that depend on runtime behavior
Relationship to first-party source packages
Generated CLR bindings and first-party source packages live side by side, but they are not owned the same way:
tsbindgenowns the generated binding packagesjs,nodejs, andexpressown their own authored TypeScript source
Practical consequence
If you are debugging:
- a CLR namespace import problem -> start in
tsbindgenor the generated repo - a first-party authored package issue -> start in
js,nodejs, orexpress - a mixed wave failure -> verify the generated packages and downstreams together
Wave publish scope
The release wave includes:
- npm packages:
tsbindgen,tsonic,core,dotnet,globals,js,nodejs,express,aspnetcore,microsoft-extensions,efcore,efcore-sqlite,efcore-sqlserver, andefcore-npgsql - NuGet packages:
runtime
--push pushes non-main wave branches and prints PR URLs. --publish requires
clean, latest main in every wave repo and validates the entire wave before any
registry write.