Files
minstrel/client/README.md
T
bvandeusen 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
chore(ci): migrate workflows to gitea + consolidate keystore secret
- 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.
2026-05-31 23:05:03 -04:00

1.2 KiB

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:

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.