Skip to content

Commit

Permalink
feat: specifying a Logger is now optional when using Melos programm…
Browse files Browse the repository at this point in the history
…atically (#219)

Co-authored-by: Mike Diarmid <mike.diarmid@gmail.com>
  • Loading branch information
rrousselGit and Salakar committed Jan 4, 2022
1 parent 096d171 commit 67dbfc5
Show file tree
Hide file tree
Showing 20 changed files with 144 additions and 143 deletions.
2 changes: 1 addition & 1 deletion packages/melos/lib/src/command_runner/base.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ abstract class MelosCommand extends Command<void> {

final MelosWorkspaceConfig config;

Logger get logger =>
Logger? get logger =>
globalResults!['verbose'] as bool ? Logger.verbose() : Logger.standard();

/// The `melos.yaml` configuration for this command.
Expand Down
4 changes: 2 additions & 2 deletions packages/melos/lib/src/command_runner/exec.dart
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ class ExecCommand extends MelosCommand {
final execArgs = argResults!.rest;

if (execArgs.isEmpty) {
logger.stdout(description);
logger.stdout(argParser.usage);
logger?.stdout(description);
logger?.stdout(argParser.usage);
exit(1);
}

Expand Down
4 changes: 2 additions & 2 deletions packages/melos/lib/src/command_runner/run.dart
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ class RunCommand extends MelosCommand {
noSelect: noSelect,
);
} on NoPackageFoundScriptException catch (err) {
logger.stderr(AnsiStyles.yellow(err.toString()));
logger.stdout(usage);
logger?.stderr(AnsiStyles.yellow(err.toString()));
logger?.stdout(usage);
}
}
}
4 changes: 2 additions & 2 deletions packages/melos/lib/src/command_runner/script.dart
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ class ScriptCommand extends MelosCommand {
noSelect: noSelect,
);
} on NoPackageFoundScriptException catch (err) {
logger.stderr(AnsiStyles.yellow(err.toString()));
logger.stdout(usage);
logger?.stderr(AnsiStyles.yellow(err.toString()));
logger?.stdout(usage);
}
}
}
8 changes: 4 additions & 4 deletions packages/melos/lib/src/command_runner/version.dart
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ class VersionCommand extends MelosCommand {

if (argResults!.rest.isNotEmpty) {
if (argResults!.rest.length != 2) {
logger.stdout(
logger?.stdout(
'${AnsiStyles.redBright('ERROR:')} when manually setting a version to '
'apply to a package you must specify both <packageName> and <newVersion> '
'arguments when calling "melos version".',
Expand All @@ -160,7 +160,7 @@ class VersionCommand extends MelosCommand {
version = Version.parse(argResults!.rest[1]);
} catch (_) {
exitCode = 1;
logger.stdout(
logger?.stdout(
'${AnsiStyles.redBright('ERROR:')} version "${argResults!.rest[1]}" is not a valid package version.',
);
return;
Expand Down Expand Up @@ -190,15 +190,15 @@ class VersionCommand extends MelosCommand {
final preid = argResults!['preid'] as String?;

if (asPrerelease && asStableRelease) {
logger.stdout(
logger?.stdout(
'${AnsiStyles.yellow('WARNING:')} graduate & prerelease flags cannot '
'be combined. Versioning will continue with graduate off.',
);
asStableRelease = false;
}

if (updateDependentsVersions && !updateDependentsConstraints) {
logger.stdout(
logger?.stdout(
'${AnsiStyles.yellow('WARNING:')} the setting --dependent-versions is '
'turned on but --dependent-constraints is turned off. Versioning '
'will continue with this setting turned off.',
Expand Down
37 changes: 19 additions & 18 deletions packages/melos/lib/src/commands/bootstrap.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,14 @@ mixin _BootstrapMixin on _CleanMixin {

final pubCommandForLogging =
"${workspace.isFlutterWorkspace ? "flutter " : ""}pub get";
logger.stdout(AnsiStyles.yellow.bold('melos bootstrap'));
logger.stdout(' └> ${AnsiStyles.cyan.bold(workspace.path)}\n');
logger?.stdout(AnsiStyles.yellow.bold('melos bootstrap'));
logger?.stdout(' └> ${AnsiStyles.cyan.bold(workspace.path)}\n');

logger
.stdout('Running "$pubCommandForLogging" in workspace packages...');
logger?.stdout(
'Running "$pubCommandForLogging" in workspace packages...',
);
if (!utils.isCI && workspace.filteredPackages.keys.length > 20) {
logger.stdout(
logger?.stdout(
AnsiStyles.yellow(
'Note: this may take a while in large workspaces such as this one.',
),
Expand All @@ -29,7 +30,7 @@ mixin _BootstrapMixin on _CleanMixin {

try {
await for (final package in _runPubGet(workspace)) {
logger.stdout(
logger?.stdout(
'''
${AnsiStyles.greenBright('✓')} ${AnsiStyles.bold(package.name)}
└> ${AnsiStyles.blue(package.pathRelativeToWorkspace)}''',
Expand All @@ -43,26 +44,26 @@ mixin _BootstrapMixin on _CleanMixin {
rethrow;
}

logger.stdout('');
logger.stdout('Linking workspace packages...');
logger?.stdout('');
logger?.stdout('Linking workspace packages...');

for (final package in workspace.filteredPackages.values) {
await package.linkPackages(workspace);
}

cleanWorkspace(workspace);
logger.stdout(' > $successMessage');
logger?.stdout(' > $successMessage');

if (workspace.config.ide.intelliJ.enabled) {
logger.stdout('');
logger.stdout('Generating IntelliJ IDE files...');
logger?.stdout('');
logger?.stdout('Generating IntelliJ IDE files...');

await cleanIntelliJ(workspace);
await workspace.ide.intelliJ.generate();
logger.stdout(' > $successMessage');
logger?.stdout(' > $successMessage');
}

logger.stdout(
logger?.stdout(
'\n -> ${workspace.filteredPackages.length} plugins bootstrapped',
);
},
Expand Down Expand Up @@ -123,17 +124,17 @@ mixin _BootstrapMixin on _CleanMixin {
.toList()
.join('\n');

logger.stdout(
logger?.stdout(
'''
- ${AnsiStyles.bold.cyan(package.name)}
└> ${AnsiStyles.blue(package.pathRelativeToWorkspace)}''',
);

logger.stderr(' └> ${AnsiStyles.red('Failed to install.')}');
logger?.stderr(' └> ${AnsiStyles.red('Failed to install.')}');

logger.stdout('');
logger.stdout(processStdOutString);
logger.stderr(processStdErrString);
logger?.stdout('');
logger?.stdout(processStdOutString);
logger?.stderr(processStdErrString);
}

// Return a stream of package that completed.
Expand Down
4 changes: 2 additions & 2 deletions packages/melos/lib/src/commands/clean.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ mixin _CleanMixin on _Melos {
workspace,
ScriptLifecycle.clean,
() async {
logger.stdout('Cleaning workspace...');
logger?.stdout('Cleaning workspace...');

/// Cleans the workspace of all files generated by Melos.
cleanWorkspace(workspace);
Expand All @@ -17,7 +17,7 @@ mixin _CleanMixin on _Melos {

await cleanIntelliJ(workspace);

logger.stdout(
logger?.stdout(
'\nWorkspace cleaned. '
'You will need to run the bootstrap command again to use this workspace.',
);
Expand Down
30 changes: 15 additions & 15 deletions packages/melos/lib/src/commands/exec.dart
Original file line number Diff line number Diff line change
Expand Up @@ -94,15 +94,15 @@ mixin _ExecMixin on _Melos {
final prefixLogs = concurrency != 1 && packages.length != 1;

logger
.stdout('${AnsiStyles.yellow(r'$')} ${AnsiStyles.bold("melos exec")}');
logger.stdout(' └> ${AnsiStyles.cyan.bold(execArgsString)}');
logger.stdout(
?.stdout('${AnsiStyles.yellow(r'$')} ${AnsiStyles.bold("melos exec")}');
logger?.stdout(' └> ${AnsiStyles.cyan.bold(execArgsString)}');
logger?.stdout(
' └> ${AnsiStyles.yellow.bold('RUNNING')} (in ${packages.length} packages)',
);

logger.stdout('');
logger?.stdout('');
if (prefixLogs) {
logger.stdout('-' * terminalWidth);
logger?.stdout('-' * terminalWidth);
}

await pool.forEach<Package, void>(packages, (package) async {
Expand All @@ -111,8 +111,8 @@ mixin _ExecMixin on _Melos {
}

if (!prefixLogs) {
logger.stdout('-' * terminalWidth);
logger.stdout(AnsiStyles.bgBlack.bold.italic('${package.name}:'));
logger?.stdout('-' * terminalWidth);
logger?.stdout(AnsiStyles.bgBlack.bold.italic('${package.name}:'));
}

final packageExitCode = await _execForPackage(
Expand All @@ -125,32 +125,32 @@ mixin _ExecMixin on _Melos {
if (packageExitCode > 0) {
failures[package.name] = packageExitCode;
} else if (!prefixLogs) {
logger.stdout(
logger?.stdout(
AnsiStyles.bgBlack.bold.italic('${package.name}: ') +
AnsiStyles.bold.green.bgBlack('SUCCESS'),
);
}
}).drain<void>();

logger.stdout('-' * terminalWidth);
logger.stdout('');
logger?.stdout('-' * terminalWidth);
logger?.stdout('');

logger
.stdout('${AnsiStyles.yellow(r'$')} ${AnsiStyles.bold("melos exec")}');
logger.stdout(' └> ${AnsiStyles.cyan.bold(execArgsString)}');
?.stdout('${AnsiStyles.yellow(r'$')} ${AnsiStyles.bold("melos exec")}');
logger?.stdout(' └> ${AnsiStyles.cyan.bold(execArgsString)}');

if (failures.isNotEmpty) {
logger.stdout(
logger?.stdout(
' └> ${AnsiStyles.red.bold('FAILED')} (in ${failures.length} packages)',
);
for (final packageName in failures.keys) {
logger.stdout(
logger?.stdout(
' └> ${AnsiStyles.yellow(packageName)} (with exit code ${failures[packageName]})',
);
}
exitCode = 1;
} else {
logger.stdout(' └> ${AnsiStyles.green.bold('SUCCESS')}');
logger?.stdout(' └> ${AnsiStyles.green.bold('SUCCESS')}');
}
}
}
18 changes: 9 additions & 9 deletions packages/melos/lib/src/commands/list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ mixin _ListMixin on _Melos {
}

const encoder = JsonEncoder.withIndent(' ');
logger.stdout(encoder.convert(jsonGraph));
logger?.stdout(encoder.convert(jsonGraph));
}

void _listColumn(
Expand All @@ -60,12 +60,12 @@ mixin _ListMixin on _Melos {
required bool long,
}) {
if (workspace.filteredPackages.values.isEmpty) {
logger.stdout(
logger?.stdout(
AnsiStyles.yellow(
'No packages were found with the current filters.',
),
);
logger.stdout(
logger?.stdout(
AnsiStyles.gray(
'Hint: if this is unexpected, '
'try running the command again with a reduced number of filters applied.',
Expand All @@ -89,13 +89,13 @@ mixin _ListMixin on _Melos {
.cast<List<String>>()
.toList(),
);
logger.stdout(table);
logger?.stdout(table);
return;
}

for (final package in workspace.filteredPackages.values) {
if (!showPrivatePackages && package.isPrivate) continue;
logger.stdout(package.name);
logger?.stdout(package.name);
}
}

Expand All @@ -107,7 +107,7 @@ mixin _ListMixin on _Melos {
for (final package in workspace.filteredPackages.values) {
if (package.isPrivate && !showPrivatePackages) continue;
if (long) {
logger.stdout(
logger?.stdout(
<Object>[
package.path,
package.name,
Expand All @@ -116,7 +116,7 @@ mixin _ListMixin on _Melos {
].join(':'),
);
} else {
logger.stdout(package.path);
logger?.stdout(package.path);
}
}
}
Expand Down Expand Up @@ -177,7 +177,7 @@ mixin _ListMixin on _Melos {
}

const encoder = JsonEncoder.withIndent(' ');
logger.stdout(encoder.convert(jsonArrayItems));
logger?.stdout(encoder.convert(jsonArrayItems));
}

void _listGviz(MelosWorkspace workspace) {
Expand Down Expand Up @@ -251,6 +251,6 @@ mixin _ListMixin on _Melos {

buffer.add('}');

logger.stdout(buffer.join('\n'));
logger?.stdout(buffer.join('\n'));
}
}
Loading

0 comments on commit 67dbfc5

Please sign in to comment.