feat: adding local file logging to the cli (#2034)

Co-authored-by: Felix Angelov <felix@shorebird.dev>
This commit is contained in:
Erick
2024-05-08 15:33:16 -07:00
committed by GitHub
parent 0cfd9a7d72
commit 5232b27cef
52 changed files with 427 additions and 104 deletions
+2 -1
View File
@@ -1,4 +1,5 @@
# Cached files
bin/cache/
# Coverage directories used by Flutter & Dart tests
coverage/
coverage/
logs/
@@ -220,10 +220,20 @@ Run ${lightCyan.wrap('shorebird upgrade')} to upgrade.''');
}
if (exitCode == ExitCode.software.code && logger.level != Level.verbose) {
final fileAnIssue = link(
uri: Uri.parse(
'https://github.com/shorebirdtech/shorebird/issues/new/choose',
),
message: 'file an issue',
);
logger.info(
'''
If you aren't sure why this command failed, re-run with the ${lightCyan.wrap('--verbose')} flag to see more information.''',
If you aren't sure why this command failed, re-run with the ${lightCyan.wrap('--verbose')} flag to see more information.
You can also $fileAnIssue if you think this is a bug. Please include the following log file in your report:
${logger.logFile.absolute.path}
''',
);
}
@@ -1,6 +1,7 @@
import 'package:mason_logger/mason_logger.dart';
import 'package:shorebird_cli/src/artifact_builder.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/commands/release_new/releaser.dart';
import 'package:shorebird_cli/src/commands/release_new/release_new.dart';
import 'package:shorebird_cli/src/doctor.dart';
import 'package:shorebird_cli/src/logger.dart';
+97 -2
View File
@@ -1,8 +1,103 @@
import 'dart:io';
import 'package:mason_logger/mason_logger.dart';
import 'package:path/path.dart' as p;
import 'package:scoped/scoped.dart';
import 'package:shorebird_cli/src/shorebird_env.dart';
/// A reference to a [Logger] instance.
final loggerRef = create(Logger.new);
final loggerRef = create(ShorebirdLogger.new);
/// The [Logger] instance available in the current zone.
Logger get logger => read(loggerRef);
ShorebirdLogger get logger => read(loggerRef);
class ShorebirdLogger extends Logger {
static const _logFileName = 'shorebird.log';
late final File logFile = (() {
final timestamp = DateTime.now().millisecondsSinceEpoch;
final file = File(
p.join(
shorebirdEnv.shorebirdRoot.path,
'logs',
'${timestamp}_$_logFileName',
),
);
if (!file.existsSync()) {
file.createSync(recursive: true);
}
return file;
})();
void _logToFile(String level, String message, {required LogStyle style}) {
final styledMessage = style(message);
logFile.writeAsStringSync(
'${DateTime.now().toIso8601String()} [$level] $styledMessage\n',
mode: FileMode.append,
);
}
@override
void info(String? message, {LogStyle? style}) {
super.info(message, style: style);
_logToFile(
'INFO',
message ?? '',
style: style ?? theme.info,
);
}
@override
void detail(String? message, {LogStyle? style}) {
super.detail(message, style: style);
_logToFile(
'DETAIL',
message ?? '',
style: style ?? theme.detail,
);
}
@override
void warn(String? message, {String tag = 'WARN', LogStyle? style}) {
super.warn(message, tag: tag, style: style);
_logToFile(
'WARN',
message ?? '',
style: style ?? theme.warn,
);
}
@override
void success(String? message, {LogStyle? style}) {
super.success(message, style: style);
_logToFile(
'SUCCESS',
message ?? '',
style: style ?? theme.success,
);
}
@override
void alert(String? message, {LogStyle? style}) {
super.alert(message, style: style);
_logToFile(
'ALERT',
message ?? '',
style: style ?? theme.alert,
);
}
@override
void err(String? message, {LogStyle? style}) {
super.err(message, style: style);
_logToFile(
'ERROR',
message ?? '',
style: style ?? theme.err,
);
}
}
@@ -19,7 +19,7 @@ import 'mocks.dart';
void main() {
group(ArtifactBuilder, () {
late Ios ios;
late Logger logger;
late ShorebirdLogger logger;
late OperatingSystemInterface operatingSystemInterface;
late ShorebirdAndroidArtifacts shorebirdAndroidArtifacts;
late ShorebirdEnv shorebirdEnv;
@@ -51,7 +51,7 @@ void main() {
setUp(() {
buildProcessResult = MockProcessResult();
ios = MockIos();
logger = MockLogger();
logger = MockShorebirdLogger();
operatingSystemInterface = MockOperatingSystemInterface();
pubGetProcessResult = MockProcessResult();
shorebirdAndroidArtifacts = MockShorebirdAndroidArtifacts();
@@ -22,7 +22,7 @@ void main() {
late Directory cacheArtifactDirectory;
late http.Client httpClient;
late Directory projectRoot;
late Logger logger;
late ShorebirdLogger logger;
late ShorebirdEnv shorebirdEnv;
late ShorebirdProcessResult patchProcessResult;
late ShorebirdProcess shorebirdProcess;
@@ -49,7 +49,7 @@ void main() {
cacheArtifactDirectory = Directory.systemTemp.createTempSync();
cache = MockCache();
httpClient = MockHttpClient();
logger = MockLogger();
logger = MockShorebirdLogger();
patchProcessResult = MockProcessResult();
projectRoot = Directory.systemTemp.createTempSync();
shorebirdProcess = MockShorebirdProcess();
@@ -6,7 +6,6 @@ import 'package:googleapis_auth/auth_io.dart';
import 'package:googleapis_auth/googleapis_auth.dart' as oauth2;
import 'package:http/http.dart' as http;
import 'package:jwt/jwt.dart' show Jwt, JwtPayload;
import 'package:mason_logger/mason_logger.dart';
import 'package:mocktail/mocktail.dart';
import 'package:path/path.dart' as p;
import 'package:platform/platform.dart';
@@ -142,7 +141,7 @@ void main() {
late String credentialsDir;
late http.Client httpClient;
late CodePushClient codePushClient;
late Logger logger;
late ShorebirdLogger logger;
late Auth auth;
late Platform platform;
@@ -198,7 +197,7 @@ void main() {
credentialsDir = Directory.systemTemp.createTempSync().path;
httpClient = MockHttpClient();
codePushClient = MockCodePushClient();
logger = MockLogger();
logger = MockShorebirdLogger();
platform = MockPlatform();
when(() => codePushClient.getCurrentUser()).thenAnswer((_) async => user);
@@ -26,7 +26,7 @@ void main() {
late ArtifactManager artifactManager;
late Directory shorebirdRoot;
late http.Client httpClient;
late Logger logger;
late ShorebirdLogger logger;
late Platform platform;
late Process chmodProcess;
late ShorebirdEnv shorebirdEnv;
@@ -70,7 +70,7 @@ void main() {
setUp(() {
artifactManager = MockArtifactManager();
httpClient = MockHttpClient();
logger = MockLogger();
logger = MockShorebirdLogger();
platform = MockPlatform();
chmodProcess = MockProcess();
shorebirdEnv = MockShorebirdEnv();
@@ -27,7 +27,7 @@ void main() {
group('scoped', () {
late Auth auth;
late http.Client httpClient;
late Logger logger;
late ShorebirdLogger logger;
late Platform platform;
late Progress progress;
late ShorebirdEnv shorebirdEnv;
@@ -40,7 +40,7 @@ void main() {
setUp(() {
auth = MockAuth();
httpClient = MockHttpClient();
logger = MockLogger();
logger = MockShorebirdLogger();
platform = MockPlatform();
progress = MockProgress();
shorebirdEnv = MockShorebirdEnv();
@@ -142,7 +142,7 @@ void main() {
);
late CodePushClient codePushClient;
late Logger logger;
late ShorebirdLogger logger;
late Progress progress;
late CodePushClientWrapper codePushClientWrapper;
late Platform platform;
@@ -168,7 +168,7 @@ void main() {
setUp(() {
codePushClient = MockCodePushClient();
logger = MockLogger();
logger = MockShorebirdLogger();
platform = MockPlatform();
progress = MockProgress();
projectRoot = Directory.systemTemp.createTempSync();
@@ -20,7 +20,7 @@ void main() {
const flutterRevision = 'test-flutter-revision';
const flutterVersion = '1.2.3';
late Logger logger;
late ShorebirdLogger logger;
late Platform platform;
late ShorebirdEnv shorebirdEnv;
late ShorebirdFlutter shorebirdFlutter;
@@ -41,12 +41,16 @@ void main() {
}
setUp(() {
logger = MockLogger();
logger = MockShorebirdLogger();
platform = MockPlatform();
shorebirdEnv = MockShorebirdEnv();
shorebirdFlutter = MockShorebirdFlutter();
shorebirdVersion = MockShorebirdVersion();
when(() => logger.level).thenReturn(Level.info);
final logFile = MockFile();
when(() => logger.logFile).thenReturn(logFile);
when(() => logFile.absolute).thenReturn(logFile);
when(() => logFile.path).thenReturn('test.log');
when(
() => shorebirdEnv.shorebirdEngineRevision,
).thenReturn(shorebirdEngineRevision);
@@ -19,7 +19,7 @@ void main() {
late ArgResults argResults;
late ArtifactBuilder artifactBuilder;
late Logger logger;
late ShorebirdLogger logger;
late Progress progress;
late ShorebirdEnv shorebirdEnv;
late ShorebirdValidator shorebirdValidator;
@@ -40,7 +40,7 @@ void main() {
setUp(() {
argResults = MockArgResults();
artifactBuilder = MockArtifactBuilder();
logger = MockLogger();
logger = MockShorebirdLogger();
progress = MockProgress();
shorebirdEnv = MockShorebirdEnv();
shorebirdValidator = MockShorebirdValidator();
@@ -21,7 +21,7 @@ void main() {
late ArgResults argResults;
late ArtifactBuilder artifactBuilder;
late Doctor doctor;
late Logger logger;
late ShorebirdLogger logger;
late ShorebirdFlutterValidator flutterValidator;
late ShorebirdValidator shorebirdValidator;
late BuildApkCommand command;
@@ -47,7 +47,7 @@ void main() {
argResults = MockArgResults();
artifactBuilder = MockArtifactBuilder();
doctor = MockDoctor();
logger = MockLogger();
logger = MockShorebirdLogger();
flutterValidator = MockShorebirdFlutterValidator();
shorebirdValidator = MockShorebirdValidator();
@@ -23,7 +23,7 @@ void main() {
late ArgResults argResults;
late ArtifactBuilder artifactBuilder;
late Doctor doctor;
late Logger logger;
late ShorebirdLogger logger;
late BuildAppBundleCommand command;
late ShorebirdFlutterValidator flutterValidator;
late ShorebirdValidator shorebirdValidator;
@@ -50,7 +50,7 @@ void main() {
argResults = MockArgResults();
artifactBuilder = MockArtifactBuilder();
doctor = MockDoctor();
logger = MockLogger();
logger = MockShorebirdLogger();
flutterValidator = MockShorebirdFlutterValidator();
shorebirdValidator = MockShorebirdValidator();
@@ -24,7 +24,7 @@ void main() {
late ArgResults argResults;
late Doctor doctor;
late Ios ios;
late Logger logger;
late ShorebirdLogger logger;
late OperatingSystemInterface operatingSystemInterface;
late ShorebirdProcessResult buildProcessResult;
late ShorebirdProcessResult flutterPubGetProcessResult;
@@ -57,7 +57,7 @@ void main() {
argResults = MockArgResults();
doctor = MockDoctor();
ios = MockIos();
logger = MockLogger();
logger = MockShorebirdLogger();
operatingSystemInterface = MockOperatingSystemInterface();
shorebirdProcess = MockShorebirdProcess();
buildProcessResult = MockProcessResult();
@@ -16,7 +16,7 @@ import '../../mocks.dart';
void main() {
group('cache clean', () {
late Cache cache;
late Logger logger;
late ShorebirdLogger logger;
late Platform platform;
late Progress progress;
late ShorebirdEnv shorebirdEnv;
@@ -36,7 +36,7 @@ void main() {
setUp(() {
cache = MockCache();
logger = MockLogger();
logger = MockShorebirdLogger();
platform = MockPlatform();
progress = MockProgress();
shorebirdEnv = MockShorebirdEnv();
@@ -26,7 +26,7 @@ void main() {
late AndroidSdk androidSdk;
late Doctor doctor;
late Java java;
late Logger logger;
late ShorebirdLogger logger;
late ShorebirdEnv shorebirdEnv;
late ShorebirdFlutter shorebirdFlutter;
late Validator validator;
@@ -53,7 +53,7 @@ void main() {
androidSdk = MockAndroidSdk();
doctor = MockDoctor();
java = MockJava();
logger = MockLogger();
logger = MockShorebirdLogger();
shorebirdEnv = MockShorebirdEnv();
shorebirdFlutter = MockShorebirdFlutter();
validator = MockValidator();
@@ -13,7 +13,7 @@ import '../../../mocks.dart';
void main() {
group(FlutterVersionsListCommand, () {
late Progress progress;
late Logger logger;
late ShorebirdLogger logger;
late ShorebirdFlutter shorebirdFlutter;
late FlutterVersionsListCommand command;
@@ -29,7 +29,7 @@ void main() {
setUp(() {
progress = MockProgress();
logger = MockLogger();
logger = MockShorebirdLogger();
shorebirdFlutter = MockShorebirdFlutter();
command = runWithOverrides(FlutterVersionsListCommand.new);
@@ -43,7 +43,7 @@ environment:
late ShorebirdYaml shorebirdYaml;
late Directory projectRoot;
late File pubspecYamlFile;
late Logger logger;
late ShorebirdLogger logger;
late Platform platform;
late Progress progress;
late PubspecEditor pubspecEditor;
@@ -84,7 +84,7 @@ environment:
pubspecYamlFile = MockFile();
projectRoot = Directory.systemTemp.createTempSync();
pubspecEditor = MockPubspecEditor();
logger = MockLogger();
logger = MockShorebirdLogger();
platform = MockPlatform();
progress = MockProgress();
shorebirdEnv = MockShorebirdEnv();
@@ -18,7 +18,7 @@ void main() {
late ArgResults results;
late Auth auth;
late http.Client httpClient;
late Logger logger;
late ShorebirdLogger logger;
late LoginCiCommand command;
R runWithOverrides<R>(R Function() body) {
@@ -38,7 +38,7 @@ void main() {
setUp(() {
auth = MockAuth();
httpClient = MockHttpClient();
logger = MockLogger();
logger = MockShorebirdLogger();
results = MockArgResults();
when(() => results.wasParsed('provider')).thenReturn(false);
@@ -22,7 +22,7 @@ void main() {
late Auth auth;
late http.Client httpClient;
late Directory applicationConfigHome;
late Logger logger;
late ShorebirdLogger logger;
late LoginCommand command;
R runWithOverrides<R>(R Function() body) {
@@ -44,7 +44,7 @@ void main() {
results = MockArgResults();
auth = MockAuth();
httpClient = MockHttpClient();
logger = MockLogger();
logger = MockShorebirdLogger();
when(() => results.wasParsed('provider')).thenReturn(false);
when(() => results['provider']).thenReturn(null);
@@ -12,7 +12,7 @@ import '../mocks.dart';
void main() {
group(LogoutCommand, () {
late Auth auth;
late Logger logger;
late ShorebirdLogger logger;
late http.Client httpClient;
late LogoutCommand command;
@@ -29,7 +29,7 @@ void main() {
setUp(() {
auth = MockAuth();
httpClient = MockHttpClient();
logger = MockLogger();
logger = MockShorebirdLogger();
when(() => auth.client).thenReturn(httpClient);
when(() => logger.progress(any())).thenReturn(MockProgress());
@@ -98,7 +98,7 @@ void main() {
late PatchDiffChecker patchDiffChecker;
late Platform platform;
late Progress progress;
late Logger logger;
late ShorebirdLogger logger;
late ShorebirdProcessResult flutterBuildProcessResult;
late ShorebirdProcessResult flutterPubGetProcessResult;
late http.Client httpClient;
@@ -186,7 +186,7 @@ void main() {
patchDiffChecker = MockPatchDiffChecker();
platform = MockPlatform();
progress = MockProgress();
logger = MockLogger();
logger = MockShorebirdLogger();
flutterBuildProcessResult = MockProcessResult();
flutterPubGetProcessResult = MockProcessResult();
httpClient = MockHttpClient();
@@ -112,7 +112,7 @@ flutter:
late PatchDiffChecker patchDiffChecker;
late Platform platform;
late Progress progress;
late Logger logger;
late ShorebirdLogger logger;
late ShorebirdEnv shorebirdEnv;
late ShorebirdProcessResult flutterBuildProcessResult;
late ShorebirdProcessResult flutterPubGetProcessResult;
@@ -210,7 +210,7 @@ flutter:
patchDiffChecker = MockPatchDiffChecker();
platform = MockPlatform();
progress = MockProgress();
logger = MockLogger();
logger = MockShorebirdLogger();
flutterBuildProcessResult = MockProcessResult();
flutterPubGetProcessResult = MockProcessResult();
httpClient = MockHttpClient();
@@ -163,7 +163,7 @@ flutter:
late Ios ios;
late IosArchiveDiffer archiveDiffer;
late Progress progress;
late Logger logger;
late ShorebirdLogger logger;
late OperatingSystemInterface operatingSystemInterface;
late PatchDiffChecker patchDiffChecker;
late Platform platform;
@@ -318,7 +318,7 @@ flutter:
..createSync(recursive: true);
archiveDiffer = MockIosArchiveDiffer();
progress = MockProgress();
logger = MockLogger();
logger = MockShorebirdLogger();
platform = MockPlatform();
aotBuildProcessResult = MockProcessResult();
flutterBuildProcessResult = MockProcessResult();
@@ -119,7 +119,7 @@ flutter:
late Platform platform;
late Auth auth;
late OperatingSystemInterface operatingSystemInterface;
late Logger logger;
late ShorebirdLogger logger;
late Progress progress;
late ShorebirdProcessResult aotBuildProcessResult;
late ShorebirdProcessResult flutterBuildProcessResult;
@@ -251,7 +251,7 @@ flutter:
)..createSync(recursive: true);
auth = MockAuth();
progress = MockProgress();
logger = MockLogger();
logger = MockShorebirdLogger();
aotBuildProcessResult = MockProcessResult();
flutterBuildProcessResult = MockProcessResult();
flutterPubGetProcessResult = MockProcessResult();
@@ -37,7 +37,7 @@ void main() {
late ArtifactManager artifactManager;
late CodePushClientWrapper codePushClientWrapper;
late Directory projectRoot;
late Logger logger;
late ShorebirdLogger logger;
late Platform platform;
late Progress progress;
late ShorebirdEnv shorebirdEnv;
@@ -96,7 +96,7 @@ void main() {
platform = MockPlatform();
progress = MockProgress();
projectRoot = Directory.systemTemp.createTempSync();
logger = MockLogger();
logger = MockShorebirdLogger();
shorebirdEnv = MockShorebirdEnv();
shorebirdFlutter = MockShorebirdFlutter();
shorebirdValidator = MockShorebirdValidator();
@@ -38,7 +38,7 @@ void main() {
late Doctor doctor;
late Platform platform;
late Directory projectRoot;
late Logger logger;
late ShorebirdLogger logger;
late Progress progress;
late ShorebirdFlutterValidator flutterValidator;
late ShorebirdProcess shorebirdProcess;
@@ -106,7 +106,7 @@ void main() {
platform = MockPlatform();
progress = MockProgress();
projectRoot = Directory.systemTemp.createTempSync();
logger = MockLogger();
logger = MockShorebirdLogger();
flutterValidator = MockShorebirdFlutterValidator();
shorebirdProcess = MockShorebirdProcess();
shorebirdEnv = MockShorebirdEnv();
@@ -76,7 +76,7 @@ void main() {
late ArtifactBuilder artifactBuilder;
late ArtifactManager artifactManager;
late CodePushClientWrapper codePushClientWrapper;
late Logger logger;
late ShorebirdLogger logger;
late PatchDiffChecker patchDiffChecker;
late Patcher patcher;
late Progress progress;
@@ -120,7 +120,7 @@ void main() {
artifactBuilder = MockArtifactBuilder();
artifactManager = MockArtifactManager();
codePushClientWrapper = MockCodePushClientWrapper();
logger = MockLogger();
logger = MockShorebirdLogger();
progress = MockProgress();
patchDiffChecker = MockPatchDiffChecker();
patcher = MockPatcher();
@@ -43,7 +43,7 @@ void main() {
late Auth auth;
late Cache cache;
late CodePushClientWrapper codePushClientWrapper;
late Logger logger;
late ShorebirdLogger logger;
late Directory previewDirectory;
late Platform platform;
late Progress progress;
@@ -102,7 +102,7 @@ void main() {
auth = MockAuth();
cache = MockCache();
codePushClientWrapper = MockCodePushClientWrapper();
logger = MockLogger();
logger = MockShorebirdLogger();
platform = MockPlatform();
previewDirectory = Directory.systemTemp.createTempSync();
progress = MockProgress();
@@ -70,7 +70,7 @@ void main() {
late OperatingSystemInterface operatingSystemInterface;
late Platform platform;
late Progress progress;
late Logger logger;
late ShorebirdLogger logger;
late ShorebirdProcessResult flutterBuildProcessResult;
late ShorebirdProcessResult flutterPubGetProcessResult;
late ShorebirdEnv shorebirdEnv;
@@ -141,7 +141,7 @@ void main() {
operatingSystemInterface = MockOperatingSystemInterface();
platform = MockPlatform();
progress = MockProgress();
logger = MockLogger();
logger = MockShorebirdLogger();
flutterBuildProcessResult = MockProcessResult();
flutterPubGetProcessResult = MockProcessResult();
shorebirdProcess = MockShorebirdProcess();
@@ -76,7 +76,7 @@ void main() {
late Auth auth;
late Cache cache;
late Java java;
late Logger logger;
late ShorebirdLogger logger;
late OperatingSystemInterface operatingSystemInterface;
late Progress progress;
late ShorebirdProcessResult flutterAppbundleBuildProcessResult;
@@ -139,7 +139,7 @@ void main() {
cache = MockCache();
java = MockJava();
progress = MockProgress();
logger = MockLogger();
logger = MockShorebirdLogger();
flutterAppbundleBuildProcessResult = MockProcessResult();
flutterApkBuildProcessResult = MockProcessResult();
flutterPubGetProcessResult = MockProcessResult();
@@ -120,7 +120,7 @@ flutter:
late Platform platform;
late Auth auth;
late Progress progress;
late Logger logger;
late ShorebirdLogger logger;
late Ios ios;
late OperatingSystemInterface operatingSystemInterface;
late ShorebirdProcessResult flutterBuildProcessResult;
@@ -205,7 +205,7 @@ flutter:
auth = MockAuth();
operatingSystemInterface = MockOperatingSystemInterface();
progress = MockProgress();
logger = MockLogger();
logger = MockShorebirdLogger();
ios = MockIos();
flutterBuildProcessResult = MockProcessResult();
flutterPubGetProcessResult = MockProcessResult();
@@ -77,7 +77,7 @@ flutter:
late Platform platform;
late Auth auth;
late Progress progress;
late Logger logger;
late ShorebirdLogger logger;
late OperatingSystemInterface operatingSystemInterface;
late ShorebirdProcessResult flutterBuildProcessResult;
late ShorebirdProcessResult flutterPubGetProcessResult;
@@ -148,7 +148,7 @@ flutter:
projectRoot = Directory.systemTemp.createTempSync();
auth = MockAuth();
progress = MockProgress();
logger = MockLogger();
logger = MockShorebirdLogger();
operatingSystemInterface = MockOperatingSystemInterface();
flutterBuildProcessResult = MockProcessResult();
flutterPubGetProcessResult = MockProcessResult();
@@ -36,7 +36,7 @@ void main() {
late CodePushClientWrapper codePushClientWrapper;
late Platform platform;
late Directory projectRoot;
late Logger logger;
late ShorebirdLogger logger;
late OperatingSystemInterface operatingSystemInterface;
late Progress progress;
late ShorebirdProcess shorebirdProcess;
@@ -82,7 +82,7 @@ void main() {
platform = MockPlatform();
progress = MockProgress();
projectRoot = Directory.systemTemp.createTempSync();
logger = MockLogger();
logger = MockShorebirdLogger();
shorebirdProcess = MockShorebirdProcess();
shorebirdEnv = MockShorebirdEnv();
shorebirdFlutter = MockShorebirdFlutter();
@@ -36,7 +36,7 @@ void main() {
late Doctor doctor;
late Platform platform;
late Directory projectRoot;
late Logger logger;
late ShorebirdLogger logger;
late OperatingSystemInterface operatingSystemInterface;
late Progress progress;
late ShorebirdFlutterValidator flutterValidator;
@@ -85,7 +85,7 @@ void main() {
platform = MockPlatform();
progress = MockProgress();
projectRoot = Directory.systemTemp.createTempSync();
logger = MockLogger();
logger = MockShorebirdLogger();
flutterValidator = MockShorebirdFlutterValidator();
shorebirdProcess = MockShorebirdProcess();
shorebirdEnv = MockShorebirdEnv();
@@ -38,7 +38,7 @@ void main() {
late Doctor doctor;
late Platform platform;
late Directory projectRoot;
late Logger logger;
late ShorebirdLogger logger;
late OperatingSystemInterface operatingSystemInterface;
late Progress progress;
late ShorebirdFlutterValidator flutterValidator;
@@ -87,7 +87,7 @@ void main() {
platform = MockPlatform();
progress = MockProgress();
projectRoot = Directory.systemTemp.createTempSync();
logger = MockLogger();
logger = MockShorebirdLogger();
shorebirdProcess = MockShorebirdProcess();
shorebirdEnv = MockShorebirdEnv();
flutterValidator = MockShorebirdFlutterValidator();
@@ -40,7 +40,7 @@ void main() {
late Doctor doctor;
late Platform platform;
late Progress progress;
late Logger logger;
late ShorebirdLogger logger;
late Ios ios;
late OperatingSystemInterface operatingSystemInterface;
late ShorebirdFlutterValidator flutterValidator;
@@ -90,7 +90,7 @@ void main() {
projectRoot = Directory.systemTemp.createTempSync();
operatingSystemInterface = MockOperatingSystemInterface();
progress = MockProgress();
logger = MockLogger();
logger = MockShorebirdLogger();
ios = MockIos();
flutterValidator = MockShorebirdFlutterValidator();
shorebirdProcess = MockShorebirdProcess();
@@ -45,7 +45,7 @@ void main() {
late CodePushClientWrapper codePushClientWrapper;
late Directory shorebirdRoot;
late Directory projectRoot;
late Logger logger;
late ShorebirdLogger logger;
late Progress progress;
late Releaser releaser;
late ShorebirdEnv shorebirdEnv;
@@ -78,7 +78,7 @@ void main() {
setUp(() {
argResults = MockArgResults();
codePushClientWrapper = MockCodePushClientWrapper();
logger = MockLogger();
logger = MockShorebirdLogger();
progress = MockProgress();
releaser = MockReleaser();
shorebirdRoot = Directory.systemTemp.createTempSync();
@@ -20,7 +20,7 @@ void main() {
group(RunCommand, () {
late ArgResults argResults;
late Doctor doctor;
late Logger logger;
late ShorebirdLogger logger;
late Process process;
late ShorebirdProcess shorebirdProcess;
late IOSink ioSink;
@@ -47,7 +47,7 @@ void main() {
setUp(() {
argResults = MockArgResults();
doctor = MockDoctor();
logger = MockLogger();
logger = MockShorebirdLogger();
process = MockProcess();
shorebirdProcess = MockShorebirdProcess();
ioSink = MockIOSink();
@@ -15,7 +15,7 @@ void main() {
const newerShorebirdRevision = 'revision-2';
group('upgrade', () {
late Logger logger;
late ShorebirdLogger logger;
late ShorebirdVersion shorebirdVersion;
late UpgradeCommand command;
@@ -33,7 +33,7 @@ void main() {
final progress = MockProgress();
final progressLogs = <String>[];
logger = MockLogger();
logger = MockShorebirdLogger();
shorebirdVersion = MockShorebirdVersion();
command = runWithOverrides(UpgradeCommand.new);
@@ -19,7 +19,7 @@ void main() {
message: 'error',
);
late Logger logger;
late ShorebirdLogger logger;
late Progress progress;
late Validator noIssuesValidator;
late Validator warningValidator;
@@ -36,7 +36,7 @@ void main() {
}
setUp(() {
logger = MockLogger();
logger = MockShorebirdLogger();
progress = MockProgress();
noIssuesValidator = MockValidator();
warningValidator = MockValidator();
@@ -309,7 +309,7 @@ void main() {
group('installAndLaunchApp', () {
late IDeviceSysLog idevicesyslog;
late Logger logger;
late ShorebirdLogger logger;
late Progress progress;
late String deviceListJsonOutput;
@@ -329,7 +329,7 @@ void main() {
setUp(() {
idevicesyslog = MockIDeviceSysLog();
logger = MockLogger();
logger = MockShorebirdLogger();
progress = MockProgress();
when(() => idevicesyslog.startLogger(device: any(named: 'device')))
@@ -1,6 +1,5 @@
import 'dart:convert';
import 'package:mason_logger/mason_logger.dart';
import 'package:mocktail/mocktail.dart';
import 'package:path/path.dart' as p;
import 'package:scoped/scoped.dart';
@@ -22,7 +21,7 @@ void main() {
late Directory flutterDirectory;
late ShorebirdEnv shorebirdEnv;
late ShorebirdProcess process;
late Logger logger;
late ShorebirdLogger logger;
late Process loggerProcess;
late String idevicesyslogPath;
late IDeviceSysLog idevicesyslog;
@@ -44,7 +43,7 @@ void main() {
device = MockAppleDevice();
flutterDirectory = Directory.systemTemp.createTempSync();
process = MockShorebirdProcess();
logger = MockLogger();
logger = MockShorebirdLogger();
loggerProcess = MockProcess();
shorebirdEnv = MockShorebirdEnv();
idevicesyslog = IDeviceSysLog();
@@ -18,7 +18,7 @@ import '../mocks.dart';
void main() {
group(IOSDeploy, () {
late Logger logger;
late ShorebirdLogger logger;
late Platform platform;
late Progress progress;
late ShorebirdProcess shorebirdProcess;
@@ -40,7 +40,7 @@ void main() {
}
setUp(() {
logger = MockLogger();
logger = MockShorebirdLogger();
platform = MockPlatform();
shorebirdProcess = MockShorebirdProcess();
process = MockProcess();
@@ -1,7 +1,6 @@
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:mason_logger/mason_logger.dart';
import 'package:mocktail/mocktail.dart';
import 'package:scoped/scoped.dart';
import 'package:shorebird_cli/src/http_client/http_client.dart';
@@ -14,7 +13,7 @@ import '../mocks.dart';
void main() {
group(LoggingClient, () {
late http.Client httpClient;
late Logger logger;
late ShorebirdLogger logger;
late LoggingClient loggingClient;
R runWithOverrides<R>(R Function() body) {
@@ -32,7 +31,7 @@ void main() {
setUp(() {
httpClient = MockHttpClient();
logger = MockLogger();
logger = MockShorebirdLogger();
loggingClient = LoggingClient(httpClient: httpClient);
when(() => httpClient.send(any())).thenAnswer(
@@ -0,0 +1,215 @@
import 'dart:io';
import 'package:mocktail/mocktail.dart';
import 'package:path/path.dart' as p;
import 'package:scoped/scoped.dart';
import 'package:shorebird_cli/src/logger.dart';
import 'package:shorebird_cli/src/shorebird_env.dart';
import 'package:test/test.dart';
import 'mocks.dart';
void main() {
group('ShorebirdLogger', () {
late Directory shorebirdRootDir;
late ShorebirdEnv shorebirdEnv;
late ShorebirdLogger shorebirdLogger;
setUp(() {
shorebirdRootDir = Directory.systemTemp.createTempSync('shorebird_logs');
shorebirdEnv = MockShorebirdEnv();
when(() => shorebirdEnv.shorebirdRoot).thenReturn(shorebirdRootDir);
shorebirdLogger = ShorebirdLogger();
});
String readLogFile() {
final logFile = Directory(
p.join(shorebirdRootDir.path, 'logs'),
).listSync().first;
return File(logFile.path).readAsStringSync();
}
test('can be instantiated', () {
expect(
ShorebirdLogger.new,
returnsNormally,
);
});
test('info', () {
runScoped(
() {
shorebirdLogger.info('message');
expect(readLogFile(), contains('[INFO]'));
expect(readLogFile(), contains('message'));
},
values: {
shorebirdEnvRef.overrideWith(() => shorebirdEnv),
},
);
});
test('info with style', () {
runScoped(
() {
shorebirdLogger.info(
'message',
style: (message) => message?.toUpperCase(),
);
expect(readLogFile(), contains('[INFO]'));
expect(readLogFile(), contains('MESSAGE'));
},
values: {
shorebirdEnvRef.overrideWith(() => shorebirdEnv),
},
);
});
test('detail', () {
runScoped(
() {
shorebirdLogger.detail('message');
expect(readLogFile(), contains('[DETAIL]'));
expect(readLogFile(), contains('message'));
},
values: {
shorebirdEnvRef.overrideWith(() => shorebirdEnv),
},
);
});
test('detail with style', () {
runScoped(
() {
shorebirdLogger.detail(
'message',
style: (message) => message?.toUpperCase(),
);
expect(readLogFile(), contains('[DETAIL]'));
expect(readLogFile(), contains('MESSAGE'));
},
values: {
shorebirdEnvRef.overrideWith(() => shorebirdEnv),
},
);
});
test('warn', () {
runScoped(
() {
shorebirdLogger.warn('message');
expect(readLogFile(), contains('[WARN]'));
expect(readLogFile(), contains('message'));
},
values: {
shorebirdEnvRef.overrideWith(() => shorebirdEnv),
},
);
});
test('warn with style', () {
runScoped(
() {
shorebirdLogger.warn(
'message',
style: (message) => message?.toUpperCase(),
);
expect(readLogFile(), contains('[WARN]'));
expect(readLogFile(), contains('MESSAGE'));
},
values: {
shorebirdEnvRef.overrideWith(() => shorebirdEnv),
},
);
});
test('success', () {
runScoped(
() {
shorebirdLogger.success('message');
expect(readLogFile(), contains('[SUCCESS]'));
expect(readLogFile(), contains('message'));
},
values: {
shorebirdEnvRef.overrideWith(() => shorebirdEnv),
},
);
});
test('success with style', () {
runScoped(
() {
shorebirdLogger.success(
'message',
style: (message) => message?.toUpperCase(),
);
expect(readLogFile(), contains('[SUCCESS]'));
expect(readLogFile(), contains('MESSAGE'));
},
values: {
shorebirdEnvRef.overrideWith(() => shorebirdEnv),
},
);
});
test('alert', () {
runScoped(
() {
shorebirdLogger.alert('message');
expect(readLogFile(), contains('[ALERT]'));
expect(readLogFile(), contains('message'));
},
values: {
shorebirdEnvRef.overrideWith(() => shorebirdEnv),
},
);
});
test('alert with style', () {
runScoped(
() {
shorebirdLogger.alert(
'message',
style: (message) => message?.toUpperCase(),
);
expect(readLogFile(), contains('[ALERT]'));
expect(readLogFile(), contains('MESSAGE'));
},
values: {
shorebirdEnvRef.overrideWith(() => shorebirdEnv),
},
);
});
test('err', () {
runScoped(
() {
shorebirdLogger.err('message');
expect(readLogFile(), contains('[ERROR]'));
expect(readLogFile(), contains('message'));
},
values: {
shorebirdEnvRef.overrideWith(() => shorebirdEnv),
},
);
});
test('err with style', () {
runScoped(
() {
shorebirdLogger.err(
'message',
style: (message) => message?.toUpperCase(),
);
expect(readLogFile(), contains('[ERROR]'));
expect(readLogFile(), contains('MESSAGE'));
},
values: {
shorebirdEnvRef.overrideWith(() => shorebirdEnv),
},
);
});
});
}
+3 -2
View File
@@ -23,6 +23,7 @@ import 'package:shorebird_cli/src/doctor.dart';
import 'package:shorebird_cli/src/engine_config.dart';
import 'package:shorebird_cli/src/executables/devicectl/apple_device.dart';
import 'package:shorebird_cli/src/executables/executables.dart';
import 'package:shorebird_cli/src/logger.dart';
import 'package:shorebird_cli/src/os/os.dart';
import 'package:shorebird_cli/src/patch_diff_checker.dart';
import 'package:shorebird_cli/src/platform/platform.dart';
@@ -105,8 +106,6 @@ class MockJwtHeader extends Mock implements JwtHeader {}
class MockJwtPayload extends Mock implements JwtPayload {}
class MockLogger extends Mock implements Logger {}
class MockOperatingSystemInterface extends Mock
implements OperatingSystemInterface {}
@@ -146,6 +145,8 @@ class MockShorebirdFlutter extends Mock implements ShorebirdFlutter {}
class MockShorebirdFlutterValidator extends Mock
implements ShorebirdFlutterValidator {}
class MockShorebirdLogger extends Mock implements ShorebirdLogger {}
class MockShorebirdProcess extends Mock implements ShorebirdProcess {}
class MockShorebirdProcessResult extends Mock
@@ -27,7 +27,7 @@ void main() {
late FileSetDiff assetsFileSetDiff;
late FileSetDiff nativeFileSetDiff;
late http.Client httpClient;
late Logger logger;
late ShorebirdLogger logger;
late Progress progress;
late ShorebirdEnv shorebirdEnv;
late PatchDiffChecker patchDiffChecker;
@@ -53,7 +53,7 @@ void main() {
assetsFileSetDiff = MockFileSetDiff();
nativeFileSetDiff = MockFileSetDiff();
httpClient = MockHttpClient();
logger = MockLogger();
logger = MockShorebirdLogger();
progress = MockProgress();
shorebirdEnv = MockShorebirdEnv();
patchDiffChecker = PatchDiffChecker();
@@ -1,5 +1,4 @@
import 'package:archive/archive_io.dart';
import 'package:mason_logger/mason_logger.dart';
import 'package:mocktail/mocktail.dart';
import 'package:path/path.dart' as p;
import 'package:scoped/scoped.dart';
@@ -18,7 +17,7 @@ void main() {
late Directory projectRoot;
late Bundletool bundletool;
late Cache cache;
late Logger logger;
late ShorebirdLogger logger;
late ShorebirdEnv shorebirdEnv;
late ShorebirdAndroidArtifacts shorebirdAndroidArtifacts;
@@ -37,7 +36,7 @@ void main() {
setUp(() {
bundletool = MockBundleTool();
cache = MockCache();
logger = MockLogger();
logger = MockShorebirdLogger();
projectRoot = Directory.systemTemp.createTempSync();
shorebirdEnv = MockShorebirdEnv();
@@ -20,7 +20,7 @@ void main() {
late Directory shorebirdRoot;
late Directory flutterDirectory;
late Git git;
late Logger logger;
late ShorebirdLogger logger;
late Progress progress;
late ShorebirdEnv shorebirdEnv;
late ShorebirdProcess process;
@@ -43,7 +43,7 @@ void main() {
shorebirdRoot = Directory.systemTemp.createTempSync();
flutterDirectory = Directory(p.join(shorebirdRoot.path, 'flutter'));
git = MockGit();
logger = MockLogger();
logger = MockShorebirdLogger();
progress = MockProgress();
shorebirdEnv = MockShorebirdEnv();
process = MockShorebirdProcess();
@@ -19,7 +19,7 @@ void main() {
};
late EngineConfig engineConfig;
late Logger logger;
late ShorebirdLogger logger;
late ProcessWrapper processWrapper;
late Process startProcess;
late ShorebirdProcessResult runProcessResult;
@@ -39,7 +39,7 @@ void main() {
setUp(() {
engineConfig = const EngineConfig.empty();
logger = MockLogger();
logger = MockShorebirdLogger();
processWrapper = MockProcessWrapper();
runProcessResult = MockProcessResult();
startProcess = MockProcess();
@@ -15,7 +15,7 @@ import 'mocks.dart';
void main() {
group(ShorebirdValidator, () {
late Auth auth;
late Logger logger;
late ShorebirdLogger logger;
late Platform platform;
late Validator validator;
late ShorebirdEnv shorebirdEnv;
@@ -35,7 +35,7 @@ void main() {
setUp(() {
auth = MockAuth();
logger = MockLogger();
logger = MockShorebirdLogger();
platform = MockPlatform();
shorebirdEnv = MockShorebirdEnv();
validator = MockValidator();