ci: add multi-platform workflows and accessibility testing#770
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Adds per-OS GitHub Actions workflows (Linux, Windows, Android, iOS) and a dedicated accessibility-test workflow, plus the supporting changes that make those workflows succeed: an Android signing fallback when key.properties is absent, a device_info_plus version pin for iOS compatibility, a small HistoryTask.clear signature fix to match the updated ListenerListEvent API, and a new test/accessibility/accessibility_test.dart covering tooltip labels on SelectionActionBar and IconText.
Changes:
- New workflows for Linux/Windows/Android/iOS (test + build with artifact upload) and a separate accessibility-test workflow, all gated on a shared
NON_BLOCKING_TESTS_JSONlist of legacy tests run withcontinue-on-error. - Android release signing now falls back to debug signing when no keystore is configured; iOS-compat pin of
device_info_plusto12.3.0. - Adds
test/accessibility/accessibility_test.dartand fixesHistoryTask.clearto match the abstractListenerListEvent.clear(List<T> items)signature.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
.github/workflows/flutter-linux.yml |
New Linux test + desktop build workflow with artifact upload. |
.github/workflows/flutter-windows.yml |
New Windows test + desktop build workflow with artifact upload. |
.github/workflows/flutter-android.yml |
New Android test + APK build workflow (builds debug APK). |
.github/workflows/flutter-ios.yml |
New iOS test + unsigned release build workflow. |
.github/workflows/flutter-accessibility.yml |
New workflow running only the new accessibility test file. |
test/accessibility/accessibility_test.dart |
New widget tests checking tooltip labels and tap-target guidelines. |
pubspec.yaml |
Pins device_info_plus to 12.3.0 for iOS compatibility. |
android/app/build.gradle |
Adds hasReleaseSigning fallback so release builds use debug signing when no keystore is present; debug build now uses debug keys. |
lib/storage/histories.dart |
Fixes HistoryTask.clear to take List<HttpRequest> items, matching the base class. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| linux-test: | ||
| name: Flutter test (Linux) | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 30 | ||
|
|
||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: Set up Flutter | ||
| uses: subosito/flutter-action@v2 | ||
| with: | ||
| channel: stable | ||
| cache: true | ||
|
|
||
| - name: Show Flutter version | ||
| run: flutter --version | ||
|
|
||
| - name: Install dependencies | ||
| run: flutter pub get | ||
|
|
||
| - name: Run stable tests | ||
| shell: pwsh | ||
| run: | | ||
| $nonBlockingTests = ConvertFrom-Json '${{ env.NON_BLOCKING_TESTS_JSON }}' | ||
| $allTests = Get-ChildItem -Path test -Filter *.dart -File | Sort-Object Name | ForEach-Object { "test/$($_.Name)" } | ||
| $stableTests = $allTests | Where-Object { $_ -notin $nonBlockingTests } | ||
| Write-Host "Running stable tests:" | ||
| $stableTests | ForEach-Object { Write-Host $_ } | ||
| & flutter test @stableTests | ||
|
|
||
| - name: Run non-blocking legacy tests | ||
| shell: pwsh | ||
| continue-on-error: true | ||
| run: | | ||
| $nonBlockingTests = ConvertFrom-Json '${{ env.NON_BLOCKING_TESTS_JSON }}' | ||
| Write-Host "Running non-blocking tests:" | ||
| $nonBlockingTests | ForEach-Object { Write-Host $_ } | ||
| & flutter test @nonBlockingTests |
| push: | ||
| pull_request: |
| run: flutter build apk --debug | ||
|
|
||
| - name: Upload Android APK | ||
| uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: proxypin-android-apk | ||
| path: build/app/outputs/flutter-apk/app-debug.apk |
| flutter_highlight: ^0.7.0 | ||
| flutter_desktop_context_menu: ^0.2.0 | ||
| device_info_plus: ^12.4.0 | ||
| device_info_plus: 12.3.0 |
| if (keystorePropertiesFile.exists()) { | ||
| keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) | ||
| } | ||
| def hasReleaseSigning = keystoreProperties['storeFile'] |
| expect(find.byTooltip('Repeat'), findsOneWidget); | ||
| expect(find.byTooltip('Export'), findsOneWidget); | ||
| expect(find.byTooltip('Delete'), findsOneWidget); | ||
| expect(find.byTooltip('Cancel'), findsOneWidget); | ||
|
|
||
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | ||
| }); | ||
|
|
||
| testWidgets('toolbox action keeps an accessible label', (tester) async { | ||
| await _pumpLocalizedApp( | ||
| tester, | ||
| child: Center( | ||
| child: IconText( | ||
| icon: Icons.code, | ||
| text: 'JavaScript', | ||
| tooltip: 'JavaScript', | ||
| onTap: () {}, | ||
| ), | ||
| ), | ||
| ); | ||
|
|
||
| expect(find.byTooltip('JavaScript'), findsOneWidget); |
| shell: pwsh | ||
| run: | | ||
| $nonBlockingTests = ConvertFrom-Json '${{ env.NON_BLOCKING_TESTS_JSON }}' | ||
| $allTests = Get-ChildItem -Path test -Filter *.dart -File | Sort-Object Name | ForEach-Object { "test/$($_.Name)" } |
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Addressed the Copilot review in 5b15414:\n\n- keep Flutter tests in the Linux workflow only to avoid duplicate cross-OS test runs\n- restrict push triggers to main across the new workflows\n- recurse test discovery in Linux while keeping est/accessibility/** in its dedicated workflow\n- build and upload a release Android APK so CI exercises the signing fallback\n- make the Android signing guard explicit, relax the device_info_plus pin to a bounded range with an iOS CI note, and align accessibility assertions with localization values |
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Summary
Notes