All releases

v0.4.2

Signedpublished August 14, 2026

What changed

Fixed

  • After a rollback, every later install run refused to upgrade — silently. --rollback points devgrail-server:latest back at the displaced build, but versions.env is written before the health gate and so still names the release that was rolled off. The skip-if-unchanged check compared that file against the registry and asked only whether something was tagged :latest, so it concluded "already at vX — skipping" and did nothing: the host kept running the old binary while versions.env, the installer's own closing banner and any script reading them all reported the new one. /healthz was the only thing telling the truth, and disagreeing with it looked like a stale response rather than the symptom it was. The only way forward was to delete versions.env by hand, which nothing documented. The check now asks whether :latest is that version — it compares against the release tag docker load gave those exact bytes — and when it is not, moves the tag back to them rather than re-downloading images that are already on the host. --dry-run reports that state instead of calling it unchanged, and --rollback now says plainly that versions.env names the release it rolled off and that re-running goes forward again.

Container images

registry build 10
amd64747 MB
sha256:a1224587a2178c951a818744763ffd6f83a3393cc3597a6e8bbebc6d91cbf859
Download
arm64616 MB
sha256:3f586875d62d39aac09ea020586efd5f6eee7724616009c6d85d9893ee7c31e9
Download
registry build 10
amd6445 MB
sha256:b35069206865fecfdef3ee3d8008a9972f447fffddf4814cd6cf390990b99bea
Download
arm6444 MB
sha256:9fe4df69b6499e3f5d135a37181e65cf44b55de8363661ff1ae19b4449e95e28
Download

Installer files

docker-compose.yml11 KBsha256:d716c3cd9ffd1f4a87caacb8d1b444646f9cf388949d8c2805d2676981307abc
install.sh94 KBsha256:5003a27505f99c6ef5048466ea39f6a3dd8d7d39ac1db5e188cdeba3b0aca9e5
traefik-dynamic-http.yml5 KBsha256:e344c8efd13c7d84996e2ebfbc75dcee2d995d8538c8a245c89c0e44fad0089b
traefik-dynamic.yml6 KBsha256:d18fa561b8eb7d53b015284e0246b2d05953bf281b65269c1fae3d6883530db6
uninstall.sh10 KBsha256:d8f09fe906e13f57bc308f6f2340972a62b010c367174ec79597c86a84c706be

Signature

ecdsa-p256-sha256key f1f1eaf642454d65

One signature covers every artifact above. It is made off this host, and neither this site nor the registry behind it can check it — that is the point, and it is why verifying it catches things a checksum from the same server cannot. How to verify it.

Verify devgrail-container (amd64)
curl -fsSL https://web-dev.trixibot.com/api/registry/releases/v0.4.2 -o release.json

# -j, not -r: -r appends a newline the signer never saw, and the check fails.
jq -j '.signature.payload'   release.json > payload
jq -r '.signature.signature' release.json | base64 -d > payload.sig

openssl dgst -sha256 -verify devgrail-release.pem -signature payload.sig payload
# -> Verified OK

# The payload must name this release, so an older signed one cannot be replayed.
head -2 payload

# ...and it must name this exact file. -qxF: whole line, literal.
grep -qxF 'image devgrail-container 10 amd64 a1224587a2178c951a818744763ffd6f83a3393cc3597a6e8bbebc6d91cbf859' payload && echo "digest is covered by the signature"
The signed payload — shown for reading, not for verifying

Copy this from the manifest with jq -j, never from this page: the signature covers exact bytes, and rendering here drops the trailing newline the signer included.

devgrail-release-signature-v1
release v0.4.2
asset docker-compose.yml 9 d716c3cd9ffd1f4a87caacb8d1b444646f9cf388949d8c2805d2676981307abc
asset install.sh 9 5003a27505f99c6ef5048466ea39f6a3dd8d7d39ac1db5e188cdeba3b0aca9e5
asset traefik-dynamic-http.yml 8 e344c8efd13c7d84996e2ebfbc75dcee2d995d8538c8a245c89c0e44fad0089b
asset traefik-dynamic.yml 9 d18fa561b8eb7d53b015284e0246b2d05953bf281b65269c1fae3d6883530db6
asset uninstall.sh 9 d8f09fe906e13f57bc308f6f2340972a62b010c367174ec79597c86a84c706be
image devgrail-container 10 amd64 a1224587a2178c951a818744763ffd6f83a3393cc3597a6e8bbebc6d91cbf859
image devgrail-container 10 arm64 3f586875d62d39aac09ea020586efd5f6eee7724616009c6d85d9893ee7c31e9
image devgrail-server 10 amd64 b35069206865fecfdef3ee3d8008a9972f447fffddf4814cd6cf390990b99bea
image devgrail-server 10 arm64 9fe4df69b6499e3f5d135a37181e65cf44b55de8363661ff1ae19b4449e95e28