524e422517
Lint & Test / test (push) Successful in 2m16s
build-android.yml - Attach step upserts the Gitea release: GET /releases/tags/<TAG>, and POST to create it on 404 instead of warning-and-skipping. Removes the ordering dependency on release.yml's create-release job — the Android workflow can now own its own release attachment end-to-end. - Fail loudly on broken DEPLOY_TOKEN: curl -f on every asset call so 403/422 surface as job failures instead of "Uploaded" lies, and an explicit check that the token is non-empty before starting. - Preserve the pre-existing replace-on-re-run behavior for idempotent asset uploads. release.yml - Add workflow_dispatch trigger with optional `version` input so the Windows/Linux/Docker builds can be exercised on demand between real releases (was tag-push only). - Gate create-release on github.event_name == 'push' so a manual dispatch doesn't create a stray Gitea release. - Each build job gets `if: !cancelled() && (needs.create-release.result in (success, skipped))` so dispatch runs still produce artifacts even though create-release was skipped. - Gate each "Attach * to release" step on github.event_name == 'push'. - Docker: login + push are push-only; build runs on both triggers so dispatch validates the Dockerfile without needing registry creds.