7c0f9750d8
Triggers on push to dev/main, tag pushes, PR to main, and manual dispatch — all path-filtered to flutter_client/** and the three shared web inputs the sync_shared.sh script reads. Steps: - Sync tokens/error-copy/svg from web/ via tool/sync_shared.sh - Re-run dart run tool/gen_tokens.dart and fail if lib/theme/tokens.dart drifts from shared/fabledsword.tokens.json (catches forgotten regen on the JSON edit path) - flutter pub get / analyze --fatal-infos / test - Debug APK on every push (uploaded as a workflow artifact) - Release APK on tag, attached to the corresponding Forgejo release via RELEASE_TOKEN (release.yml creates the release entry; this workflow just attaches the APK as minstrel-<tag>.apk) Uses subosito/flutter-action@v2 on ubuntu-latest for portability — no dependence on a Flutter-pre-installed runner.