Files
sharedinbox/Taskfile.yml
T
Thomas GüttlerandClaude Sonnet 4.6 a2d98ed9bc fix: Android E2E search — unfocus IME keyboard before polling results
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>
2026-04-26 22:31:25 +02:00

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