Releases
The bridge ships as a native ahead-of-time (AOT) executable for each platform. Tests run on the .NET runtime, and the build workflow in .github/workflows/ci.yml also tests each native executable against Roslyn.
Native builds
Publish with RUNTIME_ID=osx-arm64 mise run publish, using the runtime identifier for your platform. Output goes to artifacts/native. Native compilation requires the platform build tools.
Set ROSLYN_BRIDGE_TEST_EXECUTABLE to the absolute path of the published executable, then run mise run test-integration to test it against Roslyn.
Publishing
Tag a commit of master whose ci-ok check passed, and push the tag, such as v0.1.0. The workflow publishes the release and the NuGet packages after every check passes, in separate jobs. A failure in one job does not stop the other, and you can rerun a failed job on its own. Each release contains one executable per platform, LICENSE, NOTICE, THIRD_PARTY_NOTICES.md, DOTNET_RUNTIME_NOTICES.txt and SHA256SUMS, which lists the checksum of every other file. The CI scripts live in eng/tasks/ci.
.github/workflows/docs.yml deploys the documentation site from the tagged commit after every job of the tag’s build succeeds, so the site matches the latest release. To publish a documentation fix sooner, run that workflow by hand. A manual run deploys the branch it runs on, which may document unreleased changes.
NuGet packages
The .NET tool ThomasFazzari.RoslynBridge points to one runtime package per platform, ThomasFazzari.RoslynBridge.<rid>, which holds the native executable. src/RoslynBridge/RoslynBridge.csproj defines the metadata and the platforms.
Native AOT cannot cross-compile, so each native job packs the runtime package of its own platform on every build. On a tag, the nuget job packs the tool package and pushes it after the runtime packages.
To try a local build, run RUNTIME_ID=osx-arm64 mise run pack with your runtime identifier, then mise run pack for the tool package. Packages go to artifacts/nupkg. Install them with dotnet tool install ThomasFazzari.RoslynBridge --tool-path DIRECTORY --add-source artifacts/nupkg --version 0.0.0-dev.
License notices
The executable embeds NOTICE, THIRD_PARTY_NOTICES.md and the .NET runtime notices, and prints them with roslyn-bridge-mcp licenses. The build takes the runtime notices from THIRD-PARTY-NOTICES.TXT in the restored Microsoft.DotNet.ILCompiler package and fails when the file is missing. Publishing copies it to the output as DOTNET_RUNTIME_NOTICES.txt. Native executables contain their dependencies, so update THIRD_PARTY_NOTICES.md whenever a package is added, removed or upgraded to a version with a different license. mise run notices:check compares the packages listed there with the packages the executable ships, and mise run check runs it.