blob: 9e2d335b6c4587037cf29cca1317f1f5c605abd5 [file] [log] [blame]
#!/usr/bin/python
#
# Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
""" This file will run docgen.dart on the SDK libraries, and upload them to
Google Cloud Storage for the documentation viewer.
"""
import optparse
import os
from os.path import join, dirname, abspath, exists
import platform
import subprocess
import sys
sys.path.append(abspath(join(dirname(__file__), '../../../tools')))
import utils
from upload_sdk import ExecuteCommand
DART = abspath(join(dirname(__file__), '../../../%s/%s/dart-sdk/bin/dart'
% (utils.BUILD_ROOT[utils.GuessOS()], utils.GetBuildConf('release',
utils.GuessArchitecture()))))
PACKAGE_ROOT = abspath(join(dirname(__file__), '../../../%s/%s/packages/'
% (utils.BUILD_ROOT[utils.GuessOS()], utils.GetBuildConf('release',
utils.GuessArchitecture()))))
GSUTIL = utils.GetBuildbotGSUtilPath()
GS_SITE = 'gs://dartlang-docgen'
DESCRIPTION='Runs docgen.dart on the SDK libraries, and uploads them to Google \
Cloud Storage for the dartdoc-viewer. '
def GetOptions():
parser = optparse.OptionParser(description=DESCRIPTION)
parser.add_option('--package-root', dest='pkg_root',
help='The package root for dart. (Default is in the build directory.)',
action='store', default=PACKAGE_ROOT)
(options, args) = parser.parse_args()
SetPackageRoot(options.pkg_root)
def SetPackageRoot(path):
global PACKAGE_ROOT
if exists(path):
PACKAGE_ROOT = abspath(path)
def SetGsutil():
""" If not on buildbots, find gsutil relative to docgen. """
global GSUTIL
if not exists(GSUTIL):
GSUTIL = abspath(join(dirname(__file__),
'../../../third_party/gsutil/gsutil'))
def Upload(source, target):
""" Upload files to Google Storage. """
cmd = [GSUTIL, '-m', 'cp', '-q', '-a', 'public-read', '-r', source, target]
(status, output) = ExecuteCommand(cmd)
return status
def main():
GetOptions()
SetGsutil()
# Execute Docgen.dart on the SDK.
ExecuteCommand([DART, '--checked', '--package-root=' + PACKAGE_ROOT,
abspath(join(dirname(__file__), 'docgen.dart')),
'--parse-sdk', '--json'])
# Use SVN Revision to get the revision number.
revision = utils.GetSVNRevision()
if revision is None:
# Try to find the version from the dart-sdk folder.
revision_file_location = abspath(join(dirname(__file__),
'../../../%s/%s/dart-sdk/revision' % (utils.BUILD_ROOT[utils.GuessOS()],
utils.GetBuildConf('release', utils.GuessArchitecture()))))
with open(revision_file_location, 'r') as revision_file:
revision = revision_file.readline(5)
revision_file.close()
if revision is None:
raise Exception("Unable to find revision. ")
# Upload the all files in Docs into a folder based off Revision number on
# Cloud Storage.
Upload('./docs/*', GS_SITE + '/' + revision + '/')
# Update VERSION file in Cloud Storage.
with open('VERSION', 'w') as version_file:
version_file.write(revision)
version_file.close()
Upload('./VERSION', GS_SITE + '/VERSION')
# Clean up the files it creates.
ExecuteCommand(['rm', '-rf', './docs'])
ExecuteCommand(['rm', '-f', './VERSION'])
if __name__ == '__main__':
main()