Last updated: 2026-06-04 for v1.8.245.
Run these checks before committing code that changes app behavior, build logic, resources, or docs that describe shipped behavior.
For UI, IME behavior, setup, backup/restore, import/export, accessibility, or
release publication, use QA_CHECKLISTS.md to record the
visual-QA matrix, manual-QA flow, and release-evidence rows that apply.
git diff --check
bash scripts/check-repo-hygiene.sh
bash scripts/check-fastlane-metadata.sh
.\gradlew.bat :app:verifyNoInternetPermission :app:testDebugUnitTest :app:verifyRoborazziDebug :app:lintDebug :app:assembleDebugcheck-fastlane-metadata.sh was added in v1.8.175 to catch F-Droid listing drift
(see CHANGELOG.md#v1.8.175). Every projectVersionCode
bump must ship with a matching fastlane/metadata/android/en-US/changelogs/<code>.txt.
Before running the script, review the matching Fastlane changelog as a store-facing draft:
- Keep it at or below 480 characters for headroom; the script enforces the hard 500-character ceiling.
- Summarize the user-visible or maintainer-visible outcome, not the file list.
- Omit Gradle commands, internal-only issue IDs, and claims not present in the
full
CHANGELOG.mdsection or release evidence. - For docs-only releases, state the clarified workflow instead of implying product behavior changed.
Expected result:
verifyNoInternetPermissionfails if any app manifest addsINTERNETor equivalent network permissions.check-repo-hygiene.shfails if generated build/report output is tracked or local Markdown deletions still need classification.testDebugUnitTestpasses the JVM policy, parser, trust-state, accessibility, and screenshot-host tests.verifyRoborazziDebughard-fails if committed screenshot baselines drift.verifyRoborazziReleaseruns the non-shippingreleaseRoborazzivariant and should pass before publishing a tag or release APK.lintDebugwritesapp/build/reports/lint-results-debug.*. Any lint-baseline drift must be resolved in the same change that fixes the underlying warning.assembleDebugproducesapp/build/outputs/apk/debug/app-debug.apk.
GitHub Actions runs:
bash scripts/run-lint-debug-with-baseline-check.shThe wrapper runs :app:lintDebug, saves the console log to
app/build/reports/lintDebug-console.log, and fails if Android Lint reports
stale baseline entries. Use it locally from Git Bash or WSL when touching
app/lint.xml, lint configuration, or warning cleanup.
As of v1.8.217, SwiftFloris commits no app/lint-baseline.xml; lintDebug
therefore reports current warnings directly instead of hiding them behind a
baseline file. Keep the wrapper in place so any future baseline introduction or
stale-baseline message remains visible in CI.
When an Android device or emulator is connected:
.\gradlew.bat :app:assembleDebug
adb install -r app\build\outputs\apk\debug\app-debug.apk
adb shell monkey -p dev.patrickgold.florisboard.debug -c android.intent.category.LAUNCHER 1
adb shell logcat -d -t 2000 | Select-String -Pattern "FATAL EXCEPTION|AndroidRuntime"The app should open the settings surface without a crash. CI also exposes the
manual Android Emulator Smoke workflow for this settings-launch check.
After the smoke launch, continue with the manual QA flow in
QA_CHECKLISTS.md for any user-facing behavior touched by
the change.
Benchmark-only APKs are opt-in and require a connected device:
.\gradlew.bat :app:assembleBenchmark :benchmark:assembleBenchmark
pwsh -NoProfile -ExecutionPolicy Bypass -File .\tools\benchmark-ime-first-render.ps1 -Iterations 5
pwsh -NoProfile -ExecutionPolicy Bypass -File .\tools\benchmark-ime-suggestion-latency.ps1 -Iterations 5
pwsh -NoProfile -ExecutionPolicy Bypass -File .\tools\benchmark-ime-dictionary-load.ps1 -Iterations 5
pwsh -NoProfile -ExecutionPolicy Bypass -File .\tools\benchmark-ime-candidate-row.ps1 -Iterations 5
pwsh -NoProfile -ExecutionPolicy Bypass -File .\tools\benchmark-ime-theme-switch.ps1 -Iterations 5
pwsh -NoProfile -ExecutionPolicy Bypass -File .\tools\benchmark-backup-restore.ps1 -Iterations 5
python .\scripts\check-benchmark-trends.py --baseline-dir .\docs\benchmark-results --candidate-dir .\build\benchmark-results --report .\build\benchmark-results\benchmark-trend-report.md --require-all-baselinesCommit new JSON baselines under docs/benchmark-results/ only when the
roadmap or release notes explicitly call for new performance evidence.