Files
PalladiumWallet/docs/adr/0028-reproducible-docker-release-builds.md
davide b292590cdc docs: add docs-as-code process and one ADR per feature
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.
2026-11-03 09:45:51 +01:00

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.sh
  • docker/Dockerfile.desktop
  • docker/Dockerfile.android
  • docker/README.md