mirror of
https://github.com/kuhyx/utils.git
synced 2026-11-10 20:47:15 +01:00
todo, home_inventory, diet-guard and wake-alarm each carried the OAuth device-flow client and the modal that drives it -- ~650 lines, with two pairs byte-for-byte identical (todo/home_inventory's clients, and diet-guard/wake-alarm's dialogs). Deliberately its own package rather than part of `sync_settings_ui`. That package is Firebase-only by an explicit 2026-08-12 decision recorded as "do not re-add a GitHub section without kuhy asking again", so folding a GitHub flow into it would reverse a standing decision. The GitHub mirror in these apps is legacy-but-load-bearing code that was explicitly not authorised for deletion, so it gets its own home instead of being merged into the Firebase path or dropped. One behaviour change, made once here instead of four times: the dialog catches `on Object`, not `on Exception`. An `Error` is not an `Exception` in Dart, so `ArgumentError` -- notably from URI parsing -- escaped `_poll()` and left the dialog spinning on "Waiting for authorization…" forever with nothing shown. That is the same trap that silently killed the Firebase sync tick across these apps in 2026-08. A test pins it with a mock that throws an Error rather than an Exception, so it cannot regress back to `on Exception` unnoticed. 20 tests, 100% line coverage, clean under very_good_analysis, with the same CI gate the other Dart package holds. Consumers are migrated separately so each app's own suite gates its own swap. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U4Rj3s7K2qzrLNgJqqPhno
37 lines
743 B
YAML
37 lines
743 B
YAML
name: github_device_auth tests
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
paths: ['github_device_auth/**']
|
|
pull_request:
|
|
branches: [main]
|
|
paths: ['github_device_auth/**']
|
|
|
|
jobs:
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
defaults:
|
|
run:
|
|
working-directory: github_device_auth
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Set up Flutter
|
|
uses: subosito/flutter-action@v2
|
|
with:
|
|
channel: stable
|
|
|
|
- name: Install dependencies
|
|
run: flutter pub get
|
|
|
|
- name: Analyze
|
|
run: flutter analyze
|
|
|
|
- name: Run tests with coverage
|
|
run: flutter test --coverage
|
|
|
|
- name: Enforce 100% line coverage
|
|
run: scripts/check_coverage.sh coverage/lcov.info 100
|