diff --git a/packages/flutter_tools/lib/src/linux/build_linux.dart b/packages/flutter_tools/lib/src/linux/build_linux.dart index 0e6fd7e442c..fc87fef1f49 100644 --- a/packages/flutter_tools/lib/src/linux/build_linux.dart +++ b/packages/flutter_tools/lib/src/linux/build_linux.dart @@ -38,6 +38,15 @@ export PROJECT_DIR=${linuxProject.project.directory.path} ..createSync(recursive: true) ..writeAsStringSync(buffer.toString()); + if (!buildInfo.isDebug) { + const String warning = '🚧 '; + printStatus(warning * 20); + printStatus('Warning: Only debug is currently implemented for Linux. This is effectively a debug build.'); + printStatus('See https://github.com/flutter/flutter/issues/38478 for details and updates.'); + printStatus(warning * 20); + printStatus(''); + } + // Invoke make. final Stopwatch sw = Stopwatch()..start(); final Process process = await processManager.start([ diff --git a/packages/flutter_tools/lib/src/windows/build_windows.dart b/packages/flutter_tools/lib/src/windows/build_windows.dart index 05e7f5a8ddf..0c51060f0ec 100644 --- a/packages/flutter_tools/lib/src/windows/build_windows.dart +++ b/packages/flutter_tools/lib/src/windows/build_windows.dart @@ -42,6 +42,15 @@ Future buildWindows(WindowsProject windowsProject, BuildInfo buildInfo, {S 'Please run `flutter doctor` for more details.'); } + if (!buildInfo.isDebug) { + const String warning = '🚧 '; + printStatus(warning * 20); + printStatus('Warning: Only debug is currently implemented for Windows. This is effectively a debug build.'); + printStatus('See https://github.com/flutter/flutter/issues/38477 for details and updates.'); + printStatus(warning * 20); + printStatus(''); + } + final String buildScript = fs.path.join( Cache.flutterRoot, 'packages', diff --git a/packages/flutter_tools/test/general.shard/commands/build_linux_test.dart b/packages/flutter_tools/test/general.shard/commands/build_linux_test.dart index 0e1c809a6ee..7cdb2a81b35 100644 --- a/packages/flutter_tools/test/general.shard/commands/build_linux_test.dart +++ b/packages/flutter_tools/test/general.shard/commands/build_linux_test.dart @@ -7,10 +7,12 @@ import 'package:file/memory.dart'; import 'package:flutter_tools/src/base/common.dart'; import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/io.dart'; +import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/commands/build.dart'; import 'package:flutter_tools/src/features.dart'; +import 'package:flutter_tools/src/globals.dart'; import 'package:flutter_tools/src/linux/makefile.dart'; import 'package:flutter_tools/src/project.dart'; import 'package:mockito/mockito.dart'; @@ -131,6 +133,35 @@ BINARY_NAME=fizz_bar }, overrides: { FeatureFlags: () => TestFeatureFlags(isLinuxEnabled: false), }); + + testUsingContext('Release build prints an under-construction warning', () async { + final BuildCommand command = BuildCommand(); + applyMocksToCommand(command); + fs.file('linux/build.sh').createSync(recursive: true); + fs.file('pubspec.yaml').createSync(); + fs.file('.packages').createSync(); + fs.file(fs.path.join('lib', 'main.dart')).createSync(recursive: true); + + when(mockProcessManager.start([ + 'make', + '-C', + '/linux', + ], runInShell: true)).thenAnswer((Invocation invocation) async { + return mockProcess; + }); + + await createTestCommandRunner(command).run( + const ['build', 'linux'] + ); + + final BufferLogger bufferLogger = logger; + expect(bufferLogger.statusText, contains('🚧')); + }, overrides: { + FileSystem: () => MemoryFileSystem(), + ProcessManager: () => mockProcessManager, + Platform: () => linuxPlatform, + FeatureFlags: () => TestFeatureFlags(isLinuxEnabled: true), + }); } class MockProcessManager extends Mock implements ProcessManager {} diff --git a/packages/flutter_tools/test/general.shard/commands/build_windows_test.dart b/packages/flutter_tools/test/general.shard/commands/build_windows_test.dart index 948eae0ee29..81debd385aa 100644 --- a/packages/flutter_tools/test/general.shard/commands/build_windows_test.dart +++ b/packages/flutter_tools/test/general.shard/commands/build_windows_test.dart @@ -6,10 +6,12 @@ import 'package:file/memory.dart'; import 'package:flutter_tools/src/base/common.dart'; import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/io.dart'; +import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/commands/build.dart'; import 'package:flutter_tools/src/features.dart'; +import 'package:flutter_tools/src/globals.dart'; import 'package:flutter_tools/src/windows/visual_studio.dart'; import 'package:mockito/mockito.dart'; import 'package:process/process.dart'; @@ -139,6 +141,38 @@ void main() { VisualStudio: () => mockVisualStudio, FeatureFlags: () => TestFeatureFlags(isWindowsEnabled: true), }); + + testUsingContext('Release build prints an under-construction warning', () async { + final BuildCommand command = BuildCommand(); + applyMocksToCommand(command); + fs.file(solutionPath).createSync(recursive: true); + when(mockVisualStudio.vcvarsPath).thenReturn(vcvarsPath); + fs.file('pubspec.yaml').createSync(); + fs.file('.packages').createSync(); + fs.file(fs.path.join('lib', 'main.dart')).createSync(recursive: true); + + when(mockProcessManager.start([ + r'C:\packages\flutter_tools\bin\vs_build.bat', + vcvarsPath, + fs.path.basename(solutionPath), + 'Release', + ], workingDirectory: fs.path.dirname(solutionPath))).thenAnswer((Invocation invocation) async { + return mockProcess; + }); + + await createTestCommandRunner(command).run( + const ['build', 'windows'] + ); + + final BufferLogger bufferLogger = logger; + expect(bufferLogger.statusText, contains('🚧')); + }, overrides: { + FileSystem: () => memoryFilesystem, + ProcessManager: () => mockProcessManager, + Platform: () => windowsPlatform, + VisualStudio: () => mockVisualStudio, + FeatureFlags: () => TestFeatureFlags(isWindowsEnabled: true), + }); } class MockProcessManager extends Mock implements ProcessManager {}