Commit graph

21 commits

Author SHA1 Message Date
798013a957 Keep only the last three builds
The repository grew ~64MB a release and never gave any of it back: at build
14 that was 762MB in public/ and 590MB in .git, stored twice on the VPS. The
cost nobody had counted was the image — public/ is copied into it, so a deploy
built 1.3GB of nginx, and Coolify keeps the old ones for rollback. That is
what filled the server's root filesystem and failed a push with "no space
left on device".

Nothing ever asks for an older build on purpose, so release.py now deletes
all but the newest three of each kind once the new one is staged. Each kind is
counted on its own: Linux is published rarely, and latest-linux.tar.gz has to
keep resolving through the releases that skip it. Both symlinks point at the
build just staged, which is the highest numbered one, so they survive the
prune by construction and /manifest.json never named anything but the newest.

This trims the working tree to 200MB. It does not shrink .git, which still
holds all fourteen builds; pruning that rewrites history and is a separate
decision.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-31 01:59:29 +01:00
4bcd172629 Release 0.6.2+14 2026-10-30 20:59:28 +01:00
a6400baeee Release 0.6.1+13 2026-10-30 20:42:52 +01:00
239bff7fee Release 0.6.0+12 2026-10-30 18:17:45 +01:00
b7efa9d4d3 Release 0.5.0+11 2026-10-17 18:20:25 +02:00
b84e3a1c03 Release 0.4.1+10 2026-09-06 23:40:40 +02:00
aeee35330d Release 0.4.0+9 2026-09-06 19:24:37 +02:00
Richard
03ad987db0 Stop telling caches the moving aliases never change
latest.apk and latest-linux.tar.gz are symlinks the release script
repoints, and latest.apk matched the `\.apk$` rule that serves
`immutable, max-age=1y`. So the one URL people are handed was the one URL
a browser or proxy could pin to an old release for a year.

Exact-match locations win over the regex in nginx, so the two aliases now
carry no-cache and the versioned artifacts — which genuinely never change,
because a release is a new filename — keep the immutable header. The
regex also covers .tar.gz now; it only ever mentioned .apk.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 19:04:20 +02:00
a3b48f742f Release 0.3.1+8 2026-09-06 19:01:42 +02:00
902ce30f1b Release 0.3.1+8 2026-09-06 18:12:09 +02:00
dfa7b0c992 Release 0.3.0+7 2026-09-06 17:13:31 +02:00
46a6b260de Release 0.2.3+6 2026-08-30 18:09:54 +02:00
Richard
55990b442c Give the download one permanent address
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>
2026-08-30 18:01:31 +02:00
f09ab9d1ed Release 0.2.3+6 2026-08-30 17:52:06 +02:00
9c6209caa9 Release 0.2.2+5 2026-08-30 17:42:46 +02:00
70eb38d173 Release 0.2.1+4 2026-08-30 14:40:44 +02:00
aa90d1d378 Release 0.2.0+3 2026-08-30 14:38:32 +02:00
7db7ff2434 Release 0.1.1+2 2026-08-30 04:00:21 +02:00
eb6d679a4b Release 0.1.0+1 2026-08-30 03:53:55 +02:00
7e28f70303 Release 0.1.0+1 2026-08-30 03:53:44 +02:00
Richard
2fc0981195 Somewhere for the app to look for a newer version of itself
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>
2026-08-30 03:53:38 +02:00