Skip to content

Split upgrader into a Flutter package and Dart-only upgrader_core workspace#555

Draft
Copilot wants to merge 1 commit into
mainfrom
copilot/create-upgrader-core-package
Draft

Split upgrader into a Flutter package and Dart-only upgrader_core workspace#555
Copilot wants to merge 1 commit into
mainfrom
copilot/create-upgrader-core-package

Conversation

Copilot AI commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

This change reorganizes the repository into a two-package workspace and extracts the non-UI upgrade logic into a new Dart-only upgrader_core package. The Flutter package remains the primary user-facing entry point, while upgrader_core now owns store lookup, version evaluation, and prompt decision rules.

  • Workspace layout

    • Converts the repository root into a workspace with:
      • packages/upgrader
      • packages/upgrader_core
    • Moves the existing Flutter package into packages/upgrader
    • Adds package metadata/docs for the new upgrader_core package
  • Dart-only core extraction

    • Moves store lookup and parsing code into upgrader_core
    • Extracts the upgrade decision engine into a new Dart-only core layer
    • Introduces plain Dart models and interfaces for:
      • package/app metadata
      • persistence
      • store launching
      • platform identity
  • Flutter boundary cleanup

    • Keeps Flutter-specific concerns in upgrader, including:
      • widgets
      • lifecycle observation
      • locale detection
      • plugin-backed implementations
      • message resolution
    • Keeps UpgraderMessages and UpgraderOS in the Flutter package
    • Reworks Upgrader into a Flutter-facing facade over the core engine
  • Compatibility

    • Preserves upgrader as the main package consumers import
    • Re-exports selected core APIs through upgrader
    • Keeps the example app targeting the Flutter package rather than requiring direct upgrader_core adoption
  • Representative API shape

    import 'package:upgrader/upgrader.dart';
    
    final upgrader = Upgrader(
      debugLogging: true,
    );
    import 'package:upgrader_core/upgrader_core.dart';
    
    final engine = UpgraderEngine(
      state: UpgraderState(
        client: client,
        upgraderPlatform: const UpgraderPlatform(
          currentOSType: UpgraderOSType.android,
        ),
      ),
    );

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_core public APIs (state/platform/store interfaces) and re-exported selected core symbols through upgrader.
  • 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 now UpgraderPlatform. 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:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants