1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
#!/usr/bin/env python
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
# This script is used to execute pylint within a tox environment. Depending on which package is being executed against,
# a failure may be suppressed.
from subprocess import check_call, CalledProcessError
import argparse
import os
import logging
import sys
from prep_sphinx_env import should_build_docs
from run_sphinx_apidoc import is_mgmt_package
from pkg_resources import Requirement
import ast
import os
import textwrap
import io
import shutil
from ci_tools.parsing import ParsedSetup
from ci_tools.variables import in_analyze_weekly
logging.getLogger().setLevel(logging.INFO)
root_dir = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", ".."))
ci_doc_dir = os.path.join(root_dir, '_docs')
sphinx_conf_dir = os.path.join(root_dir, 'doc/sphinx')
def in_ci():
return os.getenv('TF_BUILD', False)
def move_output_and_compress(target_dir, package_dir, package_name):
if not os.path.exists(ci_doc_dir):
os.mkdir(ci_doc_dir)
individual_zip_location = os.path.join(ci_doc_dir, package_name, package_name)
shutil.make_archive(individual_zip_location, 'gztar', target_dir)
def sphinx_build(target_dir, output_dir, fail_on_warning):
command_array = [
"sphinx-build",
"-b",
"html",
"-A",
"include_index_link=True",
"-c",
sphinx_conf_dir,
target_dir,
output_dir
]
if fail_on_warning:
command_array.append("-W")
command_array.append("--keep-going")
try:
logging.info("Sphinx build command: {}".format(command_array))
check_call(
command_array
)
except CalledProcessError as e:
logging.error(
"sphinx-build failed for path {} exited with error {}".format(
args.working_directory, e.returncode
)
)
if in_analyze_weekly():
from gh_tools.vnext_issue_creator import create_vnext_issue
create_vnext_issue(args.package_root, "sphinx")
exit(1)
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Run sphinx-build against target folder. Zips and moves resulting files to a root location as well."
)
parser.add_argument(
"-w",
"--workingdir",
dest="working_directory",
help="The unzipped package directory on disk. Usually {distdir}/unzipped/",
required=True,
)
parser.add_argument(
"-o",
"--outputdir",
dest="output_directory",
help="The output location for the generated site. Usually {distdir}/site",
required=True,
)
parser.add_argument(
"-r",
"--root",
dest="package_root",
help="",
required=True,
)
parser.add_argument(
"--inci",
dest="in_ci",
action="store_true",
default=False
)
args = parser.parse_args()
output_dir = os.path.abspath(args.output_directory)
target_dir = os.path.abspath(args.working_directory)
package_dir = os.path.abspath(args.package_root)
pkg_details = ParsedSetup.from_path(package_dir)
if should_build_docs(pkg_details.name):
# Only data-plane libraries run strict sphinx at the moment
fail_on_warning = not is_mgmt_package(pkg_details.name)
sphinx_build(
target_dir,
output_dir,
fail_on_warning=fail_on_warning,
)
if in_ci() or args.in_ci:
move_output_and_compress(output_dir, package_dir, pkg_details.name)
if in_analyze_weekly():
from gh_tools.vnext_issue_creator import close_vnext_issue
close_vnext_issue(pkg_details.name, "sphinx")
else:
logging.info("Skipping sphinx build for {}".format(pkg_details.name))
|