Skip to content

Latest commit

 

History

History
103 lines (79 loc) · 4.62 KB

File metadata and controls

103 lines (79 loc) · 4.62 KB

SwiftFloris Local Verification

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.

Standard Local Gate

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:assembleDebug

check-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.md section or release evidence.
  • For docs-only releases, state the clarified workflow instead of implying product behavior changed.

Expected result:

  • verifyNoInternetPermission fails if any app manifest adds INTERNET or equivalent network permissions.
  • check-repo-hygiene.sh fails if generated build/report output is tracked or local Markdown deletions still need classification.
  • testDebugUnitTest passes the JVM policy, parser, trust-state, accessibility, and screenshot-host tests.
  • verifyRoborazziDebug hard-fails if committed screenshot baselines drift.
  • verifyRoborazziRelease runs the non-shipping releaseRoborazzi variant and should pass before publishing a tag or release APK.
  • lintDebug writes app/build/reports/lint-results-debug.*. Any lint-baseline drift must be resolved in the same change that fixes the underlying warning.
  • assembleDebug produces app/build/outputs/apk/debug/app-debug.apk.

CI Lint Drift Wrapper

GitHub Actions runs:

bash scripts/run-lint-debug-with-baseline-check.sh

The 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.

Device Smoke

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.

Performance Baselines

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-baselines

Commit new JSON baselines under docs/benchmark-results/ only when the roadmap or release notes explicitly call for new performance evidence.