@@ -46,151 +46,72 @@ load("@rules_python//sphinxdocs:sphinx.bzl", "sphinx_build_binary", "sphinx_docs
4646load ("@rules_python//sphinxdocs:sphinx_docs_library.bzl" , "sphinx_docs_library" )
4747load ("@score_python_basics//:defs.bzl" , "score_virtualenv" )
4848
49- sphinx_requirements = all_requirements + [
50- "@score_docs_as_code//src:plantuml_for_python" ,
51- "@score_docs_as_code//src/extensions:score_plantuml" ,
52- "@score_docs_as_code//src/find_runfiles:find_runfiles" ,
53- "@score_docs_as_code//src/extensions/score_draw_uml_funcs:score_draw_uml_funcs" ,
54- "@score_docs_as_code//src/extensions/score_header_service:score_header_service" ,
55- "@score_docs_as_code//src/extensions/score_layout:score_layout" ,
56- "@score_docs_as_code//src/extensions/score_metamodel:score_metamodel" ,
57- "@score_docs_as_code//src/extensions/score_source_code_linker:score_source_code_linker" ,
58- ]
59-
60- def docs (source_files_to_scan_for_needs_links = None , source_dir = "docs" , conf_dir = "docs" , build_dir_for_incremental = "_build" , docs_targets = [], deps = []):
49+ def docs (source_dir = "docs" , data = [], deps = []):
6150 """
6251 Creates all targets related to documentation.
6352 By using this function, you'll get any and all updates for documentation targets in one place.
64- Current restrictions:
65- * only callable from 'docs/BUILD'
6653 """
6754
68- # We are iterating over all provided 'targets' in order to allow for automatic generation of them without
69- # needing to modify the underlying 'docs.bzl' file.
70- for target in docs_targets :
71- suffix = "_" + target ["suffix" ] if target ["suffix" ] else ""
72- external_needs_deps = target .get ("target" , [])
73- external_needs_def = target .get ("external_needs_info" , [])
74-
75- sphinx_build_binary (
76- name = "sphinx_build" + suffix ,
77- visibility = ["//visibility:public" ],
78- data = ["@score_docs_as_code//src:docs_assets" , "@score_docs_as_code//src:docs_as_code_py_modules" ] + external_needs_deps ,
79- deps = sphinx_requirements + deps ,
80- )
81- _incremental (
82- incremental_name = "incremental" + suffix ,
83- live_name = "live_preview" + suffix ,
84- conf_dir = conf_dir ,
85- source_dir = source_dir ,
86- build_dir = build_dir_for_incremental ,
87- external_needs_deps = external_needs_deps ,
88- external_needs_def = external_needs_def ,
89- extra_dependencies = deps ,
90- )
91- _docs (
92- name = "docs" + suffix ,
93- suffix = suffix ,
94- format = "html" ,
95- external_needs_deps = external_needs_deps ,
96- external_needs_def = external_needs_def ,
97- )
98- _docs (
99- name = "docs_needs" + suffix ,
100- suffix = suffix ,
101- format = "needs" ,
102- external_needs_deps = external_needs_deps ,
103- external_needs_def = external_needs_def ,
104- )
105-
106- # Virtual python environment for working on the documentation (esbonio).
107- # incl. python support when working on conf.py and sphinx extensions.
108- # creates :ide_support target for virtualenv
109- _ide_support (deps )
110-
111- # creates 'needs.json' build target
112-
113- def _incremental (incremental_name = "incremental" , live_name = "live_preview" , source_dir = "docs" , conf_dir = "docs" , build_dir = "_build" , extra_dependencies = list (), external_needs_deps = list (), external_needs_def = None ):
114- """
115- A target for building docs incrementally at runtime, incl live preview.
116- Args:
117- source_code_linker: The source code linker target to be used for linking source code to documentation.
118- source_code_links: The output from the source code linker.
119- source_dir: Directory containing the source files for documentation.
120- conf_dir: Directory containing the Sphinx configuration.
121- build_dir: Directory to output the built documentation.
122- extra_dependencies: Additional dependencies besides the centrally maintained "sphinx_requirements".
123- """
124-
125- dependencies = sphinx_requirements + extra_dependencies + ["@rules_python//python/runfiles" ]
126-
127- # Create description tags for the incremental targets.
128- call_path = native .package_name ()
129- incremental_tag = "cli_help=Build documentation incrementally:\n bazel run //" + call_path + ":" + incremental_name
130-
131- if incremental_name == "incremental_latest" :
132- incremental_tag = (
133- "cli_help=Build documentation incrementally (use current main branch of imported docs repositories " +
134- "(e.g. process_description)):\n " +
135- "bazel run //" + call_path + ":incremental_latest"
136- )
137- elif incremental_name == "incremental_release" :
138- incremental_tag = (
139- "cli_help=Build documentation incrementally (use release version imported in MODULE.bazel):\n " +
140- "bazel run //" + call_path + ":incremental_release"
141- )
55+ data = data + ["@score_docs_as_code//src:docs_assets" ]
56+
57+ deps = deps + all_requirements + [
58+ "@score_docs_as_code//src:plantuml_for_python" ,
59+ "@score_docs_as_code//src/extensions:score_plantuml" ,
60+ "@score_docs_as_code//src/find_runfiles:find_runfiles" ,
61+ "@score_docs_as_code//src/extensions/score_draw_uml_funcs:score_draw_uml_funcs" ,
62+ "@score_docs_as_code//src/extensions/score_header_service:score_header_service" ,
63+ "@score_docs_as_code//src/extensions/score_layout:score_layout" ,
64+ "@score_docs_as_code//src/extensions/score_metamodel:score_metamodel" ,
65+ "@score_docs_as_code//src/extensions/score_source_code_linker:score_source_code_linker" ,
66+ ]
67+
68+ sphinx_build_binary (
69+ name = "sphinx_build" ,
70+ visibility = ["//visibility:private" ],
71+ data = data ,
72+ deps = deps ,
73+ )
14274
14375 py_binary (
144- name = incremental_name ,
76+ name = "docs" ,
77+ tags = ["cli_help=Build documentation [run]" ],
14578 srcs = ["@score_docs_as_code//src:incremental.py" ],
146- deps = dependencies ,
147- # TODO: Figure out if we need all dependencies as data here or not.
148- data = ["@score_docs_as_code//src:plantuml" , "@score_docs_as_code//src:docs_assets" ] + dependencies + external_needs_deps ,
79+ data = data ,
80+ deps = deps ,
14981 env = {
15082 "SOURCE_DIRECTORY" : source_dir ,
151- "CONF_DIRECTORY" : conf_dir ,
152- "BUILD_DIRECTORY" : build_dir ,
153- "EXTERNAL_NEEDS_INFO" : json .encode (external_needs_def ),
83+ "DATA" : str (data ),
15484 "ACTION" : "incremental" ,
15585 },
156- tags = [incremental_tag ],
15786 )
15887
15988 py_binary (
160- name = live_name ,
89+ name = "live_preview" ,
90+ tags = ["cli_help=Live preview documentation in the browser [run]" ],
16191 srcs = ["@score_docs_as_code//src:incremental.py" ],
162- deps = dependencies ,
163- data = [ "@score_docs_as_code//src:plantuml" , "@score_docs_as_code//src:docs_assets" ] + dependencies + external_needs_deps ,
92+ data = data ,
93+ deps = deps ,
16494 env = {
16595 "SOURCE_DIRECTORY" : source_dir ,
166- "CONF_DIRECTORY" : conf_dir ,
167- "BUILD_DIRECTORY" : build_dir ,
168- "EXTERNAL_NEEDS_INFO" : json .encode (external_needs_def ),
96+ "DATA" : str (data ),
16997 "ACTION" : "live_preview" ,
17098 },
17199 )
172100
173- def _ide_support (extra_dependencies ):
174- call_path = native .package_name ()
175101 score_virtualenv (
176102 name = "ide_support" ,
103+ tags = ["cli_help=Create virtual environment (.venv_docs) for documentation support [run]" ],
177104 venv_name = ".venv_docs" ,
178- reqs = sphinx_requirements + extra_dependencies ,
179- tags = [
180- "cli_help=Create virtual environment for documentation:\n " +
181- "bazel run //" + call_path + ":ide_support" ,
182- ],
105+ reqs = deps ,
106+ # Add dependencies to ide_support, so esbonio has access to them.
107+ data = data ,
183108 )
184109
185- def _docs (name = "docs" , suffix = "" , format = "html" , external_needs_deps = list (), external_needs_def = list ()):
186- ext_needs_arg = "--define=external_needs_source=" + json .encode (external_needs_def )
187-
188- # Clean suffix used in all generated target names
189- target_suffix = "" if name == "docs" else "_" + name [len ("docs" ):]
190-
110+ # creates 'needs.json' build target
191111 sphinx_docs (
192- name = name ,
112+ name = "needs_json" ,
193113 srcs = native .glob ([
114+ # TODO: we do not need images etc to generate the json file.
194115 "**/*.png" ,
195116 "**/*.svg" ,
196117 "**/*.md" ,
@@ -206,43 +127,16 @@ def _docs(name = "docs", suffix = "", format = "html", external_needs_deps = lis
206127 "**/*.csv" ,
207128 "**/*.inc" ,
208129 ], exclude = ["**/tests/*" ], allow_empty = True ),
209- config = ":conf.py" ,
130+ config = ":" + source_dir + "/ conf.py" ,
210131 extra_opts = [
211132 "-W" ,
212133 "--keep-going" ,
213- ] + [ext_needs_arg ],
214- formats = [
215- format ,
134+ "-T" , # show more details in case of errors
135+ "--jobs" ,
136+ "auto" ,
137+ "--define=external_needs_source=" + str (data ),
216138 ],
217- sphinx = ":sphinx_build" + suffix ,
218- tags = [
219- "manual" ,
220- ],
221- tools = [
222- "@score_docs_as_code//src:plantuml" ,
223- "@score_docs_as_code//src:docs_assets" ,
224- ] + external_needs_deps ,
225- visibility = ["//visibility:public" ],
226- )
227-
228- native .filegroup (
229- name = "assets" + target_suffix ,
230- srcs = native .glob (["_assets/**" ], allow_empty = True ),
231- visibility = ["//visibility:public" ],
232- )
233-
234- native .filegroup (
235- name = "html" + target_suffix ,
236- srcs = [":" + name ],
237- visibility = ["//visibility:public" ],
238- )
239-
240- pkg_files (
241- name = "html_files" + target_suffix ,
242- srcs = [":html" + target_suffix ],
243- )
244-
245- pkg_tar (
246- name = "github_pages" + target_suffix ,
247- srcs = [":html_files" + target_suffix ],
139+ formats = ["needs" ],
140+ sphinx = ":sphinx_build" ,
141+ tools = data ,
248142 )
0 commit comments