With the move to Avalonia the app runs on Linux and macOS, so the
distribution tooling grows beyond Windows: publish.ps1 gains a
-Platform parameter (the default keeps the Windows behavior unchanged),
and new BuildTools scripts package the self-contained publish outputs
into a zip, deb, and rpm on Linux and a zipped ILSpy.app on macOS.
Nothing is signed at package time; signing happens offline on the
release manager machine. Info-ZIP zip is used instead of
Compress-Archive because the latter drops unix mode bits. deb/rpm are
built with dpkg-deb/rpmbuild directly (both preinstalled on GitHub
ubuntu runners) following sourcegit-scm/sourcegit's proven model,
including the libicu OR-chain in the deb control file and disabled
auto-requires for the self-contained rpm payload. Pre-release versions
map '-' to '~' so both package managers sort them before the release.
The macOS bundle's Info.plist now carries placeholders stamped at
package time; on Windows the spec/control/desktop files are kept LF via
.gitattributes because Linux tools consume them verbatim.
Assisted-by: Claude:claude-fable-5:Claude Code
.gitattributes marked *.cs as `text` with no `eol=`, so the checked-out line
ending was left to each machine's git config. On the CI runner the .cs come out
LF, but .editorconfig sets end_of_line=crlf, so dotnet-format's --verify-no-changes
flagged every line of every file and the Format check step failed repo-wide
(independent of code formatting). Pinning eol=crlf makes the checkout match the
editorconfig on every platform. Blobs stay LF; only the working-tree EOL is fixed.
Assisted-by: Claude:claude-opus-4-8:Claude Code