in src/doc_builder/commands/build.py [0:0]
def build_command(args):
read_doc_config(args.path_to_docs)
if args.html:
# Error at the beginning if node is not properly installed.
check_node_is_available()
# Error at the beginning if we can't locate the kit folder
kit_folder = locate_kit_folder()
if kit_folder is None:
raise EnvironmentError(
"Using the --html flag requires the kit subfolder of the doc-builder repo. We couldn't find it with "
"the doc-builder package installed, so you need to run the command from inside the doc-builder repo."
)
default_version = get_default_branch_name(args.path_to_docs)
if args.not_python_module and args.version is None:
version = default_version
elif args.version is None:
module = importlib.import_module(args.library_name)
version = module.__version__
if "dev" in version:
version = default_version
else:
version = f"v{version}"
else:
version = args.version
# `version` will always start with prefix `v`
# `version_tag` does not have to start with prefix `v` (see: https://github.com/huggingface/datasets/tags)
version_tag = version
if version != default_version:
doc_config = get_doc_config()
version_prefix = getattr(doc_config, "version_prefix", "v")
version_ = version[1:] # v2.1.0 -> 2.1.0
version_tag = f"{version_prefix}{version_}"
# Disable notebook building for non-master version
if version != default_version:
args.notebook_dir = None
notebook_dir = Path(args.notebook_dir) / args.language if args.notebook_dir is not None else None
output_path = Path(args.build_dir) / args.library_name / version / args.language
print("Building docs for", args.library_name, args.path_to_docs, output_path)
build_doc(
args.library_name,
args.path_to_docs,
output_path,
clean=args.clean,
version=version,
version_tag=version_tag,
language=args.language,
notebook_dir=notebook_dir,
is_python_module=not args.not_python_module,
version_tag_suffix=args.version_tag_suffix,
repo_owner=args.repo_owner,
repo_name=args.repo_name,
)
# dev build should not update _versions.yml
package_doc_path = os.path.join(args.build_dir, args.library_name)
if "pr_" not in version and os.path.isfile(os.path.join(package_doc_path, "_versions.yml")):
update_versions_file(os.path.join(args.build_dir, args.library_name), version, args.path_to_docs)
# If asked, convert the MDX files into HTML files.
if args.html:
with tempfile.TemporaryDirectory() as tmp_dir:
tmp_dir = Path(tmp_dir)
# Copy everything in a tmp dir
shutil.copytree(kit_folder, tmp_dir / "kit")
# Manual copy and overwrite from output_path to tmp_dir / "kit" / "src" / "routes"
# We don't use shutil.copytree as tmp_dir / "kit" / "src" / "routes" exists and contains important files.
svelte_kit_routes_dir = tmp_dir / "kit" / "src" / "routes"
for f in output_path.iterdir():
dest = svelte_kit_routes_dir / f.name
if f.is_dir():
# Remove the dest folder if it exists
if dest.is_dir():
shutil.rmtree(dest)
shutil.copytree(f, dest)
else:
shutil.copy(f, dest)
# make mdx file paths comply with the sveltekit 1.0 routing mechanism
# see more: https://learn.svelte.dev/tutorial/pages
for mdx_file_path in svelte_kit_routes_dir.rglob("*.mdx"):
new_path = sveltify_file_route(mdx_file_path)
parent_path = os.path.dirname(new_path)
os.makedirs(parent_path, exist_ok=True)
shutil.move(mdx_file_path, new_path)
# Move the objects.inv file at the root
if not args.not_python_module:
shutil.move(tmp_dir / "kit" / "src" / "routes" / "objects.inv", tmp_dir / "objects.inv")
# Build doc with node
working_dir = str(tmp_dir / "kit")
print("Installing node dependencies")
subprocess.run(
["npm", "ci"],
stdout=subprocess.PIPE,
check=True,
encoding="utf-8",
cwd=working_dir,
)
env = os.environ.copy()
env["DOCS_LIBRARY"] = (
env["package_name"] or args.library_name if "package_name" in env else args.library_name
)
env["DOCS_VERSION"] = version
env["DOCS_LANGUAGE"] = args.language
print("Building HTML files. This will take a while :-)")
subprocess.run(
["npm", "run", "build"],
stdout=subprocess.PIPE,
check=True,
encoding="utf-8",
cwd=working_dir,
env=env,
)
# Copy result back in the build_dir.
shutil.rmtree(output_path)
shutil.copytree(tmp_dir / "kit" / "build", output_path)
# Move the objects.inv file back
if not args.not_python_module:
shutil.move(tmp_dir / "objects.inv", output_path / "objects.inv")