Files
DodoSSH/.github
jaap-jan 7dc3b8950d
ci / build and test (push) Successful in 1m47s
ci / android head (push) Successful in 6m9s
ci / api image (push) Successful in 22s
Read the release id out of the front of the response, not the back
The nightly release was created and the step said it had not been:

  Gitea accepted the release call and returned no id:
  {"id":1,"tag_name":"nightly",…,"author":{"id":-2,…},"assets":[]}

`sed -n 's/.*"id":\([0-9]*\).*/\1/p'` — the leading .* is greedy, so it walked past the release's own id
to the last "id": in the document, which belongs to the embedded author object and is -2. [0-9]* then
matched no digits at all and the answer was the empty string. The release is real; only the reading of
it was wrong, which is why the page exists and carries nothing but source tarballs.

It broke both readings and the other one silently. The existing-release lookup got the same empty id, so
the delete never fired, so the next run would have failed to create a release for a tag that already had
one — a rolling channel that works exactly once. Both now go through one function, and grep matching
left to right with [0-9]+ cannot reach the author's -2 at all.

And the step now asks for the release back and checks its own uploads are on it. The failure this
channel is exposed to is a release that exists and carries nothing: a phone reads that as a feed it can
never update from and a person reads it as a page offering source tarballs. The run before this one left
exactly that behind, and it would have reported success for every upload it never made.

Checked against the response body the failing run printed: the old expression answers empty, the new one
answers 1, and the verification rejects that release and accepts one with an asset on it. The bad
release is not cleaned up by hand — the next run on main deletes and recreates it, which is what the
rolling tag does anyway.
2026-08-05 07:44:48 +02:00
..