Unverified Commit 01530928 authored by stuartmorgan's avatar stuartmorgan Committed by GitHub

Add build warning for non-debug desktop builds (#38932)

When building in profile or release mode on desktop, add a prominent
warning that it's actually a debug build. This is to help address issues
with people being unaware of the current state of builds due to
following third-party guides rather than official documentation.

macOS is not included since PRs are in flight for macOS release support.
parent f515bf6a
......@@ -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(<String>[
......
......@@ -42,6 +42,15 @@ Future<void> 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',
......
......@@ -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: <Type, Generator>{
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(<String>[
'make',
'-C',
'/linux',
], runInShell: true)).thenAnswer((Invocation invocation) async {
return mockProcess;
});
await createTestCommandRunner(command).run(
const <String>['build', 'linux']
);
final BufferLogger bufferLogger = logger;
expect(bufferLogger.statusText, contains('🚧'));
}, overrides: <Type, Generator>{
FileSystem: () => MemoryFileSystem(),
ProcessManager: () => mockProcessManager,
Platform: () => linuxPlatform,
FeatureFlags: () => TestFeatureFlags(isLinuxEnabled: true),
});
}
class MockProcessManager extends Mock implements ProcessManager {}
......
......@@ -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(<String>[
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 <String>['build', 'windows']
);
final BufferLogger bufferLogger = logger;
expect(bufferLogger.statusText, contains('🚧'));
}, overrides: <Type, Generator>{
FileSystem: () => memoryFilesystem,
ProcessManager: () => mockProcessManager,
Platform: () => windowsPlatform,
VisualStudio: () => mockVisualStudio,
FeatureFlags: () => TestFeatureFlags(isWindowsEnabled: true),
});
}
class MockProcessManager extends Mock implements ProcessManager {}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment