| """Bazel rule for building Sphinx HTML documentation.""" |
| |
| def _sphinx_docs_impl(ctx): |
| html_dir = ctx.actions.declare_directory(ctx.label.name + "/_build/html") |
| doctrees_dir = ctx.actions.declare_directory(ctx.label.name + "/_build/doctrees") |
| |
| config_dir = ctx.file.config.dirname |
| |
| args = ctx.actions.args() |
| args.add("-b", "html") |
| args.add("-d", doctrees_dir.path) |
| args.add(config_dir) |
| args.add(html_dir.path) |
| |
| ctx.actions.run( |
| inputs = ctx.files.srcs + [ctx.file.config], |
| outputs = [html_dir, doctrees_dir], |
| executable = ctx.executable.sphinx, |
| arguments = [args], |
| mnemonic = "SphinxBuild", |
| progress_message = "Building Sphinx HTML docs for %{label}", |
| ) |
| |
| return [DefaultInfo(files = depset([html_dir]))] |
| |
| sphinx_docs = rule( |
| implementation = _sphinx_docs_impl, |
| attrs = { |
| "config": attr.label( |
| allow_single_file = True, |
| mandatory = True, |
| doc = "Sphinx configuration file (conf.py)", |
| ), |
| "sphinx": attr.label( |
| executable = True, |
| cfg = "exec", |
| mandatory = True, |
| doc = "Sphinx build binary", |
| ), |
| "srcs": attr.label_list( |
| allow_files = True, |
| doc = "Source files for the documentation build", |
| ), |
| }, |
| doc = "Builds Sphinx HTML documentation into a tree artifact at <name>/_build/html.", |
| ) |