diff --git a/script/tool/CHANGELOG.md b/script/tool/CHANGELOG.md index 31adba726979..44d1d72473e7 100644 --- a/script/tool/CHANGELOG.md +++ b/script/tool/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.13.4+4 + +* Allows code excerpts in `example/README.md`. + ## 0.13.4+3 * Moves source to flutter/packages. diff --git a/script/tool/lib/src/update_excerpts_command.dart b/script/tool/lib/src/update_excerpts_command.dart index e65bed846cbc..8583e4993c74 100644 --- a/script/tool/lib/src/update_excerpts_command.dart +++ b/script/tool/lib/src/update_excerpts_command.dart @@ -89,6 +89,10 @@ class UpdateExcerptsCommand extends PackageLoopingCommand { if (!await _injectSnippets(example, targetPackage: package)) { return PackageResult.fail(['Unable to inject excerpts']); } + if (!await _injectSnippets(example, targetPackage: example)) { + return PackageResult.fail( + ['Unable to inject example excerpts']); + } } finally { // Clean up the pubspec changes and extracted excerpts directory. _undoPubspecChanges(example); diff --git a/script/tool/pubspec.yaml b/script/tool/pubspec.yaml index dd42b0dde00c..0926fe48616c 100644 --- a/script/tool/pubspec.yaml +++ b/script/tool/pubspec.yaml @@ -1,7 +1,7 @@ name: flutter_plugin_tools description: Productivity and CI utils for flutter/packages repository: https://github.com/flutter/packages/tree/main/script/tool -version: 0.13.4+3 +version: 0.13.4+4 dependencies: args: ^2.1.0 diff --git a/script/tool/test/update_excerpts_command_test.dart b/script/tool/test/update_excerpts_command_test.dart index 193001fed6c1..7bb0297de131 100644 --- a/script/tool/test/update_excerpts_command_test.dart +++ b/script/tool/test/update_excerpts_command_test.dart @@ -109,6 +109,50 @@ void main() { ])); }); + test('updates example readme when config is present', () async { + final RepositoryPackage package = createFakePlugin('a_package', packagesDir, + extraFiles: [kReadmeExcerptConfigPath]); + final Directory example = getExampleDir(package); + + final List output = + await runCapturingPrint(runner, ['update-excerpts']); + + expect( + processRunner.recordedCalls, + containsAll([ + ProcessCall( + 'dart', + const [ + 'run', + 'build_runner', + 'build', + '--config', + 'excerpt', + '--output', + 'excerpts', + '--delete-conflicting-outputs', + ], + example.path), + ProcessCall( + 'dart', + const [ + 'run', + 'code_excerpt_updater', + '--write-in-place', + '--yaml', + '--no-escape-ng-interpolation', + 'README.md', + ], + example.path), + ])); + + expect( + output, + containsAllInOrder([ + contains('Ran for 1 package(s)'), + ])); + }); + test('skips when no config is present', () async { createFakePlugin('a_package', packagesDir); @@ -231,6 +275,34 @@ void main() { ])); }); + test('fails if example injection fails', () async { + createFakePlugin('a_package', packagesDir, + extraFiles: [kReadmeExcerptConfigPath]); + + processRunner.mockProcessesForExecutable['dart'] = [ + FakeProcessInfo(MockProcess(), ['pub', 'get']), + FakeProcessInfo(MockProcess(), ['run', 'build_runner']), + FakeProcessInfo(MockProcess(), ['run', 'code_excerpt_updater']), + FakeProcessInfo( + MockProcess(exitCode: 1), ['run', 'code_excerpt_updater']), + ]; + + Error? commandError; + final List output = await runCapturingPrint( + runner, ['update-excerpts'], errorHandler: (Error e) { + commandError = e; + }); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains('The following packages had errors:'), + contains('a_package:\n' + ' Unable to inject example excerpts') + ])); + }); + test('fails if READMEs are changed with --fail-on-change', () async { createFakePlugin('a_plugin', packagesDir, extraFiles: [kReadmeExcerptConfigPath]);