The semver pattern in docker/metadata-action requires 3-part versions (e.g. v0.29.0). Our tags use 2-part (v0.29), causing the metadata step to produce empty tags, which made build-push-action fail. Fix: use type=match with regex to extract the version string directly, plus type=raw for the latest tag unconditionally. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>