| Index: infra/bots/recipe_modules/skia/resources/generate_and_upload_doxygen.py
|
| diff --git a/infra/bots/recipe_modules/skia/resources/generate_and_upload_doxygen.py b/infra/bots/recipe_modules/skia/resources/generate_and_upload_doxygen.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..019fbdc5b9c1b10108200e1b450fad5398da7bb0
|
| --- /dev/null
|
| +++ b/infra/bots/recipe_modules/skia/resources/generate_and_upload_doxygen.py
|
| @@ -0,0 +1,77 @@
|
| +#!/usr/bin/env python
|
| +# Copyright 2014 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +
|
| +"""Generate Doxygen documentation."""
|
| +
|
| +
|
| +import datetime
|
| +import os
|
| +import shutil
|
| +import subprocess
|
| +import sys
|
| +
|
| +from common.skia import global_constants
|
| +
|
| +
|
| +DOXYFILE_BASENAME = 'Doxyfile' # must match name of Doxyfile in skia root
|
| +DOXYGEN_BINARY = 'doxygen'
|
| +WORKDIR = os.path.join(os.pardir, 'doxygen_workdir')
|
| +DOXYGEN_CONFIG_DIR = os.path.join(WORKDIR, 'doxygen-config')
|
| +DOXYGEN_WORKING_DIR = os.path.join(WORKDIR, 'doxygen')
|
| +DOXYGEN_GS_PATH = '/'.join(['gs:/', global_constants.GS_GM_BUCKET, 'doxygen'])
|
| +
|
| +IFRAME_FOOTER_TEMPLATE = """
|
| +<html><body><address style="text-align: right;"><small>
|
| +Generated at %s for skia
|
| +by <a href="http://www.doxygen.org/index.html">doxygen</a>
|
| +%s </small></address></body></html>
|
| +"""
|
| +
|
| +
|
| +def recreate_dir(path):
|
| + """Delete and recreate the directory."""
|
| + try:
|
| + shutil.rmtree(path)
|
| + except OSError:
|
| + if os.path.exists(path):
|
| + raise Exception('Could not remove %s' % path)
|
| + os.makedirs(path)
|
| +
|
| +
|
| +def generate_and_upload_doxygen(gsutil_path):
|
| + """Generate Doxygen."""
|
| + # Create empty dir and add static_footer.txt
|
| + recreate_dir(DOXYGEN_WORKING_DIR)
|
| + static_footer_path = os.path.join(DOXYGEN_WORKING_DIR, 'static_footer.txt')
|
| + shutil.copyfile(os.path.join('tools', 'doxygen_footer.txt'),
|
| + static_footer_path)
|
| +
|
| + # Make copy of doxygen config file, overriding any necessary configs,
|
| + # and run doxygen.
|
| + recreate_dir(DOXYGEN_CONFIG_DIR)
|
| + modified_doxyfile = os.path.join(DOXYGEN_CONFIG_DIR, DOXYFILE_BASENAME)
|
| + with open(DOXYFILE_BASENAME, 'r') as reader:
|
| + with open(modified_doxyfile, 'w') as writer:
|
| + shutil.copyfileobj(reader, writer)
|
| + writer.write('OUTPUT_DIRECTORY = %s\n' % DOXYGEN_WORKING_DIR)
|
| + writer.write('HTML_FOOTER = %s\n' % static_footer_path)
|
| + subprocess.check_call([DOXYGEN_BINARY, modified_doxyfile])
|
| +
|
| + # Create iframe_footer.html
|
| + with open(os.path.join(DOXYGEN_WORKING_DIR, 'iframe_footer.html'), 'w') as f:
|
| + f.write(IFRAME_FOOTER_TEMPLATE % (
|
| + datetime.datetime.now().isoformat(' '),
|
| + subprocess.check_output([DOXYGEN_BINARY, '--version']).rstrip()))
|
| +
|
| + # Upload.
|
| + cmd = [gsutil_path, 'cp', '-a', 'public-read', '-R',
|
| + DOXYGEN_WORKING_DIR, DOXYGEN_GS_PATH]
|
| + subprocess.check_call(cmd)
|
| +
|
| +
|
| +if '__main__' == __name__:
|
| + generate_and_upload_doxygen(*sys.argv[1:])
|
| +
|
|
|