Skip to content

Move a few more grinder tasks to package:args commands #3468

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,6 @@ jobs:
DARTDOC_BOT: ${{ matrix.job }}
- name: ${{ matrix.job }}
if: runner.os == 'Windows' && matrix.job == 'main'
run: dart run grinder buildbot
run: dart run tool\task.dart buildbot
env:
DARTDOC_BOT: ${{ matrix.job }}
6 changes: 3 additions & 3 deletions tool/ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ if [ "$DARTDOC_BOT" = "sdk-docs" ]; then
# silence stdout but echo stderr
echo ""
echo "Building and validating SDK docs..."
dart run grinder validate-sdk-docs
dart run tool/task.dart validate sdk-docs
echo "SDK docs process finished"
elif [ "$DARTDOC_BOT" = "flutter" ]; then
echo "Running flutter dartdoc bot"
dart run grinder build-flutter-docs
dart run tool/task.dart doc flutter
elif [ "$DARTDOC_BOT" = "packages" ]; then
echo "Running packages dartdoc bot"
PACKAGE_NAME=angular PACKAGE_VERSION=">=7.0.0" DARTDOC_PARAMS="--include=angular" dart run grinder build-pub-package
Expand All @@ -30,5 +30,5 @@ elif [ "$DARTDOC_BOT" = "sdk-analyzer" ]; then
dart run grinder test-with-analyzer-sdk
else
echo "Running main dartdoc bot"
dart run grinder buildbot
dart run tool/task.dart buildbot
fi
164 changes: 0 additions & 164 deletions tool/grind.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,51 +13,6 @@ import 'task.dart' as task;

void main(List<String> args) => grind(args);

/// Enable the following experiments for language tests.
final List<String> languageExperiments =
(Platform.environment['LANGUAGE_EXPERIMENTS'] ?? '').split(RegExp(r'\s+'));

// Directory.systemTemp is not a constant. So wrap it.
Directory createTempSync(String prefix) =>
Directory.systemTemp.createTempSync(prefix);

Directory get testPackageFlutterPlugin => Directory(
p.joinAll(['testing', 'flutter_packages', 'test_package_flutter_plugin']));

final Directory _testPackageDocsDir = createTempSync('test_package');

final Directory _testPackageExperimentsDocsDir =
createTempSync('test_package_experiments');

final _whitespacePattern = RegExp(r'\s+');

final List<String> _extraDartdocParameters = [
...?Platform.environment['DARTDOC_PARAMS']?.split(_whitespacePattern),
];

final Directory flutterDirDevTools =
Directory(p.join(task.flutterDir.path, 'dev', 'tools'));

@Task('Run quick presubmit checks.')
void presubmit() async {
await task.analyzeTestPackages();
await task.analyzePackage();
await task.validateFormat();
await task.validateBuild();
await task.runTryPublish();
await task.runTest();
}

@Task('Run tests, self-test dartdoc, and run the publish test')
@Depends(presubmit)
Future<void> buildbot() async {
await task.runTest();
await task.validateDartdocDocs();
}

@Task('Generate docs for the Dart SDK')
Future<void> buildSdkDocs() async => await task.docSdk();

/// Creates a clean version of dartdoc (based on the current directory, assumed
/// to be a git repository), configured to use packages from the Dart SDK.
///
Expand Down Expand Up @@ -127,129 +82,10 @@ Future<void> testWithAnalyzerSdk() async {
}
}

Future<Iterable<Map<String, Object?>>> _buildTestPackageDocs(
String outputDir, String cwd,
{List<String> params = const [],
String label = '',
String? testPackagePath}) async {
if (label != '') label = '-$label';
testPackagePath ??= task.testPackage.absolute.path;
var launcher = SubprocessLauncher('build-test-package-docs$label');
var testPackagePubGet = launcher.runStreamed(
Platform.resolvedExecutable, ['pub', 'get'],
workingDirectory: testPackagePath);
var dartdocPubGet = launcher.runStreamed(
Platform.resolvedExecutable, ['pub', 'get'],
workingDirectory: cwd);
await Future.wait([testPackagePubGet, dartdocPubGet]);
return await launcher.runStreamed(
Platform.resolvedExecutable,
[
'--enable-asserts',
p.join(cwd, 'bin', 'dartdoc.dart'),
'--output',
outputDir,
'--example-path-prefix',
'examples',
'--include-source',
'--json',
'--link-to-remote',
'--pretty-index-json',
...params,
..._extraDartdocParameters,
],
workingDirectory: testPackagePath);
}

@Task('Build generated test package docs from the experiment test package')
@Depends(clean)
Future<void> buildTestExperimentsPackageDocs() async {
await _buildTestPackageDocs(
_testPackageExperimentsDocsDir.absolute.path, Directory.current.path,
testPackagePath: task.testPackageExperiments.absolute.path,
params: [
'--enable-experiment',
'non-nullable,generic-metadata',
'--no-link-to-remote'
]);
}

@Task('Serve experimental test package on port 8003.')
@Depends(buildTestExperimentsPackageDocs)
Future<void> serveTestExperimentsPackageDocs() async =>
await task.servePackageDocs(
name: Platform.environment['PACKAGE_NAME']!,
version: Platform.environment['PACKAGE_VERSION'],
);

@Task('Build test package docs (HTML) with inherited docs and source code')
@Depends(clean)
Future<void> buildTestPackageDocs() async {
await _buildTestPackageDocs(
_testPackageDocsDir.absolute.path, Directory.current.path);
}

@Task('Serve test package docs locally with dhttpd on port 8002')
@Depends(buildTestPackageDocs)
Future<void> serveTestPackageDocs() async {
await startTestPackageDocsServer();
}

Future<void> startTestPackageDocsServer() async {
log('launching dhttpd on port 8002 for SDK');
var launcher = SubprocessLauncher('serve-test-package-docs');
await launcher.runStreamed(Platform.resolvedExecutable, [
'pub',
'global',
'run',
'dhttpd',
'--port',
'8002',
'--path',
_testPackageDocsDir.absolute.path,
]);
}

@Task('Compare warnings in Dartdoc for Flutter')
Future<void> compareFlutterWarnings() async =>
await task.compareFlutterWarnings();

@Task('Build flutter docs')
Future<void> buildFlutterDocs() async => await task.docFlutter();

@Task(
'Build an arbitrary pub package based on PACKAGE_NAME and PACKAGE_VERSION '
'environment variables')
Future<String> buildPubPackage() async => await task.docPackage(
name: Platform.environment['PACKAGE_NAME']!,
version: Platform.environment['PACKAGE_VERSION'],
);

@Task('Rebuild generated files')
@Depends(clean)
Future<void> build() async => task.buildAll();

@Task('Clean up test directories and delete build cache')
Future<void> clean() async {
for (var e in _nonRootPubData) {
e.deleteSync(recursive: true);
}
}

Iterable<FileSystemEntity> get _nonRootPubData {
// This involves deleting things, so be careful.
if (!File(p.join('tool', 'grind.dart')).existsSync()) {
throw FileSystemException('wrong CWD, run from root of dartdoc package');
}
return Directory('.')
.listSync(recursive: true)
.where((e) => p.dirname(e.path) != '.')
.where((e) => <String>['.dart_tool', '.packages', 'pubspec.lock']
.contains(p.basename(e.path)));
}

@Task('Generate docs for dartdoc without link-to-remote')
Future<void> testDartdoc() async => await task.validateDartdocDocs();

@Task('Validate the SDK doc build.')
Future<void> validateSdkDocs() async => await task.validateSdkDocs();
75 changes: 72 additions & 3 deletions tool/task.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ void main(List<String> args) async {
var parser = ArgParser()
..addCommand('analyze')
..addCommand('build')
..addCommand('buildbot')
..addCommand('clean')
..addCommand('compare')
..addCommand('doc')
..addCommand('serve')
Expand All @@ -38,10 +40,10 @@ void main(List<String> args) async {
return switch (commandResults.name) {
'analyze' => await runAnalyze(commandResults),
'build' => await runBuild(commandResults),
'buildbot' => await runBuildbot(),
'clean' => await runClean(),
'compare' => await runCompare(commandResults),
'doc' => await runDoc(commandResults),
// TODO(srawlins): Implement tasks that serve various docs, after generating
// them.
'serve' => await runServe(commandResults),
'test' => await runTest(),
'try-publish' => await runTryPublish(),
Expand Down Expand Up @@ -172,6 +174,31 @@ Stream<String> _dartFileLines(Directory dir) {
]);
}

Future<void> runBuildbot() async {
await analyzeTestPackages();
await analyzePackage();
await validateFormat();
await validateBuild();
await runTryPublish();
await runTest();
await validateDartdocDocs();
}

Future<void> runClean() async {
// This involves deleting things, so be careful.
if (!File(p.join('tool', 'grind.dart')).existsSync()) {
throw FileSystemException('Wrong CWD, run from root of dartdoc package');
}
const pubDataFileNames = {'.dart_tool', '.packages', 'pubspec.lock'};
var nonRootPubData = Directory('.')
.listSync(recursive: true)
.where((e) => p.dirname(e.path) != '.')
.where((e) => pubDataFileNames.contains(p.basename(e.path)));
for (var e in nonRootPubData) {
e.deleteSync(recursive: true);
}
}

Future<void> runCompare(ArgResults commandResults) async {
if (commandResults.rest.length != 1) {
throw ArgumentError('"compare" command requires a single target.');
Expand Down Expand Up @@ -256,6 +283,7 @@ Future<void> runDoc(ArgResults commandResults) async {
'flutter' => await docFlutter(),
'package' => await _docPackage(commandResults),
'sdk' => await docSdk(),
'testing-package' => await docTestingPackage(),
_ => throw UnimplementedError('Unknown doc target: "$target"'),
});
}
Expand Down Expand Up @@ -405,6 +433,31 @@ Map<String, String> createThrowawayPubCache() {
final String _defaultPubCache = Platform.environment['PUB_CACHE'] ??
p.context.resolveTildePath('~/.pub-cache');

Future<void> docTestingPackage() async {
var testPackagePath = testPackage.absolute.path;
var launcher = SubprocessLauncher('doc-test-package');
await launcher.runStreamedDartCommand(['pub', 'get'],
workingDirectory: testPackagePath);
await launcher.runStreamedDartCommand(
[
'--enable-asserts',
p.join(Directory.current.absolute.path, 'bin', 'dartdoc.dart'),
'--output',
_testingPackageDocsDir.absolute.path,
'--example-path-prefix',
'examples',
'--include-source',
'--json',
'--link-to-remote',
'--pretty-index-json',
],
workingDirectory: testPackagePath,
);
}

final Directory _testingPackageDocsDir =
Directory.systemTemp.createTempSync('testing_package');

Future<void> compareSdkWarnings() async {
var originalDartdocSdkDocs =
Directory.systemTemp.createTempSync('dartdoc-comparison-sdkdocs');
Expand Down Expand Up @@ -507,6 +560,7 @@ Future<void> runServe(ArgResults commandResults) async {
'flutter' => await serveFlutterDocs(),
'package' => await _servePackageDocs(commandResults),
'sdk' => await serveSdkDocs(),
'testing-package' => await serveTestingPackageDocs(),
_ => throw UnimplementedError('Unknown serve target: "$target"'),
});
}
Expand Down Expand Up @@ -578,6 +632,21 @@ Future<void> _serveDocsFrom(String servePath, int port, String context) async {
]);
}

Future<void> serveTestingPackageDocs() async {
print('launching dhttpd on port 8002 for SDK');
var launcher = SubprocessLauncher('serve-test-package-docs');
await launcher.runStreamed(Platform.resolvedExecutable, [
'pub',
'global',
'run',
'dhttpd',
'--port',
'8002',
'--path',
_testingPackageDocsDir.absolute.path,
]);
}

Future<void> runTest() async {
await analyzeTestPackages();
await SubprocessLauncher('dart run test')
Expand Down Expand Up @@ -665,7 +734,7 @@ Future<void> validateDartdocDocs() async {
var launcher = SubprocessLauncher('test-dartdoc');
await launcher.runStreamedDartCommand([
'--enable-asserts',
'bin/dartdoc.dart',
p.join('bin', 'dartdoc.dart'),
'--output',
_dartdocDocsPath,
'--no-link-to-remote',
Expand Down