From 68d4999e898ac6d60b9744552b7126306bafe5c6 Mon Sep 17 00:00:00 2001 From: gasciaz <21259254+gasciaz@users.noreply.github.com> Date: Sat, 15 Aug 2026 11:27:50 +0200 Subject: [PATCH 1/5] fix: convert analysis_options exclude list to block style `flutter pub get` crashes on Flutter 3.47. Flutter's AnalysisOptionsMigration appends `build/**` to the exclude list, but the list is flow-style with a trailing comma, so yaml_edit produces invalid YAML and the tool aborts: Assertion failed: (package:yaml_edit) Failed to produce valid YAML after modification. #3 AnalysisOptionsMigration.migrate (package:flutter_tools/src/migrations/analysis_options_migration.dart:87:22) Convert the list to block style and pre-populate the entries the migration wants, so it becomes a no-op. Also drop the leading slash from the freezed/g.dart globs. `/**/*.g.dart` anchored the pattern to the filesystem root, so it never matched and generated files were in practice never excluded. --- .../reactive_forms_generator/analysis_options.yaml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/reactive_forms_generator/analysis_options.yaml b/packages/reactive_forms_generator/analysis_options.yaml index e3f0614f..c556593e 100644 --- a/packages/reactive_forms_generator/analysis_options.yaml +++ b/packages/reactive_forms_generator/analysis_options.yaml @@ -1,10 +1,16 @@ include: package:flutter_lints/flutter.yaml analyzer: - exclude: [ - /**/*.freezed.dart, - /**/*.g.dart, - ] + exclude: + - "**/*.freezed.dart" + - "**/*.g.dart" + - build/** + - android/** + - ios/** + - web/** + - windows/** + - macos/** + - linux/** language: strict-casts: true strict-raw-types: true From d32c587c05d5a01e72005e0ad24d3e7fbe3ddeb8 Mon Sep 17 00:00:00 2001 From: gasciaz <21259254+gasciaz@users.noreply.github.com> Date: Sat, 15 Aug 2026 11:28:06 +0200 Subject: [PATCH 2/5] fix: keep analysis_options.yaml stable across flutter pub get These two files do not crash, but Flutter 3.47 rewrites both on every `flutter pub get`, leaving every contributor with a dirty working tree. Pre-populate the exclude entries the migration wants so it becomes a no-op. Verified idempotent: identical checksums after repeated `melos bs` runs. Also remove two dead commented-out lines in the example config. --- packages/generator_tests/analysis_options.yaml | 10 ++++++++++ .../example/analysis_options.yaml | 10 ++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/generator_tests/analysis_options.yaml b/packages/generator_tests/analysis_options.yaml index 7bd24048..b898e1d3 100644 --- a/packages/generator_tests/analysis_options.yaml +++ b/packages/generator_tests/analysis_options.yaml @@ -1,5 +1,15 @@ include: package:flutter_lints/flutter.yaml +analyzer: + exclude: + - build/** + - android/** + - ios/** + - web/** + - windows/** + - macos/** + - linux/** + linter: rules: library_annotations: false diff --git a/packages/reactive_forms_generator/example/analysis_options.yaml b/packages/reactive_forms_generator/example/analysis_options.yaml index ef163712..d4f5a36e 100644 --- a/packages/reactive_forms_generator/example/analysis_options.yaml +++ b/packages/reactive_forms_generator/example/analysis_options.yaml @@ -1,8 +1,14 @@ include: package:flutter_lints/flutter.yaml analyzer: - # exclude: - # - "**/*.g.dart" + exclude: + - build/** + - android/** + - ios/** + - web/** + - windows/** + - macos/** + - linux/** language: strict-casts: true strict-raw-types: true From 48699461691ede2cc2e8bc1bb9c6830db3d0be1c Mon Sep 17 00:00:00 2001 From: gasciaz <21259254+gasciaz@users.noreply.github.com> Date: Sat, 15 Aug 2026 11:28:24 +0200 Subject: [PATCH 3/5] chore: update pubspec.lock for Flutter 3.47 Seven SDK-pinned packages (intl, matcher, meta, test, test_api, test_core, vector_math) plus the recorded SDK floor moving to Dart 3.11. --- pubspec.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index ace6894f..2a51b557 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -364,10 +364,10 @@ packages: dependency: transitive description: name: intl - sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" + sha256: "1ca20c894b1717686a2319b8548763d812bc0aabdac580420a44c5178c57a867" url: "https://pub.dev" source: hosted - version: "0.20.2" + version: "0.20.3" io: dependency: transitive description: @@ -436,10 +436,10 @@ packages: dependency: transitive description: name: matcher - sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 + sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" url: "https://pub.dev" source: hosted - version: "0.12.19" + version: "0.12.20" material_color_utilities: dependency: transitive description: @@ -460,10 +460,10 @@ packages: dependency: transitive description: name: meta - sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.19.0" mime: dependency: transitive description: @@ -721,26 +721,26 @@ packages: dependency: transitive description: name: test - sha256: "280d6d890011ca966ad08df7e8a4ddfab0fb3aa49f96ed6de56e3521347a9ae7" + sha256: ca578dc12bb8b2f40b67b7d3bd2fac4f31c01a6ff7130a14e2597b919934507f url: "https://pub.dev" source: hosted - version: "1.30.0" + version: "1.31.1" test_api: dependency: transitive description: name: test_api - sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a" + sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" url: "https://pub.dev" source: hosted - version: "0.7.10" + version: "0.7.12" test_core: dependency: transitive description: name: test_core - sha256: "0381bd1585d1a924763c308100f2138205252fb90c9d4eeaf28489ee65ccde51" + sha256: d2e98ec12998368dc59ddd47ab709f2cd55acd6b66dc7db764455a44082f4bc5 url: "https://pub.dev" source: hosted - version: "0.6.16" + version: "0.6.18" typed_data: dependency: transitive description: @@ -753,10 +753,10 @@ packages: dependency: transitive description: name: vector_math - sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + sha256: f36f9f3be64c6198714492bb455c11056e33e2f85d9a0b676a48301e44fdcf47 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.2" vm_service: dependency: transitive description: @@ -830,5 +830,5 @@ packages: source: hosted version: "2.2.4" sdks: - dart: ">=3.10.0 <4.0.0" + dart: ">=3.11.0-0 <4.0.0" flutter: ">=3.18.0-18.0.pre.54" From c9cbb475d0c1abdc48a33aa55adf77a4f33acba6 Mon Sep 17 00:00:00 2001 From: gasciaz <21259254+gasciaz@users.noreply.github.com> Date: Sat, 15 Aug 2026 11:30:13 +0200 Subject: [PATCH 4/5] ci: bump to Flutter 3.47.0 Without this the analysis_options fix is not actually covered by CI. Verified locally on Flutter 3.47.0 / Dart 3.13.0: melos bs, analyze and format on all packages, generator_tests 34/34, example build_runner + 28/28. --- .github/workflows/pr-check-annotation.yml | 2 +- .github/workflows/pr-check-example.yml | 2 +- .github/workflows/pr-check-generator-test.yml | 2 +- .github/workflows/pr-check-generator.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pr-check-annotation.yml b/.github/workflows/pr-check-annotation.yml index 1eabea7e..799fb84d 100644 --- a/.github/workflows/pr-check-annotation.yml +++ b/.github/workflows/pr-check-annotation.yml @@ -18,7 +18,7 @@ jobs: - name: Setup Flutter uses: subosito/flutter-action@v2 with: - flutter-version: 3.41.9 + flutter-version: 3.47.0 channel: stable cache: true - name: Check out repository code diff --git a/.github/workflows/pr-check-example.yml b/.github/workflows/pr-check-example.yml index 1e8c8907..1aae468c 100644 --- a/.github/workflows/pr-check-example.yml +++ b/.github/workflows/pr-check-example.yml @@ -18,7 +18,7 @@ jobs: - name: Setup Flutter uses: subosito/flutter-action@v2 with: - flutter-version: 3.41.9 + flutter-version: 3.47.0 channel: stable cache: true - name: Check out repository code diff --git a/.github/workflows/pr-check-generator-test.yml b/.github/workflows/pr-check-generator-test.yml index cdb375ff..8bb8063a 100644 --- a/.github/workflows/pr-check-generator-test.yml +++ b/.github/workflows/pr-check-generator-test.yml @@ -18,7 +18,7 @@ jobs: - name: Setup Flutter uses: subosito/flutter-action@v2 with: - flutter-version: 3.41.9 + flutter-version: 3.47.0 channel: stable cache: true - name: Check out repository code diff --git a/.github/workflows/pr-check-generator.yml b/.github/workflows/pr-check-generator.yml index 18d4fb16..33c3b7f2 100644 --- a/.github/workflows/pr-check-generator.yml +++ b/.github/workflows/pr-check-generator.yml @@ -18,7 +18,7 @@ jobs: - name: Setup Flutter uses: subosito/flutter-action@v2 with: - flutter-version: 3.41.9 + flutter-version: 3.47.0 channel: stable cache: true - name: Check out repository code From c428481b1c37baa11e7417c2a8d26302b13f51b6 Mon Sep 17 00:00:00 2001 From: gasciaz <21259254+gasciaz@users.noreply.github.com> Date: Sat, 15 Aug 2026 11:31:07 +0200 Subject: [PATCH 5/5] ci: run the generator format check from the package directory The step ran `dart format --set-exit-if-changed lib` from the repository root, where no `lib/` directory exists. dart format exits 0 on a missing path, so the check has always passed without inspecting anything: $ dart format --set-exit-if-changed lib No file or directory found at "lib". Formatted no files in 0.00 seconds. exit=0 Adding the missing cd makes it real. It passes: 44 files, 0 changed. --- .github/workflows/pr-check-generator.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-check-generator.yml b/.github/workflows/pr-check-generator.yml index 33c3b7f2..99fa652c 100644 --- a/.github/workflows/pr-check-generator.yml +++ b/.github/workflows/pr-check-generator.yml @@ -36,4 +36,4 @@ jobs: run: flutter analyze --no-fatal-infos - name: code formatting - run: dart format --set-exit-if-changed lib + run: cd packages/reactive_forms_generator && dart format --set-exit-if-changed lib