Split upgrader into a Flutter package and Dart-only upgrader_core workspace#555
Draft
Copilot wants to merge 1 commit into
Draft
Split upgrader into a Flutter package and Dart-only upgrader_core workspace#555Copilot wants to merge 1 commit into
Copilot wants to merge 1 commit into
Conversation
Copilot created this pull request from a session on behalf of
larryaasen
June 27, 2026 15:30
View session
Contributor
There was a problem hiding this comment.
Pull request overview
This PR restructures the repository into a Dart workspace/monorepo, keeping upgrader as the Flutter-facing package while extracting store lookups and upgrade decision logic into a new Dart-only upgrader_core package.
Changes:
- Converted the repo root into a Dart workspace and split code into
packages/upgrader(Flutter) +packages/upgrader_core(Dart-only). - Added
upgrader_corepublic APIs (state/platform/store interfaces) and re-exported selected core symbols throughupgrader. - Re-homed/expanded tests and the Flutter example app under the new package layout.
Reviewed changes
Copilot reviewed 53 out of 249 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| README.md | Notes the new monorepo/workspace layout. |
| pubspec.yaml | Converts repo root into a non-publishable workspace definition. |
| analysis_options.yaml | Adjusts root lints after workspace split. |
| .gitignore | Stops ignoring packages/ so workspace packages are committed. |
| lib/upgrader.dart | Removes root-level library entrypoint after moving package to packages/upgrader. |
| packages/upgrader/pubspec.yaml | Defines the Flutter upgrader package and depends on upgrader_core. |
| packages/upgrader/LICENSE | Adds package-local license for upgrader. |
| packages/upgrader/analysis_options.yaml | Adds Flutter lints config for the upgrader package. |
| packages/upgrader/lib/upgrader.dart | Re-exports selected upgrader_core APIs + Flutter widgets/facade APIs. |
| packages/upgrader/lib/src/upgrader_version_info.dart | Re-export shim for UpgraderVersionInfo from core. |
| packages/upgrader/lib/src/upgrade_store_controller.dart | Re-export shim for store controller/store types from core. |
| packages/upgrader/lib/src/upgrade_state.dart | Adds adapter to convert Flutter UpgraderState into core UpgraderState. |
| packages/upgrader/lib/src/upgrade_os.dart | Adds mapping extension from Flutter OS abstraction to core platform model. |
| packages/upgrader/lib/src/play_store_search_api.dart | Re-export shim for Play Store lookup types from core. |
| packages/upgrader/lib/src/itunes_search_api.dart | Re-export shim for iTunes lookup types from core. |
| packages/upgrader/lib/src/appcast.dart | Re-export shim for Appcast types from core. |
| packages/upgrader/lib/src/alert_style_widget.dart | Introduces dialog layout widget used by UI components. |
| packages/upgrader/test/upgrader_test.dart | Updates test support imports after refactor. |
| packages/upgrader/test/fake_appcast.dart | Updates test support imports after refactor. |
| packages/upgrader/test/appcast_test_support.dart | Adds shared Appcast test helpers for upgrader tests. |
| packages/upgrader/test/upgrade_messages_test.dart | Adds tests for UpgraderMessages behavior. |
| packages/upgrader/test/upgrade_alert_test.dart | Adds widget tests for UpgradeAlert prompt visibility. |
| packages/upgrader/test/test_utils.dart | Adds widget wrappers/helpers for Flutter widget tests. |
| packages/upgrader/test/mock_play_store_client.dart | Adds Play Store HTTP mock client for Flutter-package tests. |
| packages/upgrader/test/mock_itunes_client.dart | Adds iTunes HTTP mock client for Flutter-package tests. |
| packages/upgrader/test/testappcastmulti.xml | Adds Appcast XML fixture for Flutter-package tests. |
| packages/upgrader/test/testappcast.xml | Adds Appcast XML fixture for Flutter-package tests. |
| packages/upgrader/test/testappcast-enclosure.xml | Adds Appcast XML fixture for Flutter-package tests. |
| packages/upgrader/test/testappcast_macos.xml | Adds Appcast XML fixture for Flutter-package tests. |
| packages/upgrader/test/testappcast_critical.xml | Adds Appcast XML fixture for Flutter-package tests. |
| packages/upgrader/example/pubspec.yaml | Adds the example app pubspec under packages/upgrader. |
| packages/upgrader/example/analysis_options.yaml | Adds lints config for the example app. |
| packages/upgrader/example/.metadata | Flutter tool metadata for the example app. |
| packages/upgrader/example/.gitignore | Example app ignore rules. |
| packages/upgrader/example/lib/main.dart | Example app entrypoint using UpgradeAlert. |
| packages/upgrader/example/lib/main_subclass.dart | Example showing subclassing Upgrader. |
| packages/upgrader/example/lib/main_stateful.dart | Example using UpgradeAlert in a StatefulWidget. |
| packages/upgrader/example/lib/main_multiple.dart | Example showing multiple UpgradeAlert usage. |
| packages/upgrader/example/lib/main_min_app_version.dart | Example showing min-app-version forcing. |
| packages/upgrader/example/lib/main_macos.dart | Example showing macOS appcast store usage. |
| packages/upgrader/example/lib/main_localized_rtl.dart | Example showing RTL localization setup. |
| packages/upgrader/example/lib/main_gorouter.dart | Example integration with go_router. |
| packages/upgrader/example/lib/main_driver.dart | Example driver-test harness app. |
| packages/upgrader/example/lib/main_dialog_key.dart | Example showing dialogKey usage. |
| packages/upgrader/example/lib/main_custom_card.dart | Example showing custom upgrade card. |
| packages/upgrader/example/lib/main_custom_alert.dart | Example showing custom alert dialog override. |
| packages/upgrader/example/lib/main_cupertinoapp.dart | Example using CupertinoApp. |
| packages/upgrader/example/lib/main_cupertino.dart | Example showing Cupertino dialog style. |
| packages/upgrader/example/lib/main_card.dart | Example showing UpgradeCard. |
| packages/upgrader/example/lib/main_card_updated.dart | Example showing runtime message updates for card. |
| packages/upgrader/example/lib/main_card_theme.dart | Example showing themed upgrade card. |
| packages/upgrader/example/lib/main_appcast.dart | Example showing appcast store usage and OS-version parsing. |
| packages/upgrader/example/lib/main_alert_theme.dart | Example showing themed alert dialog override. |
| packages/upgrader/example/lib/main_alert_again.dart | Example showing shorter “alert again” duration. |
| packages/upgrader/example/test/driver_test/driver.dart | Flutter Driver extension bootstrap for example integration tests. |
| packages/upgrader/example/test/driver_test/driver_test.dart | Flutter Driver test suite for the example app. |
| packages/upgrader/example/web/manifest.json | Web manifest for example app. |
| packages/upgrader/example/web/index.html | Web host page for example app. |
| packages/upgrader/example/web/favicon.png | Web favicon asset for example app. |
| packages/upgrader/example/windows/.gitignore | Windows example ignore rules. |
| packages/upgrader/example/windows/CMakeLists.txt | Windows CMake configuration for example app. |
| packages/upgrader/example/windows/flutter/CMakeLists.txt | Flutter-generated Windows build glue. |
| packages/upgrader/example/windows/flutter/generated_plugins.cmake | Generated plugin linkage (Windows). |
| packages/upgrader/example/windows/flutter/generated_plugin_registrant.h | Generated plugin registrant header (Windows). |
| packages/upgrader/example/windows/flutter/generated_plugin_registrant.cc | Generated plugin registrant impl (Windows). |
| packages/upgrader/example/windows/runner/CMakeLists.txt | Windows runner build config. |
| packages/upgrader/example/windows/runner/Runner.rc | Windows runner resources. |
| packages/upgrader/example/windows/runner/runner.exe.manifest | Windows manifest for DPI/compat settings. |
| packages/upgrader/example/windows/runner/resource.h | Windows resource IDs. |
| packages/upgrader/example/windows/runner/main.cpp | Windows runner entrypoint. |
| packages/upgrader/example/windows/runner/flutter_window.h | Windows Flutter window host interface. |
| packages/upgrader/example/windows/runner/flutter_window.cpp | Windows Flutter window host implementation. |
| packages/upgrader/example/windows/runner/win32_window.h | Win32 window abstraction for Windows runner. |
| packages/upgrader/example/windows/runner/utils.h | Windows runner utilities header. |
| packages/upgrader/example/windows/runner/utils.cpp | Windows runner utilities implementation. |
| packages/upgrader/example/linux/.gitignore | Linux example ignore rules. |
| packages/upgrader/example/linux/main.cc | Linux runner entrypoint. |
| packages/upgrader/example/linux/my_application.h | Linux GTK application wrapper header. |
| packages/upgrader/example/linux/my_application.cc | Linux GTK application wrapper implementation. |
| packages/upgrader/example/linux/flutter/CMakeLists.txt | Flutter-generated Linux build glue. |
| packages/upgrader/example/linux/flutter/generated_plugins.cmake | Generated plugin linkage (Linux). |
| packages/upgrader/example/linux/flutter/generated_plugin_registrant.h | Generated plugin registrant header (Linux). |
| packages/upgrader/example/linux/flutter/generated_plugin_registrant.cc | Generated plugin registrant impl (Linux). |
| packages/upgrader/example/macos/.gitignore | macOS example ignore rules. |
| packages/upgrader/example/macos/Podfile | CocoaPods config for macOS example. |
| packages/upgrader/example/macos/Runner/AppDelegate.swift | macOS runner app delegate. |
| packages/upgrader/example/macos/Runner/MainFlutterWindow.swift | macOS Flutter window host. |
| packages/upgrader/example/macos/Runner/Info.plist | macOS runner plist. |
| packages/upgrader/example/macos/Runner/DebugProfile.entitlements | macOS debug entitlements. |
| packages/upgrader/example/macos/Runner/Release.entitlements | macOS release entitlements. |
| packages/upgrader/example/macos/Runner/Configs/AppInfo.xcconfig | macOS app identity config. |
| packages/upgrader/example/macos/Runner/Configs/Debug.xcconfig | macOS debug config. |
| packages/upgrader/example/macos/Runner/Configs/Release.xcconfig | macOS release config. |
| packages/upgrader/example/macos/Runner/Configs/Warnings.xcconfig | macOS warning flags. |
| packages/upgrader/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json | macOS app icon catalog metadata. |
| packages/upgrader/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png | macOS app icon asset. |
| packages/upgrader/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png | macOS app icon asset. |
| packages/upgrader/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme | Xcode scheme for macOS runner. |
| packages/upgrader/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist | Xcode workspace checks (macOS). |
| packages/upgrader/example/macos/Runner.xcworkspace/contents.xcworkspacedata | Xcode workspace contents (macOS). |
| packages/upgrader/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist | Xcode workspace checks (macOS). |
| packages/upgrader/example/ios/.gitignore | iOS example ignore rules. |
| packages/upgrader/example/ios/Podfile | CocoaPods config for iOS example. |
| packages/upgrader/example/ios/Flutter/AppFrameworkInfo.plist | iOS Flutter framework plist. |
| packages/upgrader/example/ios/Flutter/Debug.xcconfig | iOS debug build config. |
| packages/upgrader/example/ios/Flutter/Release.xcconfig | iOS release build config. |
| packages/upgrader/example/ios/Flutter/ephemeral/flutter_lldbinit | Generated LLDB integration script config. |
| packages/upgrader/example/ios/Flutter/ephemeral/flutter_lldb_helper.py | Generated LLDB helper script. |
| packages/upgrader/example/ios/Runner/AppDelegate.swift | iOS runner app delegate. |
| packages/upgrader/example/ios/Runner/Info.plist | iOS runner plist. |
| packages/upgrader/example/ios/Runner/Runner-Bridging-Header.h | iOS bridging header. |
| packages/upgrader/example/ios/Runner/Base.lproj/Main.storyboard | iOS main storyboard. |
| packages/upgrader/example/ios/Runner/Base.lproj/LaunchScreen.storyboard | iOS launch screen storyboard. |
| packages/upgrader/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md | iOS launch asset documentation. |
| packages/upgrader/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png | iOS launch image asset. |
| packages/upgrader/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png | iOS launch image asset. |
| packages/upgrader/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png | iOS launch image asset. |
| packages/upgrader/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json | iOS launch image catalog metadata. |
| packages/upgrader/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png | iOS app icon asset. |
| packages/upgrader/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png | iOS app icon asset. |
| packages/upgrader/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png | iOS app icon asset. |
| packages/upgrader/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png | iOS app icon asset. |
| packages/upgrader/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png | iOS app icon asset. |
| packages/upgrader/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png | iOS app icon asset. |
| packages/upgrader/example/ios/Runner.xcworkspace/contents.xcworkspacedata | iOS workspace contents. |
| packages/upgrader/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist | iOS workspace checks. |
| packages/upgrader/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings | iOS workspace settings. |
| packages/upgrader/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme | iOS runner scheme. |
| packages/upgrader/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist | iOS project workspace checks. |
| packages/upgrader/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings | iOS project workspace settings. |
| packages/upgrader/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata | iOS project workspace contents. |
| packages/upgrader/example/android/.gitignore | Android example ignore rules. |
| packages/upgrader/example/android/build.gradle.kts | Android build root for the example app. |
| packages/upgrader/example/android/gradle.properties | Android Gradle properties. |
| packages/upgrader/example/android/settings.gradle.kts | Android settings/plugins configuration. |
| packages/upgrader/example/android/gradle/wrapper/gradle-wrapper.properties | Gradle wrapper version for Android example. |
| packages/upgrader/example/android/app/build.gradle.kts | Android app module config for example app. |
| packages/upgrader/example/android/app/src/main/AndroidManifest.xml | Android app manifest for example app. |
| packages/upgrader/example/android/app/src/debug/AndroidManifest.xml | Debug manifest (internet permission). |
| packages/upgrader/example/android/app/src/profile/AndroidManifest.xml | Profile manifest (internet permission). |
| packages/upgrader/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt | Android activity for example app. |
| packages/upgrader/example/android/app/src/main/res/values/styles.xml | Android themes (light). |
| packages/upgrader/example/android/app/src/main/res/values-night/styles.xml | Android themes (dark). |
| packages/upgrader/example/android/app/src/main/res/drawable/launch_background.xml | Android splash background. |
| packages/upgrader/example/android/app/src/main/res/drawable-v21/launch_background.xml | Android splash background (v21). |
| packages/upgrader/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png | Android launcher icon asset. |
| packages/upgrader/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png | Android launcher icon asset. |
| packages/upgrader/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png | Android launcher icon asset. |
| packages/upgrader/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png | Android launcher icon asset. |
| packages/upgrader/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png | Android launcher icon asset. |
| packages/upgrader_core/README.md | Adds package-level documentation for upgrader_core. |
| packages/upgrader_core/pubspec.yaml | Defines the Dart-only core package and dependencies. |
| packages/upgrader_core/LICENSE | Adds package-local license for upgrader_core. |
| packages/upgrader_core/analysis_options.yaml | Adds lints config for the core package. |
| packages/upgrader_core/lib/upgrader_core.dart | Public barrel export for core APIs. |
| packages/upgrader_core/lib/src/upgrader_version_info.dart | Defines core UpgraderVersionInfo. |
| packages/upgrader_core/lib/src/upgrader_package_info.dart | Defines core package metadata model. |
| packages/upgrader_core/lib/src/upgrader_interfaces.dart | Defines core interfaces for app info, prefs, and store launching. |
| packages/upgrader_core/lib/src/upgrade_state.dart | Defines core state model for engine/store logic. |
| packages/upgrader_core/lib/src/upgrade_platform.dart | Defines Dart-only platform identity model. |
| packages/upgrader_core/lib/src/upgrade_store_controller.dart | Adapts store selection/lookup logic to UpgraderPlatform. |
| packages/upgrader_core/lib/src/appcast.dart | Updates Appcast implementation to use platform model. |
| packages/upgrader_core/bin/playstore_lookup.dart | Moves Play Store lookup CLI utility into core package. |
| packages/upgrader_core/bin/itunes_lookup.dart | Moves iTunes lookup CLI utility into core package. |
| packages/upgrader_core/test/upgrader_version_info_test.dart | Converts test to package:test and core import paths. |
| packages/upgrader_core/test/upgrader_store_controller_test.dart | Converts tests to core state/platform types. |
| packages/upgrader_core/test/upgrader_store_controller_coverage_test.dart | Adds core store-controller coverage tests using package:test. |
| packages/upgrader_core/test/play_store_test.dart | Converts Play Store parser test to core package/test runner. |
| packages/upgrader_core/test/play_store_issue521_test.dart | Converts regression test to core package/test runner. |
| packages/upgrader_core/test/play_store_issue520_test.dart | Converts regression test to core package/test runner. |
| packages/upgrader_core/test/test_support.dart | Adds test utilities for core (mock platform + map equality). |
| packages/upgrader_core/test/mock_play_store_client.dart | Adds core Play Store HTTP mock client. |
| packages/upgrader_core/test/fake_appcast.dart | Adds core fake Appcast for tests. |
| packages/upgrader_core/test/testappcastmulti.xml | Adds core Appcast XML fixture. |
| packages/upgrader_core/test/testappcast.xml | Adds core Appcast XML fixture. |
| packages/upgrader_core/test/testappcast-enclosure.xml | Adds core Appcast XML fixture. |
| packages/upgrader_core/test/testappcast_macos.xml | Adds core Appcast XML fixture. |
| packages/upgrader_core/test/testappcast_critical.xml | Adds core Appcast XML fixture. |
Comments suppressed due to low confidence (1)
packages/upgrader_core/lib/src/appcast.dart:28
- This doc comment still refers to
UpgraderOS, but the field/type is nowUpgraderPlatform. Updating it will prevent confusion for core consumers.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| dev_dependencies: | ||
| flutter_test: | ||
| sdk: flutter | ||
| flutter_lints: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This change reorganizes the repository into a two-package workspace and extracts the non-UI upgrade logic into a new Dart-only
upgrader_corepackage. The Flutter package remains the primary user-facing entry point, whileupgrader_corenow owns store lookup, version evaluation, and prompt decision rules.Workspace layout
packages/upgraderpackages/upgrader_corepackages/upgraderupgrader_corepackageDart-only core extraction
upgrader_coreFlutter boundary cleanup
upgrader, including:UpgraderMessagesandUpgraderOSin the Flutter packageUpgraderinto a Flutter-facing facade over the core engineCompatibility
upgraderas the main package consumers importupgraderupgrader_coreadoptionRepresentative API shape