docs/docs-as-code.md defines the workflow; docs/adr holds 31 ADRs (retroactive, reconstructed from code and changelog) with a template and index. docs/check-docs.sh validates ADR structure, index, cited code paths, relative links and CLAUDE.md/AGENTS.md sync.
1.2 KiB
1.2 KiB
0028. Reproducible release builds inside pinned Docker images
- Status: Accepted
- Area: Distribution
- Recorded: 2026-11-03 (retroactive: reconstructed from code, comments and changelog)
Context
Users of a wallet must be able to trust that a shipped binary comes from the published source, and builds must not drift with whatever SDK a developer has installed.
Decision
docker/build.sh [windows|linux|android|all] builds each target in a container whose toolchain (.NET SDK, JDK, Android SDK and workload) is pinned in docker/Dockerfile.*; artifacts land in dist/. The desktop single-file publish needs IncludeNativeLibrariesForSelfExtract=true, otherwise Avalonia's native libraries stay outside the executable and it silently fails to start.
Consequences
- The Dockerfiles are the auditable definition of how releases are made.
- This pins the environment; bit-for-bit identical output is not guaranteed by .NET (timestamps, signing).
- The Android workload dictates the SDK API level (error XA5207 means bump
ANDROID_SDK_PLATFORM).
References
docker/build.shdocker/Dockerfile.desktopdocker/Dockerfile.androiddocker/README.md