Follow-up to #109. The v0.25.0 rebuild it enabled published correctly — the stable repo now
has punktfunk-host 0.25.0-2 with libavcodec.so=63-64 / libavutil.so=61-64 / libavfilter.so=12-64 / libavdevice.so=63-64 / libswscale.so=10-64, verified resolving both
on a pristine db (227 targets) and on a live FFmpeg-9 box — and then failed its final step:
prune_release_assets: command not found
##[error]Process completed with exit code 127
Why it could never have worked
. scripts/ci/gitea-release.sh sources from the checked-out tree, and a release rebuild
checks out the old tag. The step therefore only ever sees the helpers that existed when that
tag was cut — and the prune is gated on RELEASE_TAG, i.e. on precisely that path. The helper was
guaranteed absent in the only case that calls it. Putting it in a shared script made it look
available at review time while being unreachable at run time.
Only the workflow file is read from the dispatched ref, so the logic moves there, inline.
The corollary is worth knowing before the next rebuild, and is now written at both ends: a
PKGBUILD fix made after a tag does not reach a rebuild of that tag either — the packaging comes
from the tag too. (v0.25.0 was unaffected: its PKGBUILD already carried the soname depends from #108, which is why the broken build had versioned deps at all.)
Verification
Executed the one-liner's exact bytes, read back out of arch.yml, under /bin/sh — the shell
Gitea actually uses for run: blocks:
Keeps the new -2 set and the gamescope companion, drops the superseded packages and their .sha256 sidecars, leaves other legs' .dmg/.deb alone. The '\n' survives the shell quoting,
which was the part worth proving. shellcheck clean; the dead helper is removed rather than left
unreachable, with a warning in its place against the next one.
Re-dispatching the rebuild on this branch will prune the superseded assets still attached to the
v0.25.0 release and leave a green run.
Follow-up to #109. The v0.25.0 rebuild it enabled **published correctly** — the stable repo now
has `punktfunk-host 0.25.0-2` with `libavcodec.so=63-64` / `libavutil.so=61-64` /
`libavfilter.so=12-64` / `libavdevice.so=63-64` / `libswscale.so=10-64`, verified resolving both
on a pristine db (227 targets) and on a live FFmpeg-9 box — and then failed its final step:
```
prune_release_assets: command not found
##[error]Process completed with exit code 127
```
## Why it could never have worked
`. scripts/ci/gitea-release.sh` sources from the **checked-out tree**, and a release rebuild
checks out the **old tag**. The step therefore only ever sees the helpers that existed when that
tag was cut — and the prune is gated on `RELEASE_TAG`, i.e. on precisely that path. The helper was
guaranteed absent in the only case that calls it. Putting it in a shared script made it look
available at review time while being unreachable at run time.
Only the *workflow file* is read from the dispatched ref, so the logic moves there, inline.
The corollary is worth knowing before the next rebuild, and is now written at both ends: **a
PKGBUILD fix made after a tag does not reach a rebuild of that tag either** — the packaging comes
from the tag too. (v0.25.0 was unaffected: its PKGBUILD already carried the soname depends from
#108, which is why the broken build had *versioned* deps at all.)
## Verification
Executed the one-liner's exact bytes, read back out of `arch.yml`, under `/bin/sh` — the shell
Gitea actually uses for `run:` blocks:
```
1 punktfunk-host-0.25.0-1-x86_64.pkg.tar.zst
2 punktfunk-host-0.25.0-1-x86_64.pkg.tar.zst.sha256
7 punktfunk-web-0.25.0-1-x86_64.pkg.tar.zst
```
Keeps the new `-2` set and the gamescope companion, drops the superseded packages and their
`.sha256` sidecars, leaves other legs' `.dmg`/`.deb` alone. The `'\n'` survives the shell quoting,
which was the part worth proving. `shellcheck` clean; the dead helper is removed rather than left
unreachable, with a warning in its place against the next one.
Re-dispatching the rebuild on this branch will prune the superseded assets still attached to the
v0.25.0 release and leave a green run.
The v0.25.0 rebuild published perfectly — registry has punktfunk-host 0.25.0-2 with
libavcodec.so=63-64, and it resolves on a real ffmpeg-9 box — then failed its last
step with
prune_release_assets: command not found
`. scripts/ci/gitea-release.sh` sources from the CHECKED-OUT TREE, and a release
rebuild checks out the OLD TAG. So the step could only ever see the helpers that
existed when that tag was cut, and the prune is gated on exactly that path: the
helper was guaranteed absent in the only case that calls it. Adding it to a shared
script made it look available at review time while being unreachable at run time.
Only the workflow file is read from the dispatched ref, so the logic moves there,
inline. Same reasoning documented at both ends, including the corollary worth knowing
before the next rebuild: a PKGBUILD fix made after a tag does NOT reach a rebuild of
that tag either — the packaging comes from the tag too.
Verified by executing the one-liner's exact bytes out of arch.yml under /bin/sh (the
shell Gitea actually uses): keeps the new -2 set and gamescope, drops the superseded
-1 packages and their .sha256 sidecars, leaves other legs' .dmg/.deb untouched. The
`'\n'` survives the shell quoting, which was the part worth proving.
Also drops the now-dead helper from gitea-release.sh rather than leaving a function
no caller can reach, and leaves a warning there against the next one.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Follow-up to #109. The v0.25.0 rebuild it enabled published correctly — the stable repo now
has
punktfunk-host 0.25.0-2withlibavcodec.so=63-64/libavutil.so=61-64/libavfilter.so=12-64/libavdevice.so=63-64/libswscale.so=10-64, verified resolving bothon a pristine db (227 targets) and on a live FFmpeg-9 box — and then failed its final step:
Why it could never have worked
. scripts/ci/gitea-release.shsources from the checked-out tree, and a release rebuildchecks out the old tag. The step therefore only ever sees the helpers that existed when that
tag was cut — and the prune is gated on
RELEASE_TAG, i.e. on precisely that path. The helper wasguaranteed absent in the only case that calls it. Putting it in a shared script made it look
available at review time while being unreachable at run time.
Only the workflow file is read from the dispatched ref, so the logic moves there, inline.
The corollary is worth knowing before the next rebuild, and is now written at both ends: a
PKGBUILD fix made after a tag does not reach a rebuild of that tag either — the packaging comes
from the tag too. (v0.25.0 was unaffected: its PKGBUILD already carried the soname depends from
#108, which is why the broken build had versioned deps at all.)
Verification
Executed the one-liner's exact bytes, read back out of
arch.yml, under/bin/sh— the shellGitea actually uses for
run:blocks:Keeps the new
-2set and the gamescope companion, drops the superseded packages and their.sha256sidecars, leaves other legs'.dmg/.debalone. The'\n'survives the shell quoting,which was the part worth proving.
shellcheckclean; the dead helper is removed rather than leftunreachable, with a warning in its place against the next one.
Re-dispatching the rebuild on this branch will prune the superseded assets still attached to the
v0.25.0 release and leave a green run.
The v0.25.0 rebuild published perfectly — registry has punktfunk-host 0.25.0-2 with libavcodec.so=63-64, and it resolves on a real ffmpeg-9 box — then failed its last step with prune_release_assets: command not found `. scripts/ci/gitea-release.sh` sources from the CHECKED-OUT TREE, and a release rebuild checks out the OLD TAG. So the step could only ever see the helpers that existed when that tag was cut, and the prune is gated on exactly that path: the helper was guaranteed absent in the only case that calls it. Adding it to a shared script made it look available at review time while being unreachable at run time. Only the workflow file is read from the dispatched ref, so the logic moves there, inline. Same reasoning documented at both ends, including the corollary worth knowing before the next rebuild: a PKGBUILD fix made after a tag does NOT reach a rebuild of that tag either — the packaging comes from the tag too. Verified by executing the one-liner's exact bytes out of arch.yml under /bin/sh (the shell Gitea actually uses): keeps the new -2 set and gamescope, drops the superseded -1 packages and their .sha256 sidecars, leaves other legs' .dmg/.deb untouched. The `'\n'` survives the shell quoting, which was the part worth proving. Also drops the now-dead helper from gitea-release.sh rather than leaving a function no caller can reach, and leaves a warning there against the next one.