server: selfupdate must normalize namespaced tags; build-status: pipeline green
server-test / test (push) Successful in 24s

Release tags are server-v1.2.3 but binaries are stamped v1.2.3 — the raw
comparison would re-download the current version on every check.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mrambossek
2026-07-30 16:38:08 +02:00
co-authored by Claude Opus 5
parent ebcb012450
commit b7658a6777
2 changed files with 12 additions and 4 deletions
+7 -3
View File
@@ -159,9 +159,13 @@ Repo pushed to git.rambossek.at/EchoLot/echolot (ssh :2222). Actions runner work
paths+tags triggers never fire (split into test-server.yml / build-server.yml), and a greedy
`sed` grabbed a nested user id instead of the release id → uploads 404ed (first-match grep now;
release creation also falls back to GET-by-tag on re-runs). Binaries verified downloadable →
`--self-update` has its artifact source. **Still open: the `image` job** — needs a
docker-capable runner (GITHUB_SERVER_URL inside the runner is the internal `http://app:3000`;
set `ECHOLOT_REGISTRY_HOST=git.rambossek.at` as a repo variable/env when enabling it).
`--self-update` has its artifact source. **Image job green too** on the dedicated
`compilesau-echolot` runner (label `echolot`): needed a PAT with package read/write as the
`REGISTRY_TOKEN` repo secret — the built-in Actions token is rejected by the container
registry. `git.rambossek.at/echolot/echolot-server:{v0.1.0,latest}` pulls anonymously
(3.9 MB distroless, verified). Full chain proven: tag → tests → binaries → release assets →
registry image → anonymous pull. Note the tag convention: image tags carry the bare version
(`v0.1.0`), release tags the namespaced one (`server-v0.1.0`); selfupdate normalizes.
## Next steps
1. Build locally, run on several physical devices (varied Android versions/vendors), collect the
+5 -1
View File
@@ -49,7 +49,11 @@ func Run(api, currentVersion string) error {
if err := json.NewDecoder(resp.Body).Decode(&rel); err != nil {
return err
}
if rel.TagName == "" || rel.TagName == currentVersion {
// Tags are namespaced (server-v1.2.3) but binaries are stamped with the
// bare version (v1.2.3) — compare the normalized forms or the updater
// would re-download the same version forever.
latest := strings.TrimPrefix(rel.TagName, "server-")
if rel.TagName == "" || latest == currentVersion {
fmt.Printf("already current (%s)\n", currentVersion)
return nil
}