Files
PalladiumWallet/docker/README.md
T
2026-06-24 16:15:57 +02:00

3.5 KiB
Raw Blame History

PalladiumWallet — Reproducible Builds via Docker

All three distribution targets (Windows, Linux, Android) are built inside Docker containers so the output is identical regardless of what is installed on the host machine.

Prerequisites: Docker Engine (or Docker Desktop) running on the host. No .NET SDK, JDK, or Android SDK required on the host.


Quick start

# From the repository root (or the docker/ folder — both work):
./docker/build.sh

Running without arguments shows an interactive menu. Pick a target or all.


CLI usage

./docker/build.sh [TARGET] [--rebuild]

Targets:
  windows   Win x64 single-file executable
  linux     Linux x64 self-contained tarball
  android   Android APK (debug-signed)
  all       All three targets

Options:
  --rebuild   Force rebuild of Docker images (needed after Dockerfile changes)

Examples

# Build everything
./docker/build.sh all

# Windows only
./docker/build.sh windows

# Android, forcing a fresh Docker image
./docker/build.sh android --rebuild

Output

All artifacts land in dist/ at the repository root:

Target Path
Windows dist/windows/PalladiumWallet-{ver}-win-x64.exe
Linux dist/linux/PalladiumWallet-{ver}-linux-x64.tar.gz
Android dist/android/PalladiumWallet-{ver}.apk

The version is read automatically from src/App/PalladiumWallet.App.csproj.


Docker images

Image name Dockerfile Used for Approx. size
plm-build-desktop Dockerfile.desktop windows + linux ~1.5 GB
plm-build-android Dockerfile.android android ~5 GB

Images are built automatically on first use and reused on subsequent runs. Use --rebuild only after you modify a Dockerfile.

NuGet package cache

A Docker named volume plm-nuget-cache is created on first run and reused for all subsequent builds, so NuGet packages are not re-downloaded every time.

To inspect or remove it:

docker volume inspect plm-nuget-cache
docker volume rm plm-nuget-cache   # forces full re-download on next build

Source isolation

The repository is mounted read-only inside every container. The build commands work on a copy at /tmp/build, so bin/, obj/, and other generated files never appear in your working tree.


Android notes

The plm-build-android image bakes in the entire Android SDK and the dotnet android workload (~5 GB total). The first docker build for this image can take 1020 minutes depending on network speed.

The resulting APK is debug-signed (suitable for sideloading during development). For Play Store distribution, release signing must be configured separately.

If the commandlinetools URL in Dockerfile.android becomes stale (Google rotates the build number), update the URL to the latest Android command-line tools and run ./docker/build.sh android --rebuild.


Linux AppImage (future)

The Linux target currently produces a self-contained binary tarball. Once a pupnet.conf is added to the repository, the build_linux function in build.sh can be extended to call dotnet pupnet --runtime linux-x64 inside the same plm-build-desktop image to produce an AppImage.