Skip to content

Building from Source

5DO documentation edited this page Nov 2, 2026 · 4 revisions

Building from Source

Prerequisites

  • .NET SDK 10.0.301 (pinned by global.json)
  • Git
  • Optional: PowerShell 7 for packaging/soak scripts
  • Optional: Python 3.12+ for the documentation site
  • Optional: a legally obtained BIOS/disc corpus for real-content tests

Build and test

git clone https://github.com/purelogiccode/5DO.git
cd 5DO
dotnet build 5DO.sln -c Release
dotnet test 5DO.sln -c Release
dotnet format 5DO.sln --verify-no-changes

Publish

The release layout is one bundle per system, containing both apps. The bundles are framework-dependent: users must install the .NET 10 Runtime. Publish the two apphosts as framework-dependent single files:

$rid = 'win-x64'

dotnet publish src/FiveDo.Cli/FiveDo.Cli.csproj -c Release -r $rid `
  --self-contained false -p:PublishSingleFile=true -p:PublishTrimmed=false `
  -m:1 -o "artifacts/bundle/$rid/cli"

dotnet publish src/FiveDo.Frontend.Avalonia/FiveDo.Frontend.Avalonia.csproj `
  -c Release -r $rid --self-contained false -p:PublishSingleFile=true `
  -p:PublishTrimmed=false -m:1 -o "artifacts/bundle/$rid/frontend"

pwsh -NoProfile -File packaging/package-bundle.ps1 `
  -Rid $rid `
  -CliPublishDirectory "artifacts/bundle/$rid/cli" `
  -FrontendPublishDirectory "artifacts/bundle/$rid/frontend" `
  -OutputDirectory "artifacts/bundles"

The script removes PDB and XML documentation files, copies the README/license/notices/ whatsnew/release notes, and writes PACKAGE.txt and SHA256SUMS.txt. It does not copy the .NET runtime.

Optional NativeAOT CLI:

dotnet publish src/FiveDo.Cli/FiveDo.Cli.csproj -c Release -r win-x64 `
  --self-contained true -p:FiveDoNativeAot=true -p:PublishSingleFile=true

CI builds 5do-win-x64.zip, 5do-linux-x64.tar.gz, and 5do-osx-x64.tar.gz and publishes them to the GitHub release.

Documentation

python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --require-hashes -r requirements-docs.txt
mkdocs build --strict

Full guides

Clone this wiki locally