import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; void main() { const qualityWorkflows = [ '.github/workflows/flutter-dev.yml', '.github/workflows/flutter-main.yml', '.github/workflows/build-android.yml', '.github/workflows/build-android-fcm.yml', ]; test('build workflows run formatting, analysis and tests', () { for (final path in qualityWorkflows) { final workflow = File(path).readAsStringSync(); expect( workflow, contains('dart format --output=none --set-exit-if-changed lib test'), ); expect(workflow, contains('flutter analyze --no-fatal-infos lib test')); expect(workflow, contains('flutter test')); } }); test('pull request CI produces coverage', () { for (final path in [ '.github/workflows/flutter-dev.yml', '.github/workflows/flutter-main.yml', ]) { final workflow = File(path).readAsStringSync(); expect(workflow, contains('flutter test --coverage')); expect(workflow, contains('coverage/lcov.info')); } }); test('dependency and Android smoke workflows stay enabled', () { final security = File( '.github/workflows/osv-scanner.yml', ).readAsStringSync(); final smoke = File( '.github/workflows/android-smoke.yml', ).readAsStringSync(); expect(security, contains('osv-scanner-reusable.yml@v2.5.0')); expect(security, contains('--lockfile=./pubspec.lock')); expect(smoke, contains('android-emulator-runner@v2')); expect(smoke, contains('adb shell pidof ru.ikar.app')); }); }