blob: b0e3109ed3d01754f795a79f7426eb26dc91c6fb [file] [log] [blame] [edit]
// Copyright 2023 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:io';
import 'package:args/command_runner.dart';
import 'package:devtools_tool/model.dart';
import 'package:io/io.dart';
import 'package:path/path.dart' as path;
import '../utils.dart';
const _upgradeFlag = 'upgrade';
class GenerateCodeCommand extends Command {
GenerateCodeCommand() {
argParser.addFlag(
_upgradeFlag,
negatable: false,
help:
'Run pub upgrade on the DevTools packages before performing the code generation.',
);
}
@override
String get name => 'generate-code';
@override
String get description =>
'Performs code generation by running `build_runner build` for required packages.';
@override
Future run() async {
final repo = DevToolsRepo.getInstance();
final processManager = ProcessManager();
final upgrade = argResults![_upgradeFlag] as bool;
if (upgrade) {
await processManager.runProcess(
CliCommand.tool(['pub-get', '--only-main', '--upgrade']),
);
}
for (final packageName in ['devtools_app', 'devtools_test']) {
print('Running build_runner build for $packageName');
final directoryPath = path.join(repo.repoPath, 'packages', packageName);
await processManager.runProcess(
CliCommand.flutter(
[
'pub',
'run',
'build_runner',
'build',
'--delete-conflicting-outputs',
],
),
workingDirectory: directoryPath,
);
}
print('Adding lint ignores for mocks');
final mockFile = File(
path.join(
repo.repoPath,
'packages',
'devtools_test',
'lib',
'src',
'mocks',
'generated.mocks.dart',
),
);
var mockFileContents = mockFile.readAsStringSync();
if (!mockFileContents.contains('require_trailing_commas')) {
mockFileContents = mockFileContents.replaceFirst(
'// ignore_for_file:',
'// ignore_for_file: require_trailing_commas\n// ignore_for_file:',
);
mockFile.writeAsStringSync(mockFileContents);
}
}
}