[
https://issues.apache.org/jira/browse/THRIFT-6313?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jens Geyer resolved THRIFT-6313.
--------------------------------
Assignee: Jens Geyer
Resolution: Fixed
> Publish the Windows Thrift compiler as a .NET tool
> --------------------------------------------------
>
> Key: THRIFT-6313
> URL: https://issues.apache.org/jira/browse/THRIFT-6313
> Project: Thrift
> Issue Type: New Feature
> Components: Build Process
> Reporter: Jens Geyer
> Assignee: Jens Geyer
> Priority: Major
> Fix For: 0.26.0
>
> Time Spent: 40m
> Remaining Estimate: 0h
>
> h2. Proposal
> Publish the Windows Thrift compiler as a [.NET
> tool|https://learn.microsoft.com/en-us/dotnet/core/tools/global-tools-how-to-create],
> so that a .NET developer on Windows can get it with
> {noformat}
> dotnet tool install --global Apache.Thrift.Compiler
> thrift --version
> {noformat}
> and pin it per repository with a {{dotnet-tools.json}} manifest, which is how
> .NET projects normally pin build-time tools.
> h2. Package id
> {{Apache.Thrift.Compiler}}. Checked against nuget.org:
> * {{ApacheThrift}} is the existing netstd runtime library and stays what it
> is.
> * {{Apache.Thrift}} is *not* available. It is taken by a third party and
> delisted, and NuGet ids are permanent, so a delisted id cannot be reused.
> * {{Apache.Thrift.Compiler}} is free, and it follows the {{Apache.Avro}} and
> {{Apache.Arrow}} naming that sibling ASF projects use.
> * The {{Apache.*}} prefix is not reserved on nuget.org, so a push under this
> id will be accepted.
> h2. Shape of the package
> A .NET tool package needs a managed entry point. The payload here is a native
> executable, so the package carries a small managed launcher that finds
> {{thrift.exe}} next to itself and runs it, passing arguments, the standard
> streams and the exit code straight through.
> .NET 10 added a way to declare a native executable as the entry point
> directly, with no managed code at all. It is not used here: a package built
> that way cannot be installed by the .NET 8 or .NET 9 SDK at all, which fails
> for the majority of current users, and the two MSBuild properties involved
> are undocumented.
> The package targets {{net8.0}} so that it installs on every supported SDK.
> h2. Platforms
> The package carries the Windows compiler only. NuGet will install it
> anywhere, so the launcher checks the platform and exits with a message
> pointing at the other ways to get Thrift rather than failing obscurely.
> Should builds of the compiler for other platforms be added later, .NET 10's
> runtime identifier specific tool packages can turn that into an install time
> refusal instead, without changing the install command.
> h2. Publishing
> A new workflow builds the compiler on a Windows runner, packs the tool,
> verifies the package contents, and publishes on {{release: published}} for a
> release that is not a pre-release - the same gate {{pypi.yml}},
> {{release_rust.yml}} and {{release_ruby.yml}} use.
> _Drafted with AI assistance (Claude Opus 5); reviewed and posted by Jens
> Geyer._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)