Public Access
The push_image function deleted the existing manifest before pushing (Gitea #31964 workaround). When push failed for other reasons (HTTP 500), the old tag was lost, breaking all CI jobs using that image. Now tries push first, only deletes+retries on "already exists" error. Closes DEVX-159 Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>