Docs homepage (#3908)
* put an index at root of API docs bucket * ignore all of dev/docs/doc dir, fix a bug, remove private names from doc gen script * tweaks from review
This commit is contained in:
parent
483922d15c
commit
707fe582a6
2
dev/docs/.gitignore
vendored
2
dev/docs/.gitignore
vendored
@ -4,5 +4,5 @@ packages
|
|||||||
pubspec.lock
|
pubspec.lock
|
||||||
|
|
||||||
pubspec.yaml
|
pubspec.yaml
|
||||||
doc/api/
|
doc/
|
||||||
lib/
|
lib/
|
||||||
|
@ -8,9 +8,16 @@ import 'dart:io';
|
|||||||
|
|
||||||
import 'package:path/path.dart' as path;
|
import 'package:path/path.dart' as path;
|
||||||
|
|
||||||
|
const String kDocRoot = 'dev/docs/doc';
|
||||||
|
|
||||||
/// This script expects to run with the cwd as the root of the flutter repo. It
|
/// This script expects to run with the cwd as the root of the flutter repo. It
|
||||||
/// will generate documentation for the packages in `//packages/` and write the
|
/// will generate documentation for the packages in `//packages/` and write the
|
||||||
/// documentation to `//dev/docs/doc/api/`.
|
/// documentation to `//dev/docs/doc/api/`.
|
||||||
|
///
|
||||||
|
/// This script also updates the index.html file so that it can be placed
|
||||||
|
/// at the root of docs.flutter.io. We are keeping the files inside of
|
||||||
|
/// docs.flutter.io/flutter for now, so we need to manipulate paths
|
||||||
|
/// a bit. See https://github.com/flutter/flutter/issues/3900 for more info.
|
||||||
Future<Null> main(List<String> args) async {
|
Future<Null> main(List<String> args) async {
|
||||||
// If we're run from the `tools` dir, set the cwd to the repo root.
|
// If we're run from the `tools` dir, set the cwd to the repo root.
|
||||||
if (path.basename(Directory.current.path) == 'tools')
|
if (path.basename(Directory.current.path) == 'tools')
|
||||||
@ -21,7 +28,7 @@ Future<Null> main(List<String> args) async {
|
|||||||
name: Flutter
|
name: Flutter
|
||||||
dependencies:
|
dependencies:
|
||||||
''');
|
''');
|
||||||
for (String package in _findPackageNames()) {
|
for (String package in findPackageNames()) {
|
||||||
buf.writeln(' $package:');
|
buf.writeln(' $package:');
|
||||||
buf.writeln(' path: ../../packages/$package');
|
buf.writeln(' path: ../../packages/$package');
|
||||||
}
|
}
|
||||||
@ -32,15 +39,15 @@ dependencies:
|
|||||||
libDir.createSync();
|
libDir.createSync();
|
||||||
|
|
||||||
StringBuffer contents = new StringBuffer('library temp_doc;\n\n');
|
StringBuffer contents = new StringBuffer('library temp_doc;\n\n');
|
||||||
for (String libraryRef in _libraryRefs()) {
|
for (String libraryRef in libraryRefs()) {
|
||||||
contents.writeln('import \'package:$libraryRef\';');
|
contents.writeln('import \'package:$libraryRef\';');
|
||||||
}
|
}
|
||||||
new File('dev/docs/lib/temp_doc.dart').writeAsStringSync(contents.toString());
|
new File('dev/docs/lib/temp_doc.dart').writeAsStringSync(contents.toString());
|
||||||
|
|
||||||
// Run pub.
|
// Run pub.
|
||||||
Process process = await Process.start('pub', <String>['get'], workingDirectory: 'dev/docs');
|
Process process = await Process.start('pub', <String>['get'], workingDirectory: 'dev/docs');
|
||||||
_print(process.stdout);
|
printStream(process.stdout);
|
||||||
_print(process.stderr);
|
printStream(process.stderr);
|
||||||
int code = await process.exitCode;
|
int code = await process.exitCode;
|
||||||
if (code != 0)
|
if (code != 0)
|
||||||
exit(code);
|
exit(code);
|
||||||
@ -56,24 +63,61 @@ dependencies:
|
|||||||
'--use-categories'
|
'--use-categories'
|
||||||
];
|
];
|
||||||
|
|
||||||
for (String libraryRef in _libraryRefs()) {
|
for (String libraryRef in libraryRefs()) {
|
||||||
String name = path.basename(libraryRef);
|
String name = path.basename(libraryRef);
|
||||||
args.add('--include-external');
|
args.add('--include-external');
|
||||||
args.add(name.substring(0, name.length - 5));
|
args.add(name.substring(0, name.length - 5));
|
||||||
}
|
}
|
||||||
|
|
||||||
_findSkyServicesLibraryNames().forEach((String libName) {
|
findSkyServicesLibraryNames().forEach((String libName) {
|
||||||
args.add('--include-external');
|
args.add('--include-external');
|
||||||
args.add(libName);
|
args.add(libName);
|
||||||
});
|
});
|
||||||
|
|
||||||
process = await Process.start('pub', args, workingDirectory: 'dev/docs');
|
process = await Process.start('pub', args, workingDirectory: 'dev/docs');
|
||||||
_print(process.stdout);
|
printStream(process.stdout);
|
||||||
_print(process.stderr);
|
printStream(process.stderr);
|
||||||
exit(await process.exitCode);
|
int exitCode = await process.exitCode;
|
||||||
|
|
||||||
|
if (exitCode != 0)
|
||||||
|
exit(exitCode);
|
||||||
|
|
||||||
|
createIndexAndCleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> _findSkyServicesLibraryNames() {
|
/// Creates a custom index.html because we try to maintain old
|
||||||
|
/// paths. Cleanup unused index.html files no longer needed.
|
||||||
|
void createIndexAndCleanup() {
|
||||||
|
print('\nCreating a custom index.html in $kDocRoot/index.html');
|
||||||
|
renameApiDir();
|
||||||
|
copyIndexToRootOfDocs();
|
||||||
|
addHtmlBaseToIndex();
|
||||||
|
putRedirectInOldIndexLocation();
|
||||||
|
print('\nDocs ready to go!');
|
||||||
|
}
|
||||||
|
|
||||||
|
void renameApiDir() {
|
||||||
|
new Directory('$kDocRoot/api').renameSync('$kDocRoot/flutter');
|
||||||
|
}
|
||||||
|
|
||||||
|
File copyIndexToRootOfDocs() {
|
||||||
|
return new File('$kDocRoot/flutter/index.html').copySync('$kDocRoot/index.html');
|
||||||
|
}
|
||||||
|
|
||||||
|
void addHtmlBaseToIndex() {
|
||||||
|
File indexFile = new File('$kDocRoot/index.html');
|
||||||
|
String indexContents = indexFile.readAsStringSync();
|
||||||
|
indexContents = indexContents.replaceFirst('</title>\n',
|
||||||
|
'</title>\n <base href="./flutter/">\n');
|
||||||
|
indexFile.writeAsStringSync(indexContents);
|
||||||
|
}
|
||||||
|
|
||||||
|
void putRedirectInOldIndexLocation() {
|
||||||
|
String metaTag = '<meta http-equiv="refresh" content="0;URL=../index.html">';
|
||||||
|
new File('$kDocRoot/flutter/index.html').writeAsStringSync(metaTag);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> findSkyServicesLibraryNames() {
|
||||||
Directory skyServicesLocation = new Directory('bin/cache/pkg/sky_services/lib');
|
Directory skyServicesLocation = new Directory('bin/cache/pkg/sky_services/lib');
|
||||||
if (!skyServicesLocation.existsSync()) {
|
if (!skyServicesLocation.existsSync()) {
|
||||||
throw 'Did not find sky_services package location in ${skyServicesLocation.path}.';
|
throw 'Did not find sky_services package location in ${skyServicesLocation.path}.';
|
||||||
@ -88,11 +132,11 @@ List<String> _findSkyServicesLibraryNames() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> _findPackageNames() {
|
List<String> findPackageNames() {
|
||||||
return _findPackages().map((Directory dir) => path.basename(dir.path)).toList();
|
return findPackages().map((Directory dir) => path.basename(dir.path)).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Directory> _findPackages() {
|
List<Directory> findPackages() {
|
||||||
return new Directory('packages')
|
return new Directory('packages')
|
||||||
.listSync()
|
.listSync()
|
||||||
.where((FileSystemEntity entity) => entity is Directory)
|
.where((FileSystemEntity entity) => entity is Directory)
|
||||||
@ -104,8 +148,8 @@ List<Directory> _findPackages() {
|
|||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
Iterable<String> _libraryRefs() sync* {
|
Iterable<String> libraryRefs() sync* {
|
||||||
for (Directory dir in _findPackages()) {
|
for (Directory dir in findPackages()) {
|
||||||
String dirName = path.basename(dir.path);
|
String dirName = path.basename(dir.path);
|
||||||
|
|
||||||
for (FileSystemEntity file in new Directory('${dir.path}/lib').listSync()) {
|
for (FileSystemEntity file in new Directory('${dir.path}/lib').listSync()) {
|
||||||
@ -115,7 +159,7 @@ Iterable<String> _libraryRefs() sync* {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _print(Stream<List<int>> stream) {
|
void printStream(Stream<List<int>> stream) {
|
||||||
stream
|
stream
|
||||||
.transform(UTF8.decoder)
|
.transform(UTF8.decoder)
|
||||||
.transform(const LineSplitter())
|
.transform(const LineSplitter())
|
||||||
|
@ -6,14 +6,15 @@ pub global activate dartdoc
|
|||||||
|
|
||||||
# Generate flutter docs into dev/docs/doc/api/.
|
# Generate flutter docs into dev/docs/doc/api/.
|
||||||
(cd dev/tools; pub get)
|
(cd dev/tools; pub get)
|
||||||
|
|
||||||
|
# This script generates a unified doc set, and creates
|
||||||
|
# a custom index.html, placing everything into dev/docs/doc
|
||||||
dart dev/tools/dartdoc.dart
|
dart dev/tools/dartdoc.dart
|
||||||
|
|
||||||
cp dev/docs/google2ed1af765c529f57.html dev/docs/doc/api
|
# Ensure google webmaster tools can verify our site.
|
||||||
|
cp dev/docs/google2ed1af765c529f57.html dev/docs/doc
|
||||||
|
|
||||||
# Upload the docs.
|
# Upload the docs.
|
||||||
if [ "$1" = "--upload" ]; then
|
if [ "$1" = "--upload" ]; then
|
||||||
# TODO: delete this line when we publish our API docs into the
|
gsutil -m rsync -d -r dev/docs/doc/ gs://docs.flutter.io/
|
||||||
# root of the bucket
|
|
||||||
gsutil cp dev/docs/google2ed1af765c529f57.html gs://docs.flutter.io
|
|
||||||
gsutil -m rsync -d -r dev/docs/doc/api gs://docs.flutter.io/flutter
|
|
||||||
fi
|
fi
|
||||||
|
Loading…
x
Reference in New Issue
Block a user