diff --git a/packages/google_fonts/CHANGELOG.md b/packages/google_fonts/CHANGELOG.md index 7c9992f12ddc..a1cd00c37b91 100644 --- a/packages/google_fonts/CHANGELOG.md +++ b/packages/google_fonts/CHANGELOG.md @@ -571,7 +571,6 @@ - `Wix Madefor Display` - `Wix Madefor Text` - `Ysabeau` - - Removed fonts: - `Arima Madurai` - `Fredoka One` diff --git a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md index 49e8e3a7af91..0542655d4a35 100644 --- a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md @@ -611,7 +611,6 @@ GoogleMapController is now uniformly driven by implementing `DefaultLifecycleObs ## 0.5.19 * Adds support for toggling Indoor View on or off. - * Allow BitmapDescriptor scaling override ## 0.5.18 diff --git a/packages/google_sign_in/google_sign_in/CHANGELOG.md b/packages/google_sign_in/google_sign_in/CHANGELOG.md index 7dee74fb530a..f96a2f48ae2c 100644 --- a/packages/google_sign_in/google_sign_in/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in/CHANGELOG.md @@ -191,7 +191,6 @@ For every platform other than `web`, this version should be identical to `5.4.4` ## 5.1.0 * Add reAuthenticate option to signInSilently to allow re-authentication to be requested - * Updated Android lint settings. ## 5.0.7 diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index 53c46e820da0..f60755dd1615 100644 --- a/packages/image_picker/image_picker/CHANGELOG.md +++ b/packages/image_picker/image_picker/CHANGELOG.md @@ -129,7 +129,6 @@ ## 0.8.6+2 * Updates `NSPhotoLibraryUsageDescription` description in README. - * Updates minimum Flutter version to 3.0. ## 0.8.6+1 diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md index 3f70c390c861..e31f8071c084 100644 --- a/packages/video_player/video_player/CHANGELOG.md +++ b/packages/video_player/video_player/CHANGELOG.md @@ -605,14 +605,12 @@ DefaultHttpDataSourceFactory by default. ## 0.10.0+8 * iOS: Fix an issue where the player sends initialization message incorrectly. - * Fix a few other IDE warnings. ## 0.10.0+7 * Android: Fix issue where buffering status in percentage instead of milliseconds - * Android: Update buffering status everytime we notify for position change ## 0.10.0+6 diff --git a/packages/video_player/video_player_android/CHANGELOG.md b/packages/video_player/video_player_android/CHANGELOG.md index 4dc08f0c4624..1d56131e8bb2 100644 --- a/packages/video_player/video_player_android/CHANGELOG.md +++ b/packages/video_player/video_player_android/CHANGELOG.md @@ -203,7 +203,6 @@ ## 2.7.2 * Updates minimum supported SDK version to Flutter 3.24/Dart 3.5. - * Re-adds Impeller support. ## 2.7.1 diff --git a/script/tool/lib/src/version_check_command.dart b/script/tool/lib/src/version_check_command.dart index a06603af4eb3..7fea963b0292 100644 --- a/script/tool/lib/src/version_check_command.dart +++ b/script/tool/lib/src/version_check_command.dart @@ -540,6 +540,36 @@ ${indentation}The first version listed in CHANGELOG.md is $fromChangeLog. } } + // Check for blank lines between list items in the version section. + var inList = false; + var seenBlankLineInList = false; + final listItemRegex = RegExp(r'^\s*[*+-]\s'); + while (iterator.moveNext()) { + final String line = iterator.current; + final bool isListItem = listItemRegex.hasMatch(line); + final bool isBlank = line.trim().isEmpty; + + if (isListItem) { + if (seenBlankLineInList) { + printError( + '${indentation}Blank lines found between list items in CHANGELOG.\n' + '${indentation}This creates multiple separate lists on pub.dev.\n' + '${indentation}Remove blank lines to keep all items in a single list.', + ); + return false; + } + inList = true; + } else if (isBlank) { + if (inList) { + seenBlankLineInList = true; + } + } else { + // Any other non-blank, non-list line resets the state (e.g. new headers, text). + inList = false; + seenBlankLineInList = false; + } + } + return true; } diff --git a/script/tool/test/version_check_command_test.dart b/script/tool/test/version_check_command_test.dart index a06c96bac13b..f5de2c2c02eb 100644 --- a/script/tool/test/version_check_command_test.dart +++ b/script/tool/test/version_check_command_test.dart @@ -487,6 +487,94 @@ void main() { ); }); + test('Fail if CHANGELOG list items have a blank line', () async { + const version = '1.0.1'; + final RepositoryPackage plugin = createFakePlugin( + 'plugin', + packagesDir, + version: version, + ); + + // Blank line breaks the list items. + const changelog = + ''' +## $version + +* First item. + +* Second item. +* Third item. +'''; + plugin.changelogFile.writeAsStringSync(changelog); + gitProcessRunner.mockProcessesForExecutable['git-show'] = + [ + FakeProcessInfo(MockProcess(stdout: 'version: 1.0.0')), + ]; + Error? commandError; + final List output = await runCapturingPrint( + runner, + ['version-check', '--base-sha=main'], + errorHandler: (Error e) { + commandError = e; + }, + ); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains('Blank lines found between list items in CHANGELOG.'), + contains('CHANGELOG.md failed validation.'), + ]), + ); + }); + + test( + 'Fail if CHANGELOG list items have a blank line with nested items', + () async { + const version = '1.0.1'; + final RepositoryPackage plugin = createFakePlugin( + 'plugin', + packagesDir, + version: version, + ); + + // Blank line in nested list items. + const changelog = + ''' +## $version + +* Top level item. + * Nested item A. + + * Nested item B. +* Another top level item. +'''; + plugin.changelogFile.writeAsStringSync(changelog); + gitProcessRunner.mockProcessesForExecutable['git-show'] = + [ + FakeProcessInfo(MockProcess(stdout: 'version: 1.0.0')), + ]; + Error? commandError; + final List output = await runCapturingPrint( + runner, + ['version-check', '--base-sha=main'], + errorHandler: (Error e) { + commandError = e; + }, + ); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains('Blank lines found between list items in CHANGELOG.'), + contains('CHANGELOG.md failed validation.'), + ]), + ); + }, + ); + test( 'Fail if pubspec version only matches an older version listed in CHANGELOG', () async {