diff --git a/.github/workflows/force_update-publish.yml b/.github/workflows/force_update-publish.yml new file mode 100644 index 00000000..ddf1c012 --- /dev/null +++ b/.github/workflows/force_update-publish.yml @@ -0,0 +1,39 @@ +name: force_update publish + +on: + push: + tags: ['force_update-v*'] + +jobs: + publish: + name: Publish to pub.dev + + runs-on: ubuntu-latest + + permissions: + id-token: write + contents: write + + defaults: + run: + working-directory: packages/force_update + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Dart + uses: dart-lang/setup-dart@v1 + with: + sdk: 3.5.3 + + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: 3.24.x + cache: true + + - name: Publish and release + uses: leancodepl/mobile-tools/.github/actions/pub-release@pub-release-v1 + with: + path: packages/force_update diff --git a/.github/workflows/force_update-test.yml b/.github/workflows/force_update-test.yml new file mode 100644 index 00000000..b9115a3e --- /dev/null +++ b/.github/workflows/force_update-test.yml @@ -0,0 +1,53 @@ +name: force_update test + +on: + push: + branches: [master] + tags-ignore: ['force_update-v*'] + paths: + - 'packages/force_update/**' + pull_request: + branches: [master] + paths: + - 'packages/force_update/**' + +jobs: + test: + name: Flutter ${{ matrix.channel }}${{ matrix.version }} + + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - version: 3.24.x + defaults: + run: + working-directory: packages/force_update + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Flutter + uses: subosito/flutter-action@v2 + with: + channel: ${{ matrix.channel }} + flutter-version: ${{ matrix.version }} + cache: true + + - name: Flutter version + run: flutter --version + + - name: Download pub dependencies + run: flutter pub get + + - name: Run analyzer + run: flutter analyze + + - name: Run tests + run: flutter test + + - name: Dry run pub publish + # We don't want it to fail the CI, it's just to see how would `pub publish` behave. + run: flutter pub publish --dry-run || true diff --git a/README.md b/README.md index d334311b..116e4b30 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,17 @@ | Package | Documentation | pub | CI | |-------------------------------------------------------| :--------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------: | | [`cqrs`][cqrs-link] | [Documentation][cqrs-documentation] | [![cqrs pub.dev badge][cqrs-pub-badge]][cqrs-pub-badge-link] | [![][cqrs-build-badge]][cqrs-build-badge-link] | -| [`login_client`][login_client-link] | [Documentation][login_client-documentation] | [![login_client pub.dev badge][login_client-pub-badge]][login_client-pub-badge-link] | [![][login_client-build-badge]][login_client-build-badge-link] | +| [`enhanced_gradients`][enhanced_gradients-link] | [Documentation][enhanced_gradients-documentation] | [![enhanced_gradients pub.dev badge][enhanced_gradients-pub-badge]][enhanced_gradients-pub-badge-link] | [![][enhanced_gradients-build-badge]][enhanced_gradients-build-badge-link] | +| [`force_update`][force_update-link] | [Documentation][force_update-documentation] | [![force_update pub.dev badge][force_update-pub-badge]][force_update-pub-badge-link] | [![][force_update-build-badge]][force_update-build-badge-link] | +| [`leancode_analytics`][leancode_analytics-link] | [Documentation][leancode_analytics-documentation] | [![leancode_analytics pub.dev badge][leancode_analytics-pub-badge]][leancode_analytics-pub-badge-link] | [![][leancode_analytics-build-badge]][leancode_analytics-build-badge-link] | +| [`leancode_debug_page`][leancode_debug_page-link] | [Documentation][leancode_debug_page-documentation] | [![leancode_debug_page pub.dev badge][leancode_debug_page-pub-badge]][leancode_debug_page-pub-badge-link] | [![][leancode_debug_page-build-badge]][leancode_debug_page-build-badge-link] | +| [`leancode_flutter_svg_adaptive_loader`][leancode_flutter_svg_adaptive_loader-link] | [Documentation][leancode_flutter_svg_adaptive_loader-documentation] | [![leancode_flutter_svg_adaptive_loader pub.dev badge][leancode_flutter_svg_adaptive_loader-pub-badge]][leancode_flutter_svg_adaptive_loader-pub-badge-link] | [![][leancode_flutter_svg_adaptive_loader-build-badge]][leancode_flutter_svg_adaptive_loader-build-badge-link] | +| [`leancode_hooks`][leancode_hooks-link] | [Documentation][leancode_hooks-documentation] | [![leancode_hooks pub.dev badge][leancode_hooks-pub-badge]][leancode_hooks-pub-badge-link] | [![][leancode_hooks-build-badge]][leancode_hooks-build-badge-link] | | [`leancode_lint`][leancode_lint-link] | [Documentation][leancode_lint-documentation] | [![leancode_lint pub.dev badge][leancode_lint-pub-badge]][leancode_lint-pub-badge-link] | [![][leancode_lint-build-badge]][leancode_lint-build-badge-link] | +| [`leancode_markup`][leancode_markup-link] | [Documentation][leancode_markup-documentation] | [![leancode_markup pub.dev badge][leancode_markup-pub-badge]][leancode_markup-pub-badge-link] | [![][leancode_markup-build-badge]][leancode_markup-build-badge-link] | +| [`login_client`][login_client-link] | [Documentation][login_client-documentation] | [![login_client pub.dev badge][login_client-pub-badge]][login_client-pub-badge-link] | [![][login_client-build-badge]][login_client-build-badge-link] | | [`login_client_flutter`][login_client_flutter-link] | [Documentation][login_client_flutter-documentation] | [![login_client_flutter pub.dev badge][login_client_flutter-pub-badge]][login_client_flutter-pub-badge-link] | [![][login_client_flutter-build-badge]][login_client_flutter-build-badge-link] | | [`override_api_endpoint`][override_api_endpoint-link] | [Documentation][override_api_endpoint-documentation] | [![override_api_endpoint pub.dev badge][override_api_endpoint-pub-badge]][override_api_endpoint-pub-badge-link] | [![][override_api_endpoint-build-badge]][override_api_endpoint-build-badge-link] | -| [`leancode_hooks`][leancode_hooks-link] | [Documentation][leancode_hooks-documentation] | [![leancode_hooks pub.dev badge][leancode_hooks-pub-badge]][leancode_hooks-pub-badge-link] | [![][leancode_hooks-build-badge]][leancode_hooks-build-badge-link] | -| [`enhanced_gradients`][enhanced_gradients-link] | [Documentation][enhanced_gradients-documentation] | [![enhanced_gradients pub.dev badge][enhanced_gradients-pub-badge]][enhanced_gradients-pub-badge-link] | [![][enhanced_gradients-build-badge]][enhanced_gradients-build-badge-link] | -| [`leancode_markup`][leancode_markup-link] | [Documentation][leancode_markup-documentation] | [![leancode_markup pub.dev badge][leancode_markup-pub-badge]][leancode_markup-pub-badge-link] | [![][leancode_markup-build-badge]][leancode_markup-build-badge-link] | -| [`leancode_debug_page`][leancode_debug_page-link] | [Documentation][leancode_debug_page-documentation] | [![leancode_debug_page pub.dev badge][leancode_debug_page-pub-badge]][leancode_debug_page-pub-badge-link] | [![][leancode_debug_page-build-badge]][leancode_debug_page-build-badge-link] | -| [`leancode_analytics`][leancode_analytics-link] | [Documentation][leancode_analytics-documentation] | [![leancode_analytics pub.dev badge][leancode_analytics-pub-badge]][leancode_analytics-pub-badge-link] | [![][leancode_analytics-build-badge]][leancode_analytics-build-badge-link] | ## For maintainers @@ -27,57 +29,80 @@ [cqrs-pub-badge-link]: https://pub.dev/packages/cqrs [cqrs-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/cqrs-test.yml?branch=master [cqrs-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/cqrs-test.yml -[leancode_lint-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/leancode_lint -[leancode_lint-documentation]: https://pub.dev/documentation/leancode_lint/latest/ -[leancode_lint-pub-badge]: https://img.shields.io/pub/v/leancode_lint -[leancode_lint-pub-badge-link]: https://pub.dev/packages/leancode_lint -[leancode_lint-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/leancode_lint-test.yml?branch=master -[leancode_lint-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/leancode_lint-test.yml + +[enhanced_gradients-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/enhanced_gradients +[enhanced_gradients-documentation]: https://pub.dev/documentation/enhanced_gradients/latest/ +[enhanced_gradients-pub-badge]: https://img.shields.io/pub/v/enhanced_gradients +[enhanced_gradients-pub-badge-link]: https://pub.dev/packages/enhanced_gradients +[enhanced_gradients-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/enhanced_gradients-test.yml?branch=master +[enhanced_gradients-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/enhanced_gradients-test.yml + +[force_update-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/force_update +[force_update-documentation]: https://pub.dev/documentation/force_update/latest/ +[force_update-pub-badge]: https://img.shields.io/pub/v/force_update +[force_update-pub-badge-link]: https://pub.dev/packages/force_update +[force_update-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/force_update-test.yml?branch=master +[force_update-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/force_update-test.yml + +[leancode_analytics-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/leancode_analytics +[leancode_analytics-documentation]: https://pub.dev/documentation/leancode_analytics/latest/ +[leancode_analytics-pub-badge]: https://img.shields.io/pub/v/leancode_analytics +[leancode_analytics-pub-badge-link]: https://pub.dev/packages/leancode_analytics +[leancode_analytics-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/leancode_analytics-test.yml?branch=master +[leancode_analytics-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/leancode_analytics-test.yml + +[leancode_debug_page-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/leancode_debug_page +[leancode_debug_page-documentation]: https://pub.dev/documentation/leancode_debug_page/latest/ +[leancode_debug_page-pub-badge]: https://img.shields.io/pub/v/leancode_debug_page +[leancode_debug_page-pub-badge-link]: https://pub.dev/packages/leancode_debug_page +[leancode_debug_page-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/leancode_debug_page-test.yml?branch=master +[leancode_debug_page-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/leancode_debug_page-test.yml + +[leancode_flutter_svg_adaptive_loader-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/leancode_flutter_svg_adaptive_loader +[leancode_flutter_svg_adaptive_loader-documentation]: https://pub.dev/documentation/leancode_flutter_svg_adaptive_loader/latest/ +[leancode_flutter_svg_adaptive_loader-pub-badge]: https://img.shields.io/pub/v/leancode_flutter_svg_adaptive_loader +[leancode_flutter_svg_adaptive_loader-pub-badge-link]: https://pub.dev/packages/leancode_flutter_svg_adaptive_loader +[leancode_flutter_svg_adaptive_loader-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/leancode_flutter_svg_adaptive_loader-test.yml?branch=master +[leancode_flutter_svg_adaptive_loader-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/leancode_flutter_svg_adaptive_loader-test.yml + [leancode_hooks-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/leancode_hooks [leancode_hooks-documentation]: https://pub.dev/documentation/leancode_hooks/latest/ [leancode_hooks-pub-badge]: https://img.shields.io/pub/v/leancode_hooks [leancode_hooks-pub-badge-link]: https://pub.dev/packages/leancode_hooks [leancode_hooks-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/leancode_hooks-test.yml?branch=master [leancode_hooks-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/leancode_hooks-test.yml + +[leancode_lint-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/leancode_lint +[leancode_lint-documentation]: https://pub.dev/documentation/leancode_lint/latest/ +[leancode_lint-pub-badge]: https://img.shields.io/pub/v/leancode_lint +[leancode_lint-pub-badge-link]: https://pub.dev/packages/leancode_lint +[leancode_lint-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/leancode_lint-test.yml?branch=master +[leancode_lint-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/leancode_lint-test.yml + +[leancode_markup-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/leancode_markup +[leancode_markup-documentation]: https://pub.dev/documentation/leancode_markup/latest/ +[leancode_markup-pub-badge]: https://img.shields.io/pub/v/leancode_markup +[leancode_markup-pub-badge-link]: https://pub.dev/packages/leancode_markup +[leancode_markup-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/leancode_markup-test.yml?branch=master +[leancode_markup-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/leancode_markup-test.yml + [login_client-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/login_client [login_client-documentation]: https://pub.dev/documentation/login_client/latest/ [login_client-pub-badge]: https://img.shields.io/pub/v/login_client [login_client-pub-badge-link]: https://pub.dev/packages/login_client [login_client-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/login_client-test.yml?branch=master [login_client-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/login_client-test.yml + [login_client_flutter-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/login_client_flutter [login_client_flutter-documentation]: https://pub.dev/documentation/login_client_flutter/latest/ [login_client_flutter-pub-badge]: https://img.shields.io/pub/v/login_client_flutter [login_client_flutter-pub-badge-link]: https://pub.dev/packages/login_client_flutter [login_client_flutter-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/login_client_flutter-test.yml?branch=master [login_client_flutter-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/login_client_flutter-test.yml + [override_api_endpoint-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/override_api_endpoint [override_api_endpoint-documentation]: https://pub.dev/documentation/override_api_endpoint/latest/ [override_api_endpoint-pub-badge]: https://img.shields.io/pub/v/override_api_endpoint [override_api_endpoint-pub-badge-link]: https://pub.dev/packages/override_api_endpoint [override_api_endpoint-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/override_api_endpoint-test.yml?branch=master [override_api_endpoint-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/override_api_endpoint-test.yml -[enhanced_gradients-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/enhanced_gradients -[enhanced_gradients-documentation]: https://pub.dev/documentation/enhanced_gradients/latest/ -[enhanced_gradients-pub-badge]: https://img.shields.io/pub/v/enhanced_gradients -[enhanced_gradients-pub-badge-link]: https://pub.dev/packages/enhanced_gradients -[enhanced_gradients-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/enhanced_gradients-test.yml?branch=master -[enhanced_gradients-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/enhanced_gradients-test.yml -[leancode_markup-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/leancode_markup -[leancode_markup-documentation]: https://pub.dev/documentation/leancode_markup/latest/ -[leancode_markup-pub-badge]: https://img.shields.io/pub/v/leancode_markup -[leancode_markup-pub-badge-link]: https://pub.dev/packages/leancode_markup -[leancode_markup-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/leancode_markup-test.yml?branch=master -[leancode_markup-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/leancode_markup-test.yml -[leancode_debug_page-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/leancode_debug_page -[leancode_debug_page-documentation]: https://pub.dev/documentation/leancode_debug_page/latest/ -[leancode_debug_page-pub-badge]: https://img.shields.io/pub/v/leancode_debug_page -[leancode_debug_page-pub-badge-link]: https://pub.dev/packages/leancode_debug_page -[leancode_debug_page-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/leancode_debug_page-test.yml?branch=master -[leancode_debug_page-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/leancode_debug_page-test.yml -[leancode_analytics-link]: https://github.com/leancodepl/flutter_corelibrary/tree/master/packages/leancode_analytics -[leancode_analytics-documentation]: https://pub.dev/documentation/leancode_analytics/latest/ -[leancode_analytics-pub-badge]: https://img.shields.io/pub/v/leancode_analytics -[leancode_analytics-pub-badge-link]: https://pub.dev/packages/leancode_analytics -[leancode_analytics-build-badge]: https://img.shields.io/github/actions/workflow/status/leancodepl/flutter_corelibrary/leancode_analytics-test.yml?branch=master -[leancode_analytics-build-badge-link]: https://github.com/leancodepl/flutter_corelibrary/actions/workflows/leancode_analytics-test.yml diff --git a/packages/force_update/README.md b/packages/force_update/README.md index 6154ea0f..558e96fa 100644 --- a/packages/force_update/README.md +++ b/packages/force_update/README.md @@ -1,11 +1,11 @@ # force_update -This is an internal LeanCode package for quickly implementing Force Update. To use it, just wrap your `MaterialApp` in a `ForceUpdateGuard` -widget and pass an instance of CQRS. +This is an internal LeanCode package for quickly implementing Force Update. To use it, just wrap your `MaterialApp` in a `ForceUpdateGuard` widget and pass an instance of CQRS. -# Behavior +## Behavior On every app launch, a request will be made to fetch the minimum required version of the app. Then the package can behave in two different ways depending on settings: + 1. the result will be applied immediately after the response is obtained – if necessary, the package will display either force update screen or a dialog suggesting to update the app (default) 2. the result will be stored and applied on the subsequent app launch – this can be used if you do not want to interrupt the user after they have launched the app (for instance, they could have launched it without internet connection and then turn it on at some point) and would rather only show a force update screen or a dialog on app launch @@ -13,12 +13,12 @@ While the first behavior is the default one, the second can be achieved by setti Regardless of those settings, to keep the minimum required version up to date, requests are also made every 5 minutes while the app is running. -# Usage +## Usage To use the package, wrap your `MaterialApp` with `ForceUpdateGuard` widget. You need to provide a `Cqrs` instance, `suggestUpdateDialog` and `forceUpdateScreen` widgets and a `ForceUpdateController` instance. For a complete working sample, see [example](example). -# Configuration +## Configuration -Android has an API for performing updates within the app, without necessity of opening Play Store. To use the API, set `useAndroidSystemUI` to true in in the constructor of `ForceUpdateGuard`. \ No newline at end of file +Android has an API for performing updates within the app, without necessity of opening Play Store. To use the API, set `useAndroidSystemUI` to true in in the constructor of `ForceUpdateGuard`. diff --git a/packages/force_update/pubspec.yaml b/packages/force_update/pubspec.yaml index 4f327d29..62f9734d 100644 --- a/packages/force_update/pubspec.yaml +++ b/packages/force_update/pubspec.yaml @@ -6,8 +6,8 @@ description: >- An internal package that speeds up implementation of Force Update environment: - sdk: '>=3.0.0 <4.0.0' - flutter: ">=3.10.0" + sdk: '>=3.5.0 <4.0.0' + flutter: ">=3.24.0" dependencies: cqrs: ^10.0.1 @@ -28,37 +28,3 @@ dev_dependencies: leancode_contracts_generator: ^0.11.0 leancode_lint: ^4.0.0+1 mocktail: ^0.3.0 - - -flutter: - - # To add assets to your package, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - # - # For details regarding assets in packages, see - # https://flutter.dev/assets-and-images/#from-packages - # - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware - - # To add custom fonts to your package, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts in packages, see - # https://flutter.dev/custom-fonts/#from-packages