Development¶
Requirements¶
- The .NET 10 SDK.
- Windows for the Windows projects (agent, updater, console, Lite); Linux or Windows for the server.
wixlon the server when it builds MSI packages;osslsigncodeonly when MSI signing is configured.
dotnet build RemoteAppClient.slnx # a development build of everything
dotnet test tests/RemoteAppClient.Tests # the unit tests
build.ps1¶
The Windows components come out as single-file, self-contained executables. Run the script without parameters to see the options:
.\build.ps1 -Unsigned # agent, updater, console - development build
.\build.ps1 -Fleet -Deploy # signed with the fleet certificate, then replace this machine's installation
.\build.ps1 -Tag # release build (adds RemoteClient.Lite), signed with the release certificate
.\build.ps1 -Msi # sign the MSI(s) generated by the server
.\build.ps1 -ServerOnly # the server package, RemoteServer-linux-x64.tar.gz
Signing scripts and output folders are machine-specific and belong in build.local.psd1 next to build.ps1 (ignored by git); Get-Help .\build.ps1 -Detailed shows its format. A signing script is invoked as & <script> -Path <file>.
The server on Linux:
dotnet publish src/RemoteServer/RemoteServer.csproj -c Release -r linux-x64 --self-contained -o publish/server
tar -C publish/server -czf RemoteServer-linux-x64.tar.gz .
The Linux console's .deb and AppImage:
dotnet publish src/RemoteClient.Linux/RemoteClient.Linux.csproj -c Release -r linux-x64 --self-contained -o publish/client-linux
src/RemoteClient.Linux/packaging/build-deb.sh publish/client-linux <version> icon/RemoteAccessBlue_256x256.png .
src/RemoteClient.Linux/packaging/build-appimage.sh publish/client-linux <version> icon/RemoteAccessBlue_256x256.png .
racctl is not a release asset: dotnet publish src/RemoteClient.Cli/RemoteClient.Cli.csproj -c Release -o <folder>.
Versions¶
Each component carries its own version in its project file. Between releases only the components whose code changed are bumped, so the update channels re-roll only what changed; at a release every component gets the same number.
CI and releases¶
.github/workflows/build.yml builds every push and pull request: the Windows components, the server package, the Linux console, the unit tests, a NuGet vulnerability audit, CodeQL. A v* tag makes it publish a release with RemoteAgent.exe, RemoteAgent.Updater.exe, RemoteClient.exe, RemoteClient.Lite.exe, RemoteServer-linux-x64.tar.gz, the .deb and SHA256SUMS; the Windows executables are then replaced by signed ones.
Dependabot keeps the NuGet packages and the actions current, and CodeRabbit reviews the pull requests. The threat model the security work goes by is .oss-scanner/threat_model.md.
This website¶
MkDocs with the Material theme builds it from docs/ (mkdocs.yml, website/); .github/workflows/docs.yml deploys it to GitHub Pages on a push to master. The changelog and the keys page are the repository's own files, pulled in by website/hooks.py. On your PC: