ad37937949
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>
46 lines
1.7 KiB
Markdown
46 lines
1.7 KiB
Markdown
# 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*`):** the `android-release` job builds + signs the
|
|
APK, uploads it as a workflow artifact, and attaches it to the Gitea
|
|
release as `minstrel-<TAG>.apk`. The `image-release` job
|
|
(`needs: android-release`) downloads that artifact into this directory
|
|
as `minstrel.apk` and writes the computed versionName to
|
|
`minstrel.apk.version`.
|
|
- **Main push (non-tag `:latest` / `:main`):** no APK is built, but the
|
|
image still moves `:latest`, so `image-release` pulls the most-recent
|
|
release's signed APK from the Gitea API and reconstructs its exact
|
|
versionName — keeping the in-app update channel alive on `:latest`
|
|
instead 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:
|
|
|
|
```sh
|
|
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.
|