Codeberg's hosted runners are tagged codeberg-tiny/small/medium (+ -lazy),
not 'docker', so the job was never picked up ('No active runner with tag
docker'). The three CGO cross-compiles exceed the non-lazy 10 min cap, so
use the medium -lazy runner, which relaxes the wall-clock limit.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add tag-triggered CI that builds and publishes the linux/amd64,
linux/arm64, and windows/amd64 release binaries on both forges.
- scripts/ci-build-release.sh: shared, Docker-free build+package for all
three targets (Windows cross-compiled via MinGW), reused by both
workflows so the build logic lives in one place.
- .github/workflows/release.yml: GitHub Actions, publishes via
softprops/action-gh-release using the built-in token.
- .forgejo/workflows/release.yml: Forgejo Actions for Codeberg, publishes
via forgejo-release using a RELEASE_TOKEN secret.
- .gitattributes: force LF on workflow YAML so bash run: blocks don't
break on Linux runners.
- docs/DEVELOPMENT.md: document the tag -> release flow and token setup.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>