Skip to content

Commit

Permalink
Move a few more grinder tasks to package:args commands (#3468)
Browse files Browse the repository at this point in the history
  • Loading branch information
srawlins committed Jul 26, 2023
1 parent f66eb72 commit d44c805
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 171 deletions.
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

0 comments on commit d44c805

Please sign in to comment.