This commit is contained in:
2026-06-24 16:15:57 +02:00
parent 4d730d7860
commit b3af2ddf44
4 changed files with 366 additions and 0 deletions
+121
View File
@@ -0,0 +1,121 @@
# 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
```bash
# 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
```bash
# 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:
```bash
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](https://developer.android.com/studio#command-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.