From c4c1465ed30269aba3c86b259106f73faaeea203 Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Tue, 24 Nov 2020 16:01:23 -0500 Subject: [PATCH 1/5] chore: add aggregate build targets to melos.yaml --- melos.yaml | 61 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 9 deletions(-) diff --git a/melos.yaml b/melos.yaml index 222dac10463f..3b8c938249bd 100644 --- a/melos.yaml +++ b/melos.yaml @@ -4,6 +4,10 @@ packages: - packages/** scripts: + lint:all: + run: melos run analyze && melos run format + description: Run all static analysis checks + analyze: run: | melos exec -c 5 --fail-fast -- \ @@ -19,6 +23,11 @@ scripts: - Requires `flutter_plugin_tools` (`pub global activate flutter_plugin_tools`). - Requires `clang-format` (can be installed via Brew on macOS). + build:all: + run: | + melos run build:example_ios_pub --no-select && melos run build:example_android_pub --no-select && melos bootstrap + description: Build all example apps (currently ios and android, macos requires flutter channel master) + build:example_android: run: | melos exec -c 1 --fail-fast -- \ @@ -27,7 +36,20 @@ scripts: select-package: dir-exists: - android - scope: '*example*' + scope: "*example*" + + # melos bootstrap does not generate all files generated by a build that runs + # `pub get`, and `flutter drive` does not either, so it is still necessary to + # build sometimes without the `--no-pub` switch. Careful: `melos bootstrap` after. + build:example_android_pub: + run: | + melos exec -c 6 --fail-fast -- \ + "flutter build apk" + description: Build a specific example app for Android. + select-package: + dir-exists: + - android + scope: "*example*" build:example_ios: run: | @@ -37,7 +59,20 @@ scripts: select-package: dir-exists: - ios - scope: '*example*' + scope: "*example*" + + # melos bootstrap does not generate all files generated by a build that runs + # `pub get`, and `flutter drive` does not either, so it is still necessary to + # build sometimes without the `--no-pub` switch. Careful: `melos bootstrap` after. + build:example_ios_pub: + run: | + melos exec -c 6 --fail-fast -- \ + "flutter build ios --no-codesign" + description: Build a specific example app for iOS. + select-package: + dir-exists: + - ios + scope: "*example*" build:example_macos: run: | @@ -50,7 +85,11 @@ scripts: select-package: dir-exists: - macos - scope: '*example*' + scope: "*example*" + + test:all: + run: melos run test && melos run test:mobile_e2e + description: Run all tests available on stable channel test: run: | @@ -61,8 +100,8 @@ scripts: dir-exists: - test ignore: - - '*web*' - - '*example*' + - "*web*" + - "*example*" test:web: run: | @@ -72,7 +111,7 @@ scripts: select-package: dir-exists: - test - scope: '*web*' + scope: "*web*" test:mobile_e2e: run: | @@ -84,7 +123,7 @@ scripts: select-package: dir-exists: - test_driver - scope: '*example*' + scope: "*example*" test:web_e2e: run: | @@ -99,7 +138,7 @@ scripts: dir-exists: - web - test_driver - scope: '*example*' + scope: "*example*" test:macos_e2e: run: | @@ -113,12 +152,16 @@ scripts: dir-exists: - macos - test_driver - scope: '*example*' + scope: "*example*" # Additional cleanup lifecycle script, executed when `melos clean` is ran. postclean: > melos exec -c 5 -- "flutter clean" + # Run all targets generally exected in CI for a full local quality check + qualitycheck: > + melos run lint:all && melos run build:all && melos run test:all + dev_dependencies: pedantic: 1.8.0 From 1fc69edbc1583b6dbf02e05fd8c0d65e3806f5cd Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Tue, 24 Nov 2020 17:30:06 -0500 Subject: [PATCH 2/5] test(e2e): ignore ml custom, admob and ml_vision examples also add parallelism to melos targets for full machine utilization during local quality checks - firebase_ml_custom currently has an intractable build error due to tflite plugin needing TensorFlowLiteC 2.2.0 while up to date FirebaseMLVision needs 2.3.0 - firebase_admob and firebase_ml_vision do not have e2e tests for their examples --- melos.yaml | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/melos.yaml b/melos.yaml index 3b8c938249bd..582c671006a1 100644 --- a/melos.yaml +++ b/melos.yaml @@ -30,13 +30,14 @@ scripts: build:example_android: run: | - melos exec -c 1 --fail-fast -- \ + melos exec -c 6 --fail-fast -- \ "flutter build apk --no-pub" description: Build a specific example app for Android. select-package: dir-exists: - android scope: "*example*" + ignore: "*firebase_ml_custom*" # melos bootstrap does not generate all files generated by a build that runs # `pub get`, and `flutter drive` does not either, so it is still necessary to @@ -50,16 +51,18 @@ scripts: dir-exists: - android scope: "*example*" + ignore: "*firebase_ml_custom*" build:example_ios: run: | - melos exec -c 1 --fail-fast -- \ + melos exec -c 6 --fail-fast -- \ "flutter build ios --no-codesign --no-pub" description: Build a specific example app for iOS. select-package: dir-exists: - ios scope: "*example*" + ignore: "*firebase_ml_custom*" # melos bootstrap does not generate all files generated by a build that runs # `pub get`, and `flutter drive` does not either, so it is still necessary to @@ -73,10 +76,11 @@ scripts: dir-exists: - ios scope: "*example*" + ignore: "*firebase_ml_custom*" build:example_macos: run: | - melos exec -c 1 --fail-fast -- \ + melos exec -c 6 --fail-fast -- \ "flutter build macos --no-pub" description: | Build a specific example app for macOS. @@ -88,12 +92,12 @@ scripts: scope: "*example*" test:all: - run: melos run test && melos run test:mobile_e2e + run: melos run test --no-select && melos run test:mobile_e2e --no-select description: Run all tests available on stable channel test: run: | - melos exec -c 1 --fail-fast -- \ + melos exec -c 6 --fail-fast -- \ "flutter test --no-pub" description: Run `flutter test` for a specific package. select-package: @@ -116,7 +120,7 @@ scripts: test:mobile_e2e: run: | melos exec -c 1 --fail-fast -- \ - "flutter drive --no-pub --target=./test_driver/MELOS_PARENT_PACKAGE_NAME_e2e.dart" + "flutter drive --target=./test_driver/MELOS_PARENT_PACKAGE_NAME_e2e.dart" description: | Run all Android or iOS test driver e2e tests in a specific example app. - Requires an Android emulator or iOS simulator. @@ -124,6 +128,10 @@ scripts: dir-exists: - test_driver scope: "*example*" + ignore: + - "*firebase_ml_custom*" + - "*firebase_ml_vision*" + - "*firebase_admob*" test:web_e2e: run: | @@ -156,7 +164,7 @@ scripts: # Additional cleanup lifecycle script, executed when `melos clean` is ran. postclean: > - melos exec -c 5 -- "flutter clean" + melos exec -c 6 -- "flutter clean" # Run all targets generally exected in CI for a full local quality check qualitycheck: > From 8430892210ce766630d340cbb5c529ee2043e4ce Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Wed, 25 Nov 2020 18:26:08 -0500 Subject: [PATCH 3/5] fix(firestore, messaging): loosen core dev dep semver range to ^2 --- .../firebase_messaging_platform_interface/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/firebase_messaging/firebase_messaging_platform_interface/pubspec.yaml b/packages/firebase_messaging/firebase_messaging_platform_interface/pubspec.yaml index 3d0857988739..c1d96d5d7312 100644 --- a/packages/firebase_messaging/firebase_messaging_platform_interface/pubspec.yaml +++ b/packages/firebase_messaging/firebase_messaging_platform_interface/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: plugin_platform_interface: ^1.0.0 dev_dependencies: - firebase_core_platform_interface: ">=2.0.0 <2.1.0" + firebase_core_platform_interface: ^2.0.0 pedantic: ^1.8.0 flutter_test: sdk: flutter From dea562888ab9fabc7908fc98e34205c765d1b5b3 Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Sat, 28 Nov 2020 14:28:27 -0500 Subject: [PATCH 4/5] chore(build): add clean:deep target for melos The intention is to easily return to a fresh-checkout status so that developers can verify their environment will roughly match CI when it runs, and thus expose any local problems Incidentally, local example Podfiles are deleted here, as they are the source of CI-versus-local-environment differences and ensuing CI failures --- melos.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/melos.yaml b/melos.yaml index 582c671006a1..75c6507d9c80 100644 --- a/melos.yaml +++ b/melos.yaml @@ -162,13 +162,17 @@ scripts: - test_driver scope: "*example*" + # Clean things very deeply, can be used to establish "pristine checkout" status + clean:deep: > + git clean -x -d -f -q + # Additional cleanup lifecycle script, executed when `melos clean` is ran. postclean: > melos exec -c 6 -- "flutter clean" # Run all targets generally exected in CI for a full local quality check qualitycheck: > - melos run lint:all && melos run build:all && melos run test:all + melos run clean:deep && melos clean && melos bootstrap && melos run lint:all && melos run build:all && melos run test:all dev_dependencies: pedantic: 1.8.0 From 1254de7dcc38cbc9789b097765aba054f74b80e8 Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Tue, 24 Nov 2020 16:00:30 -0500 Subject: [PATCH 5/5] fix(ml_vision): build fixes for android BoM 25.13.0 --- packages/firebase_ml_vision/android/build.gradle | 14 ++++++++++++-- .../example/android/app/build.gradle | 13 +++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/packages/firebase_ml_vision/android/build.gradle b/packages/firebase_ml_vision/android/build.gradle index 3d4064a9384a..05eecc2543da 100644 --- a/packages/firebase_ml_vision/android/build.gradle +++ b/packages/firebase_ml_vision/android/build.gradle @@ -32,8 +32,18 @@ android { disable 'InvalidPackage' } dependencies { - api 'com.google.firebase:firebase-ml-vision:20.0.0' - implementation 'com.google.firebase:firebase-common:16.1.0' + implementation platform("com.google.firebase:firebase-bom:25.13.0") + implementation 'com.google.firebase:firebase-common' + api "com.google.firebase:firebase-ml-vision" + + implementation 'com.google.android.gms:play-services-vision:20.1.1' + implementation 'com.google.android.gms:play-services-vision-common:19.1.1' + implementation 'com.google.android.gms:play-services-vision-face-contour-internal:16.0.3' + implementation 'com.google.android.gms:play-services-vision-image-labeling-internal:16.0.5' + implementation 'com.google.android.gms:play-services-vision-image-label:18.0.5' + implementation 'com.google.firebase:firebase-ml-vision-face-model:20.0.2' + implementation 'com.google.firebase:firebase-ml-model-interpreter:22.0.4' + implementation 'androidx.annotation:annotation:1.0.0' implementation 'androidx.exifinterface:exifinterface:1.0.0' } diff --git a/packages/firebase_ml_vision/example/android/app/build.gradle b/packages/firebase_ml_vision/example/android/app/build.gradle index f0816d5b369e..973a5aff6a17 100644 --- a/packages/firebase_ml_vision/example/android/app/build.gradle +++ b/packages/firebase_ml_vision/example/android/app/build.gradle @@ -47,8 +47,17 @@ android { } dependencies { - api 'com.google.firebase:firebase-ml-vision-image-label-model:17.0.2' - api 'com.google.firebase:firebase-ml-vision-face-model:17.0.2' + + implementation platform("com.google.firebase:firebase-bom:25.13.0") + implementation "com.google.firebase:firebase-ml-vision" + + implementation 'com.google.android.gms:play-services-vision:20.1.1' + implementation 'com.google.android.gms:play-services-vision-common:19.1.1' + implementation 'com.google.android.gms:play-services-vision-face-contour-internal:16.0.3' + implementation 'com.google.android.gms:play-services-vision-image-labeling-internal:16.0.5' + implementation 'com.google.android.gms:play-services-vision-image-label:18.0.5' + implementation 'com.google.firebase:firebase-ml-vision-face-model:20.0.2' + implementation 'com.google.firebase:firebase-ml-model-interpreter:22.0.4' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test:rules:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'