3cf829752b
flutter / analyze-test-build (push) Failing after 2s
test-go / test (push) Successful in 33s
android / Build + lint + test (push) Failing after 41s
test-web / test (push) Successful in 41s
android / Build signed release APK (push) Has been skipped
test-go / integration (push) Successful in 11m16s
- rename .forgejo/workflows/ to .gitea/workflows/ (git mv preserves history); Gitea Actions reads either path, but the directory now matches the active platform - collapse ANDROID_STORE_PASSWORD + ANDROID_KEY_PASSWORD into a single ANDROID_KEYSTORE_PASSWORD secret (PKCS12 keystores require the two passwords to be identical, so the duplication carried no information); build.gradle.kts still reads two env vars to stay format-agnostic, both now sourced from the same secret in CI - ignore android/*.keystore, android/*.keystore.*, android/*.jks, android/keystore.properties so the regenerated signing material never reaches a remote on accident - update prose references from Forgejo to Gitea in CLAUDE.md and the docs; the historical "migrated from Forgejo" note in CLAUDE.md is kept intentionally; forgejo/upload-artifact@v3 action refs are left untouched (canonical artifact action, resolves cleanly under Gitea Actions) Operator side: ANDROID_KEY_ALIAS, ANDROID_KEYSTORE_PASSWORD, and ANDROID_KEYSTORE_B64 secrets registered in Gitea before this lands.
36 lines
1.2 KiB
Markdown
36 lines
1.2 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 on tag releases:
|
|
1. `flutter.yml` builds `app-release.apk` and attaches it to the
|
|
Gitea release as `minstrel-<TAG>.apk`.
|
|
2. `release.yml` waits for that asset to appear, downloads it into
|
|
this directory as `minstrel.apk`, writes the tag string to
|
|
`minstrel.apk.version`, and `docker buildx build` includes both
|
|
via `COPY client/ /app/client/`.
|
|
|
|
## Development
|
|
|
|
Empty directory works fine — the endpoints return 404 and the Flutter
|
|
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.
|