On Android, the soft keyboard keeps viewInsets.bottom non-zero while the search TextField is focused. ListView.builder is allocated near-zero height and renders 0 items, so find.text(subject) always finds nothing even though the IMAP search returned results. Unfocusing the primary focus after enterText dismisses the keyboard and gives the results list full body height before pumpUntil starts polling. Also fix pumpUntil to use pump(300ms) instead of pumpAndSettle() so a continuously-running animation (spinner under CPU load) never prevents settling, and override accountConnectionStatusProvider so _AccountTile never shows a CircularProgressIndicator during the test. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
187 lines
6.0 KiB
YAML
187 lines
6.0 KiB
YAML
version: "3"
|
|
silent: true
|
|
|
|
tasks:
|
|
default:
|
|
desc: Run all checks (analyze + unit tests + widget tests + integration, in parallel)
|
|
deps: [check]
|
|
|
|
_preflight:
|
|
internal: true
|
|
run: once
|
|
preconditions:
|
|
- sh: test "${DIRENV_DIR#-}" = "{{.TASKFILE_DIR}}"
|
|
msg: "Not in nix dev shell. Run: nix develop"
|
|
cmds:
|
|
- scripts/silent_on_success.sh pre-commit install
|
|
|
|
_flutter-check:
|
|
internal: true
|
|
run: once
|
|
deps: [_preflight]
|
|
cmds:
|
|
- cmd: scripts/silent_on_success.sh fvm install --skip-pub-get
|
|
|
|
_pub-get:
|
|
internal: true
|
|
run: once
|
|
deps: [_flutter-check]
|
|
cmds:
|
|
- scripts/silent_on_success.sh fvm flutter pub get --suppress-analytics
|
|
|
|
_linux-deps-check:
|
|
internal: true
|
|
run: once
|
|
preconditions:
|
|
- sh: command -v clang >/dev/null 2>&1
|
|
msg: "Linux desktop deps missing. Run: sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev libstdc++-12-dev"
|
|
- sh: /usr/bin/pkg-config --exists gtk+-3.0 2>/dev/null
|
|
msg: "Linux desktop deps missing. Run: sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev libstdc++-12-dev"
|
|
|
|
install-hooks:
|
|
desc: Install pre-commit hooks (requires pre-commit; see .pre-commit-config.yaml)
|
|
cmds:
|
|
- pre-commit install
|
|
|
|
_codegen:
|
|
internal: true
|
|
run: once
|
|
deps: [_pub-get]
|
|
cmds:
|
|
- scripts/silent_on_success.sh fvm flutter pub run build_runner build --delete-conflicting-outputs
|
|
|
|
codegen:
|
|
desc: Generate Drift DB code (run after any schema change)
|
|
deps: [_preflight, _pub-get]
|
|
cmds:
|
|
- fvm flutter pub run build_runner build --delete-conflicting-outputs
|
|
|
|
analyze:
|
|
desc: Static analysis (flutter analyze)
|
|
deps: [_preflight, _codegen]
|
|
cmds:
|
|
- scripts/run_analyze.sh
|
|
|
|
format:
|
|
desc: Format all Dart source files
|
|
deps: [_preflight]
|
|
cmds:
|
|
- fvm dart format .
|
|
|
|
analyze-fix:
|
|
desc: Auto-fix lint issues with dart fix --apply
|
|
deps: [_preflight]
|
|
cmds:
|
|
- fvm dart fix --apply
|
|
|
|
test:
|
|
desc: Unit tests + coverage gate (fails if any non-excluded lib/ file is missing)
|
|
deps: [_preflight, _codegen]
|
|
cmds:
|
|
- scripts/run_unit_tests.sh
|
|
|
|
test-widget:
|
|
desc: Widget tests — headless, no display or network required
|
|
deps: [_preflight, _codegen]
|
|
cmds:
|
|
- scripts/run_widget_tests.sh
|
|
|
|
test-flutter:
|
|
desc: Full Flutter test suite (unit + widget + integration)
|
|
deps: [_preflight]
|
|
cmds:
|
|
- fvm flutter test
|
|
|
|
integration:
|
|
desc: Integration tests against a local Stalwart mail server
|
|
deps: [_flutter-check]
|
|
cmds:
|
|
- stalwart-dev/test.sh
|
|
|
|
integration-ui:
|
|
desc: UI E2E tests on Linux via Xvfb — headless, no emulator needed
|
|
deps: [_preflight, _linux-deps-check, _pub-get]
|
|
cmds:
|
|
- stalwart-dev/integration_ui_test.sh
|
|
|
|
integration-android:
|
|
desc: UI integration tests on a connected Android emulator (Stalwart on host, emulator reaches it via 10.0.2.2)
|
|
deps: [_preflight, _android-sdk-check]
|
|
cmds:
|
|
- stalwart-dev/integration_android_test.sh
|
|
|
|
build-linux:
|
|
desc: Build the Linux desktop app (debug)
|
|
deps: [_preflight, _linux-deps-check, _codegen]
|
|
cmds:
|
|
- scripts/silent_on_success.sh fvm flutter build linux --debug --no-pub
|
|
|
|
_android-sdk-check:
|
|
internal: true
|
|
run: once
|
|
preconditions:
|
|
- sh: test -d "${ANDROID_HOME:-$HOME/Android/Sdk}"
|
|
msg: |
|
|
Android SDK not found. Install it with:
|
|
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O /tmp/cmdtools.zip
|
|
mkdir -p ~/Android/Sdk/cmdline-tools
|
|
unzip /tmp/cmdtools.zip -d ~/Android/Sdk/cmdline-tools
|
|
mv ~/Android/Sdk/cmdline-tools/cmdline-tools ~/Android/Sdk/cmdline-tools/latest
|
|
~/Android/Sdk/cmdline-tools/latest/bin/sdkmanager "platform-tools" "build-tools;34.0.0" "platforms;android-34"
|
|
- sh: ls "${ANDROID_HOME:-$HOME/Android/Sdk}/platforms/" 2>/dev/null | grep -qE '^android-([3-9][4-9]|[4-9][0-9]|[1-9][0-9]{2,})$'
|
|
msg: |
|
|
Android platform 34 or higher not found. Install it with:
|
|
${ANDROID_HOME:-$HOME/Android/Sdk}/cmdline-tools/latest/bin/sdkmanager "build-tools;34.0.0" "platforms;android-34"
|
|
|
|
build-android:
|
|
desc: Build a release APK and run a MobSF security scan
|
|
deps: [_preflight, _android-sdk-check, _pub-get]
|
|
cmds:
|
|
- ANDROID_HOME=${ANDROID_HOME:-$HOME/Android/Sdk} fvm flutter build apk --release --no-pub | grep -Ev "was tree-shaken|Tree-shaking can be disabled"
|
|
- scripts/mobsf_scan.sh
|
|
|
|
mobsf-stop:
|
|
desc: Stop the MobSF Docker container (started automatically by build-android)
|
|
cmds:
|
|
- docker stop mobsf-sharedinbox 2>/dev/null || true
|
|
|
|
deploy-android:
|
|
desc: Build release APK and upload via scp to $ANDROID_APK_SCP_USER@$ANDROID_APK_SCP_HOST:$ANDROID_APK_SCP_PATH
|
|
deps: [check, build-android]
|
|
dotenv: [".env"]
|
|
cmds:
|
|
# integration-android runs after check (not in parallel) so the two E2E
|
|
# test suites don't compete for CPU and slow the Android emulator.
|
|
- task: integration-android
|
|
- scripts/deploy_android.sh
|
|
|
|
run:
|
|
desc: Run the app on Linux desktop
|
|
deps: [_preflight, _linux-deps-check, _pub-get]
|
|
cmds:
|
|
- fvm flutter run -d linux --no-pub
|
|
|
|
run-android:
|
|
desc: Run the app on a connected Android emulator (boots sharedinbox_test AVD if needed)
|
|
deps: [_preflight, _android-sdk-check, _pub-get]
|
|
cmds:
|
|
- stalwart-dev/run_android.sh
|
|
|
|
coverage:
|
|
desc: Coverage gate — run after test (and optionally integration) have written lcov.info
|
|
deps: [_preflight]
|
|
cmds:
|
|
- fvm dart run scripts/check_coverage.dart
|
|
|
|
check-fast:
|
|
desc: Pre-commit checks — analyze + unit tests + widget tests (no build, no integration)
|
|
deps: [analyze, test, test-widget]
|
|
|
|
check:
|
|
desc: Full check suite — unit tests first, then integration (merges coverage), then gate
|
|
deps: [analyze, test-widget, build-linux, test]
|
|
cmds:
|
|
- task: integration
|
|
- task: integration-ui
|
|
- task: coverage
|