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.
27 lines
1.2 KiB
Markdown
27 lines
1.2 KiB
Markdown
# 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`
|