global.jsonpins the SDK to.NET 10; use a .NET 10 SDK even though the main library projects targetnet8.0.- Restore order used by the repo and CI:
dotnet tool restore,dotnet restore, thendotnet build -c Release. - There is no checked-in formatter or lint config. Do not assume Fantomas or a lint step exists.
- Main package:
src/Pulsar.Client. - Support packages:
src/Pulsar.Client.Proto(C# proto support) andsrc/Pulsar.Client.Otel(OpenTelemetry plugin). - Tests:
tests/UnitTestsandtests/IntegrationTests. - Local Pulsar test environment:
tests/compose/standalone.
- Public client construction starts at
src/Pulsar.Client/Api/PulsarClientBuilder.fs. - Runtime orchestration is centered in
src/Pulsar.Client/Api/PulsarClient.fs. - Internals are actor-like and communicate through
System.Threading.Channels; most broker-facing flow lives undersrc/Pulsar.Client/Internal.
- Tests use Expecto, not xUnit/NUnit.
- CI builds once, then runs the test executables with
dotnet run --no-buildrather than relying ondotnet test. - Fast verification after library changes:
dotnet run -c Release --project tests/UnitTests/UnitTests.fsproj --no-build - Both test projects pass CLI args into
Tests.runTestsInAssemblyWithCLIArgs, so you can use Expecto filters by appending args after--todotnet run.
- Don't run integration test until explicitly asked
- Start the local broker from
tests/compose/standalonewithdocker compose up -d. - The checked-in integration defaults in
tests/IntegrationTests/Common.fsexpect local endpointspulsar://127.0.0.1:6650,http://127.0.0.1:8080, and TLS on6651; the provided compose file matches these. - CI integration command:
dotnet run -c Release --project tests/IntegrationTests/IntegrationTests.fsproj --no-build --no-spinner --debug - TLS integration tests can be disabled locally with the
NOTLScompile constant as described intests/README.md.
- Ubuntu/macOS integration-related compression support requires native
snappyandzstdpackages; seeREADME.mdand.github/workflows/dotnetcore-ubuntu.yml.