3
3
// BSD-style license that can be found in the LICENSE file.
4
4
5
5
import 'dart:async' ;
6
- import 'dart:convert' ;
7
6
import 'dart:io' hide ProcessException;
8
7
9
8
import 'package:analyzer/file_system/physical_file_system.dart' ;
10
- import 'package:collection/collection.dart' ;
11
- import 'package:crypto/crypto.dart' as crypto;
12
9
import 'package:dartdoc/src/io_utils.dart' ;
13
10
import 'package:dartdoc/src/package_meta.dart' ;
14
11
import 'package:grinder/grinder.dart' ;
15
12
import 'package:path/path.dart' as p;
16
- import 'package:yaml/yaml.dart' as yaml;
17
13
18
14
import 'subprocess_launcher.dart' ;
15
+ import 'task.dart' as task;
19
16
20
17
void main (List <String > args) => grind (args);
21
18
@@ -115,9 +112,6 @@ Directory cleanFlutterDir = Directory(
115
112
116
113
final Directory _flutterDir = createTempSync ('flutter' );
117
114
118
- final Directory _languageTestPackageDir =
119
- createTempSync ('languageTestPackageDir' );
120
-
121
115
Directory get testPackage => Directory (p.joinAll (['testing' , 'test_package' ]));
122
116
123
117
Directory get testPackageExperiments =>
@@ -248,10 +242,6 @@ void presubmit() {}
248
242
@Depends (presubmit, test, testDartdoc)
249
243
void buildbot () {}
250
244
251
- @Task ('Run buildbot tests, but without publish test' )
252
- @Depends (analyze, checkFormat, checkBuild, test, testDartdoc)
253
- void buildbotNoPublish () {}
254
-
255
245
@Task ('Generate docs for the Dart SDK' )
256
246
Future <void > buildSdkDocs () async {
257
247
log ('building SDK docs' );
@@ -562,26 +552,12 @@ Future<void> buildTestPackageDocs() async {
562
552
_testPackageDocsDir.absolute.path, Directory .current.path);
563
553
}
564
554
565
- @Task ('Build test package docs (Markdown) with inherited docs and source code' )
566
- @Depends (clean)
567
- Future <void > buildTestPackageDocsMd () async {
568
- await _buildTestPackageDocs (
569
- _testPackageDocsDir.absolute.path, Directory .current.path,
570
- params: ['--format' , 'md' ]);
571
- }
572
-
573
555
@Task ('Serve test package docs locally with dhttpd on port 8002' )
574
556
@Depends (buildTestPackageDocs)
575
557
Future <void > serveTestPackageDocs () async {
576
558
await startTestPackageDocsServer ();
577
559
}
578
560
579
- @Task ('Serve test package docs (in Markdown) locally with dhttpd on port 8002' )
580
- @Depends (buildTestPackageDocsMd)
581
- Future <void > serveTestPackageDocsMd () async {
582
- await startTestPackageDocsServer ();
583
- }
584
-
585
561
Future <void > startTestPackageDocsServer () async {
586
562
log ('launching dhttpd on port 8002 for SDK' );
587
563
var launcher = SubprocessLauncher ('serve-test-package-docs' );
@@ -710,86 +686,6 @@ Future<void> serveFlutterDocs() async {
710
686
]);
711
687
}
712
688
713
- @Task ('Serve language test directory docs on port 8004' )
714
- @Depends (buildLanguageTestDocs)
715
- Future <void > serveLanguageTestDocs () async {
716
- log ('launching dhttpd on port 8004 for language tests' );
717
- var launcher = SubprocessLauncher ('serve-language-test-docs' );
718
- await launcher.runStreamed (Platform .resolvedExecutable, ['pub' , 'get' ]);
719
- await launcher.runStreamed (Platform .resolvedExecutable, [
720
- 'pub' ,
721
- 'global' ,
722
- 'run' ,
723
- 'dhttpd' ,
724
- '--port' ,
725
- '8004' ,
726
- '--path' ,
727
- p.join (_languageTestPackageDir.path, 'doc' , 'api' ),
728
- ]);
729
- }
730
-
731
- @Task ('Build docs for a language test directory in the SDK' )
732
- Future <void > buildLanguageTestDocs () async {
733
- // The path to the base directory for language tests.
734
- var languageTestPath = Platform .environment['LANGUAGE_TESTS' ];
735
- if (languageTestPath == null ) {
736
- fail (
737
- 'LANGUAGE_TESTS must be set to the SDK language test directory from which to copy tests' );
738
- }
739
- var launcher = SubprocessLauncher ('build-language-test-docs' );
740
- var pubspecFile = File (p.join (_languageTestPackageDir.path, 'pubspec.yaml' ));
741
- pubspecFile.writeAsStringSync ('''name: _language_test_package
742
- version: 0.0.1
743
- environment:
744
- sdk: '>=${Platform .version .split (' ' ).first }'
745
- ''' );
746
-
747
- var analyzerOptionsFile =
748
- File (p.join (_languageTestPackageDir.path, 'analysis_options.yaml' ));
749
- var analyzerOptions = languageExperiments.map ((e) => ' - $e ' ).join ('\n ' );
750
- analyzerOptionsFile.writeAsStringSync ('''analyzer:
751
- enable-experiment:
752
- $analyzerOptions
753
- ''' );
754
-
755
- var libDir = Directory (p.join (_languageTestPackageDir.path, 'lib' ))
756
- ..createSync ();
757
- var languageTestDir = Directory (p.context.resolveTildePath (languageTestPath));
758
- if (! languageTestDir.existsSync ()) {
759
- fail ('language test dir does not exist: $languageTestDir ' );
760
- }
761
-
762
- for (var entry in languageTestDir.listSync (recursive: true )) {
763
- if (entry is File &&
764
- entry.existsSync () &&
765
- ! entry.path.endsWith ('_error_test.dart' ) &&
766
- ! entry.path.endsWith ('_error_lib.dart' )) {
767
- var destDir = Directory (p.join (
768
- libDir.path,
769
- p.dirname (entry.absolute.path
770
- .replaceFirst (languageTestDir.absolute.path + p.separator, '' ))));
771
- if (! destDir.existsSync ()) destDir.createSync (recursive: true );
772
- copy (entry, destDir);
773
- }
774
- }
775
-
776
- await launcher.runStreamed (Platform .resolvedExecutable, ['pub' , 'get' ],
777
- workingDirectory: _languageTestPackageDir.absolute.path);
778
- await launcher.runStreamed (
779
- Platform .resolvedExecutable,
780
- [
781
- '--enable-asserts' ,
782
- p.join (Directory .current.absolute.path, 'bin' , 'dartdoc.dart' ),
783
- '--json' ,
784
- '--link-to-remote' ,
785
- '--show-progress' ,
786
- '--enable-experiment' ,
787
- languageExperiments.join (',' ),
788
- ..._extraDartdocParameters,
789
- ],
790
- workingDirectory: _languageTestPackageDir.absolute.path);
791
- }
792
-
793
689
@Task ('Validate flutter docs' )
794
690
@Depends (buildFlutterDocs, testDartdocFlutterPlugin)
795
691
void validateFlutterDocs () {}
@@ -982,29 +878,6 @@ Future<void> servePubPackage() async {
982
878
await _serveDocsFrom (await buildPubPackage (), 9000 , 'serve-pub-package' );
983
879
}
984
880
985
- @Task ('Checks that CHANGELOG mentions current version' )
986
- Future <void > checkChangelogHasVersion () async {
987
- var changelog = File ('CHANGELOG.md' );
988
- if (! changelog.existsSync ()) {
989
- fail ('ERROR: No CHANGELOG.md found in ${Directory .current }' );
990
- }
991
-
992
- var version = _getPackageVersion ();
993
-
994
- if (! changelog.readAsLinesSync ().contains ('## $version ' )) {
995
- fail ('ERROR: CHANGELOG.md does not mention version $version ' );
996
- }
997
- }
998
-
999
- String _getPackageVersion () {
1000
- var pubspec = File ('pubspec.yaml' );
1001
- if (! pubspec.existsSync ()) {
1002
- fail ('Cannot find pubspec.yaml in ${Directory .current }' );
1003
- }
1004
- var yamlDoc = yaml.loadYaml (pubspec.readAsStringSync ()) as yaml.YamlMap ;
1005
- return yamlDoc['version' ] as String ;
1006
- }
1007
-
1008
881
@Task ('Rebuild generated files' )
1009
882
@Depends (clean, buildWeb)
1010
883
Future <void > build () async {
@@ -1013,34 +886,13 @@ Future<void> build() async {
1013
886
// issues with Windows.
1014
887
return ;
1015
888
}
1016
- await SubprocessLauncher ('build' ).runStreamed (Platform .resolvedExecutable,
1017
- [p.join ('tool' , 'mustachio' , 'builder.dart' )]);
1018
-
1019
- var version = _getPackageVersion ();
1020
- var dartdocOptions = File ('dartdoc_options.yaml' );
1021
- await dartdocOptions.writeAsString ('''dartdoc:
1022
- linkToSource:
1023
- root: '.'
1024
- uriTemplate: 'https://github.com/dart-lang/dartdoc/blob/v$version /%f%#L%l%'
1025
- ''' );
889
+
890
+ await task.buildRenderers ();
891
+ await task.buildDartdocOptions ();
1026
892
}
1027
893
1028
894
@Task ('Build the web frontend' )
1029
- Future <void > buildWeb () async {
1030
- // Compile the web app.
1031
- var launcher = SubprocessLauncher ('build' );
1032
- await launcher.runStreamed (Platform .resolvedExecutable, [
1033
- 'compile' ,
1034
- 'js' ,
1035
- '--output=lib/resources/docs.dart.js' ,
1036
- 'web/docs.dart' ,
1037
- '-O4' ,
1038
- ]);
1039
- delete (File ('lib/resources/docs.dart.js.deps' ));
1040
-
1041
- final compileSig = await _calcDartFilesSig (Directory ('web' ));
1042
- File (p.join ('web' , 'sig.txt' )).writeAsStringSync ('$compileSig \n ' );
1043
- }
895
+ Future <void > buildWeb () async => await task.buildWeb ();
1044
896
1045
897
/// Paths in this list are relative to lib/.
1046
898
final _generatedFilesList = < String > [
@@ -1089,7 +941,7 @@ Future<void> checkBuild() async {
1089
941
}
1090
942
1091
943
// Verify that the web frontend has been compiled.
1092
- final currentCodeSig = await _calcDartFilesSig (Directory ('web' ));
944
+ final currentCodeSig = await task. calcDartFilesSig (Directory ('web' ));
1093
945
final lastCompileSig =
1094
946
File (p.join ('web' , 'sig.txt' )).readAsStringSync ().trim ();
1095
947
if (currentCodeSig != lastCompileSig) {
@@ -1101,7 +953,6 @@ Future<void> checkBuild() async {
1101
953
}
1102
954
1103
955
@Task ('Dry run of publish to pub.dev' )
1104
- @Depends (checkChangelogHasVersion)
1105
956
Future <void > tryPublish () async {
1106
957
var launcher = SubprocessLauncher ('try-publish' );
1107
958
await launcher
@@ -1273,30 +1124,3 @@ int _findCount(String str, String match) {
1273
1124
}
1274
1125
return count;
1275
1126
}
1276
-
1277
- Future <String > _calcDartFilesSig (Directory dir) async {
1278
- final digest = await _dartFileLines (dir)
1279
- .transform (utf8.encoder)
1280
- .transform (crypto.md5)
1281
- .single;
1282
-
1283
- return digest.bytes
1284
- .map ((byte) => byte.toRadixString (16 ).padLeft (2 , '0' ).toUpperCase ())
1285
- .join ();
1286
- }
1287
-
1288
- /// Yields all of the trimmed lines of all of the `.dart` files in [dir] .
1289
- Stream <String > _dartFileLines (Directory dir) async * {
1290
- final files = dir
1291
- .listSync (recursive: true )
1292
- .whereType <File >()
1293
- .where ((file) => file.path.endsWith ('.dart' ))
1294
- .toList ()
1295
- ..sort ((a, b) => compareAsciiLowerCase (a.path, b.path));
1296
-
1297
- for (var file in files) {
1298
- for (var line in file.readAsLinesSync ()) {
1299
- yield line.trim ();
1300
- }
1301
- }
1302
- }
0 commit comments