Packaging SharpMUTerm

July 28, 2026 · View on GitHub

SharpMUTerm publishes as a self-contained, single-file executable — no .NET runtime required on the target machine.

Supported runtimes

linux-x64, linux-arm64, win-x64, osx-x64, osx-arm64 (declared in src/SharpMUTerm.Tui/SharpMUTerm.Tui.csproj).

Local publish

Publish profiles live in src/SharpMUTerm.Tui/Properties/PublishProfiles/:

# Linux x64 → publish output contains a single `sharpmuterm` binary
dotnet publish src/SharpMUTerm.Tui -p:PublishProfile=linux-x64 -o out/linux-x64

# Windows x64 → `sharpmuterm.exe`
dotnet publish src/SharpMUTerm.Tui -p:PublishProfile=win-x64 -o out/win-x64

For a RID without a profile, pass the flags directly:

dotnet publish src/SharpMUTerm.Tui -c Release -r osx-arm64 \
  --self-contained -p:PublishSingleFile=true \
  -p:IncludeNativeLibrariesForSelfExtract=true -o out/osx-arm64

The profiles enable single-file extraction, compression, and ReadyToRun for faster startup. These knobs live only in the publish profiles, so ordinary dotnet build / dotnet run (and CI) are unaffected — they never require a runtime identifier.

CI / releases

.github/workflows/release.yml runs on v* tags (and manual dispatch): it publishes linux-x64 and win-x64, packages them (.tar.gz / .zip), uploads them as workflow artifacts, and — on a tag — attaches them to the GitHub release.

git tag v0.1.0
git push origin v0.1.0