Skip to content

Commit

Permalink
Generate Protobuf C# objects automatically in MSBuild (#7063)
Browse files Browse the repository at this point in the history
* Added proto reference to each project and removed manually generated files

* Removed protobuf target as it would not be used anymore

* Remove manually generated files

* Make proto generated types internal

* upgrading MNTR

---------

Co-authored-by: Aaron Stannard <aaron@petabridge.com>
  • Loading branch information
yanpitangui and Aaronontheweb committed Apr 22, 2024
1 parent 329b2b3 commit a19b825
Show file tree
Hide file tree
Showing 25 changed files with 81 additions and 41,827 deletions.
45 changes: 0 additions & 45 deletions build.fsx
Expand Up @@ -426,51 +426,6 @@ Target "PublishNuget" (fun _ ->
printfn "%s" exn.Message
)

//--------------------------------------------------------------------------------
// Serialization
//--------------------------------------------------------------------------------
Target "Protobuf" <| fun _ ->

let protocPath =
if isWindows then findToolInSubPath "protoc.exe" "tools/Google.Protobuf.Tools/tools/windows_x64"
elif isMacOS then findToolInSubPath "protoc" "tools/Google.Protobuf.Tools/tools/macosx_x64"
else findToolInSubPath "protoc" "tools/Google.Protobuf.Tools/tools/linux_x64"

let protoFiles = [
("WireFormats.proto", "/src/core/Akka.Remote/Serialization/Proto/");
("ContainerFormats.proto", "/src/core/Akka.Remote/Serialization/Proto/");
("SystemMessageFormats.proto", "/src/core/Akka.Remote/Serialization/Proto/");
("ClusterMessages.proto", "/src/core/Akka.Cluster/Serialization/Proto/");
("ClusterClientMessages.proto", "/src/contrib/cluster/Akka.Cluster.Tools/Client/Serialization/Proto/");
("DistributedPubSubMessages.proto", "/src/contrib/cluster/Akka.Cluster.Tools/PublishSubscribe/Serialization/Proto/");
("ClusterShardingMessages.proto", "/src/contrib/cluster/Akka.Cluster.Sharding/Serialization/Proto/");
("ReliableDelivery.proto", "/src/core/Akka.Cluster/Serialization/Proto/");
("TestConductorProtocol.proto", "/src/core/Akka.Remote.TestKit/Proto/");
("Persistence.proto", "/src/core/Akka.Persistence/Serialization/Proto/");
("StreamRefMessages.proto", "/src/core/Akka.Streams/Serialization/Proto/");
("ReplicatorMessages.proto", "/src/contrib/cluster/Akka.DistributedData/Serialization/Proto/");
("ReplicatedDataMessages.proto", "/src/contrib/cluster/Akka.DistributedData/Serialization/Proto/"); ]

printfn "Using proto.exe: %s" protocPath

let runProtobuf assembly =
let protoName, destinationPath = assembly
let args = StringBuilder()
|> append (sprintf "-I=%s" (__SOURCE_DIRECTORY__ @@ "/src/protobuf/") )
|> append (sprintf "-I=%s" (__SOURCE_DIRECTORY__ @@ "/src/protobuf/common") )
|> append (sprintf "--csharp_out=internal_access:%s" (__SOURCE_DIRECTORY__ @@ destinationPath))
|> append "--csharp_opt=file_extension=.g.cs"
|> append (__SOURCE_DIRECTORY__ @@ "/src/protobuf" @@ protoName)
|> toText

let result = ExecProcess(fun info ->
info.FileName <- protocPath
info.WorkingDirectory <- (Path.GetDirectoryName (FullName protocPath))
info.Arguments <- args) (System.TimeSpan.FromMinutes 45.0) (* Reasonably long-running task. *)
if result <> 0 then failwithf "protoc failed. %s %s" protocPath args

protoFiles |> Seq.iter (runProtobuf)

//--------------------------------------------------------------------------------
// Documentation
//--------------------------------------------------------------------------------
Expand Down
3 changes: 2 additions & 1 deletion src/Directory.Build.props
Expand Up @@ -25,6 +25,7 @@
<NewtonsoftJsonVersion>[13.0.1,)</NewtonsoftJsonVersion>
<NBenchVersion>2.0.1</NBenchVersion>
<ProtobufVersion>3.26.1</ProtobufVersion>
<GrpcToolsVersion>2.60.0</GrpcToolsVersion>
<BenchmarkDotNetVersion>0.13.12</BenchmarkDotNetVersion>
<NetTestVersion>net8.0</NetTestVersion>
<FsharpVersion>6.0.5</FsharpVersion>
Expand All @@ -36,7 +37,7 @@
<FsCheckVersion>2.16.6</FsCheckVersion>
<HoconVersion>2.0.3</HoconVersion>
<ConfigurationManagerVersion>6.0.1</ConfigurationManagerVersion>
<MultiNodeAdapterVersion>1.5.18</MultiNodeAdapterVersion>
<MultiNodeAdapterVersion>1.5.19</MultiNodeAdapterVersion>
<MicrosoftLibVersion>[6.0.*,)</MicrosoftLibVersion>
<MsExtVersion>[6.0.*,)</MsExtVersion>
<AkkaAnalyzerVersion>0.2.4</AkkaAnalyzerVersion>
Expand Down
Expand Up @@ -20,6 +20,15 @@

<ItemGroup>
<PackageReference Include="System.Diagnostics.Process" Version="4.3.0" />
<PackageReference Include="Grpc.Tools" Version="$(GrpcToolsVersion)">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

<ItemGroup>
<Protobuf Access="internal" Include="Serialization/Proto/ClusterMetricsMessages.proto" />

</ItemGroup>

</Project>

0 comments on commit a19b825

Please sign in to comment.