Bring the README and client/README in line with the current product and release pipeline ahead of making the repo public-facing: - Highlights: replace the retired "Flutter client in flight" bullet with the native-Android-APK-bundled-in-the-image story. - Quickstart: document the purpose of each compose volume mount, and fix the minstrel-data mount (/data -> /app/data) so it matches the image's MINSTREL_STORAGE_DATA_DIR and generated artefacts actually persist. - Configuration: tie MINSTREL_STORAGE_DATA_DIR to the /app/data mount. - Updating: replace the bogus :v1.0.x scheme with the real tag model (:latest, immutable :vYYYY.MM.DD, :main) and note the bundled APK. - client/README: rewrite the Production section to match release.yml (android-release + needs: ordering, non-tag :latest bundle path). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bundled client assets
Holds the Android APK (minstrel.apk + minstrel.apk.version) that the
server serves via /api/client/version and /api/client/apk for the
in-app update flow (#397).
Production
CI populates this directory in release.yml (no Flutter — the client is
native Android, built by the android-release job):
- Tag release (
v*): theandroid-releasejob builds + signs the APK, uploads it as a workflow artifact, and attaches it to the Gitea release asminstrel-<TAG>.apk. Theimage-releasejob (needs: android-release) downloads that artifact into this directory asminstrel.apkand writes the computed versionName tominstrel.apk.version. - Main push (non-tag
:latest/:main): no APK is built, but the image still moves:latest, soimage-releasepulls the most-recent release's signed APK from the Gitea API and reconstructs its exact versionName — keeping the in-app update channel alive on:latestinstead of stripping it until the next tag.
Either way, docker buildx build bakes both files into the image via
COPY client/ /app/client/.
Development
Empty directory works fine — the endpoints return 404 and the Android update banner stays hidden ("no update channel" graceful degradation).
To smoke-test the update flow locally, drop a real APK + a version file into this directory:
cp /path/to/app-release.apk client/minstrel.apk
echo "v0.2.0" > client/minstrel.apk.version
Why a directory and not embed.FS?
The APK is 30-60 MB. Embedding bloats the Go binary and slows
go build for everyone, even when the APK isn't being changed.
File-on-disk also lets operators override at runtime via volume
mount on /app/client/ if they want to ship their own build.