The manifest names the current artifact and the directory listing is off,
so "where do I download it by hand" could only be answered by reading the
manifest first. latest.apk is a symlink the release script repoints — git
stores it as a path, so it costs bytes rather than another 34MB a
release, and every past build stays reachable under its own name, which
is what lets a device midway through a download survive a release.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Two static files behind nginx and a script that writes them. No
authentication: there is no account to check against, and the APK carries
no secret — the credential in that app is the addon URL, which lives in
the device keystore.
The APKs are committed rather than stored elsewhere. At ~34MB and a few
releases a year that beats standing up artifact storage for one app, and
the history is disposable because only the newest artifact is ever
fetched.
release.py reads the version out of amber-adult's pubspec instead of
taking it as an argument. A manifest advertising a build number the APK
does not carry is an update the device installs and is then offered
again, every launch, forever.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>