@@ -126,7 +126,7 @@ def _missing_requirements(deps):
126126 fail (msg )
127127 fail ("This case should be unreachable?!" )
128128
129- def docs (source_dir = "docs" , data = [], deps = [], scan_code = [], known_good = None ):
129+ def docs (source_dir = "docs" , data = [], deps = [], scan_code = [], known_good = None , metamodel = None ):
130130 """Creates all targets related to documentation.
131131
132132 By using this function, you'll get any and all updates for documentation targets in one place.
@@ -136,13 +136,24 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = [], known_good =
136136 data: Additional data files to include in the documentation build.
137137 deps: Additional dependencies for the documentation build.
138138 scan_code: List of code targets to scan for source code links.
139+ known_good: Optional label to a "known good" JSON file for source links.
140+ metamodel: Optional label to a metamodel.yaml file. When set, the extension loads this
141+ file instead of the default metamodel shipped with score_metamodel.
139142 """
140143
141144 call_path = native .package_name ()
142145
143146 if call_path != "" :
144147 fail ("docs() must be called from the root package. Current package: " + call_path )
145148
149+ metamodel_data = []
150+ metamodel_env = {}
151+ metamodel_opts = []
152+ if metamodel != None :
153+ metamodel_data = [metamodel ]
154+ metamodel_env = {"SCORE_METAMODEL_YAML" : "$(location " + str (metamodel ) + ")" }
155+ metamodel_opts = ["--define=score_metamodel_yaml=$(location " + str (metamodel ) + ")" ]
156+
146157 module_deps = deps
147158 deps = deps + _missing_requirements (deps )
148159 deps = deps + [
@@ -153,7 +164,7 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = [], known_good =
153164 sphinx_build_binary (
154165 name = "sphinx_build" ,
155166 visibility = ["//visibility:private" ],
156- data = data ,
167+ data = data + metamodel_data ,
157168 deps = deps ,
158169 )
159170
@@ -207,19 +218,29 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = [], known_good =
207218 name = "docs" ,
208219 tags = ["cli_help=Build documentation:\n bazel run //:docs" ],
209220 srcs = ["@score_docs_as_code//src:incremental.py" ],
210- data = docs_data ,
221+ data = data + [ ":sourcelinks_json" ] + metamodel_data ,
211222 deps = deps ,
212- env = docs_env
223+ env = {
224+ "SOURCE_DIRECTORY" : source_dir ,
225+ "DATA" : str (data ),
226+ "ACTION" : "incremental" ,
227+ "SCORE_SOURCELINKS" : "$(location :sourcelinks_json)" ,
228+ } | metamodel_env ,
213229 )
214230
215231 docs_sources_env ["ACTION" ] = "incremental"
216232 py_binary (
217233 name = "docs_combo" ,
218234 tags = ["cli_help=Build full documentation with all dependencies:\n bazel run //:docs_combo" ],
219235 srcs = ["@score_docs_as_code//src:incremental.py" ],
220- data = combo_data ,
236+ data = data_with_docs_sources + [ ":merged_sourcelinks" ] + metamodel_data ,
221237 deps = deps ,
222- env = docs_sources_env
238+ env = {
239+ "SOURCE_DIRECTORY" : source_dir ,
240+ "DATA" : str (data_with_docs_sources ),
241+ "ACTION" : "incremental" ,
242+ "SCORE_SOURCELINKS" : "$(location :merged_sourcelinks)" ,
243+ } | metamodel_env ,
223244 )
224245
225246 native .alias (
@@ -233,47 +254,67 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = [], known_good =
233254 name = "docs_link_check" ,
234255 tags = ["cli_help=Verify Links inside Documentation:\n bazel run //:link_check\n (Note: this could take a long time)" ],
235256 srcs = ["@score_docs_as_code//src:incremental.py" ],
236- data = docs_data ,
257+ data = data + metamodel_data ,
237258 deps = deps ,
238- env = docs_env
259+ env = {
260+ "SOURCE_DIRECTORY" : source_dir ,
261+ "DATA" : str (data ),
262+ "ACTION" : "linkcheck" ,
263+ } | metamodel_env ,
239264 )
240265
241266 docs_env ["ACTION" ] = "check"
242267 py_binary (
243268 name = "docs_check" ,
244269 tags = ["cli_help=Verify documentation:\n bazel run //:docs_check" ],
245270 srcs = ["@score_docs_as_code//src:incremental.py" ],
246- data = docs_data ,
271+ data = data + [ ":sourcelinks_json" ] + metamodel_data ,
247272 deps = deps ,
248- env = docs_env
273+ env = {
274+ "SOURCE_DIRECTORY" : source_dir ,
275+ "DATA" : str (data ),
276+ "ACTION" : "check" ,
277+ "SCORE_SOURCELINKS" : "$(location :sourcelinks_json)" ,
278+ } | metamodel_env ,
249279 )
250280
251281 docs_env ["ACTION" ] = "live_preview"
252282 py_binary (
253283 name = "live_preview" ,
254284 tags = ["cli_help=Live preview documentation in the browser:\n bazel run //:live_preview" ],
255285 srcs = ["@score_docs_as_code//src:incremental.py" ],
256- data = docs_data ,
286+ data = data + [ ":sourcelinks_json" ] + metamodel_data ,
257287 deps = deps ,
258- env = docs_env
288+ env = {
289+ "SOURCE_DIRECTORY" : source_dir ,
290+ "DATA" : str (data ),
291+ "ACTION" : "live_preview" ,
292+ "SCORE_SOURCELINKS" : "$(location :sourcelinks_json)" ,
293+ } | metamodel_env ,
259294 )
260295
261296 docs_sources_env ["ACTION" ] = "live_preview"
262297 py_binary (
263298 name = "live_preview_combo_experimental" ,
264299 tags = ["cli_help=Live preview full documentation with all dependencies in the browser:\n bazel run //:live_preview_combo_experimental" ],
265300 srcs = ["@score_docs_as_code//src:incremental.py" ],
266- data = combo_data ,
301+ data = data_with_docs_sources + [ ":merged_sourcelinks" ] + metamodel_data ,
267302 deps = deps ,
268- env = docs_sources_env
303+ env = {
304+ "SOURCE_DIRECTORY" : source_dir ,
305+ "DATA" : str (data_with_docs_sources ),
306+ "ACTION" : "live_preview" ,
307+ "SCORE_SOURCELINKS" : "$(location :merged_sourcelinks)" ,
308+ } | metamodel_env ,
269309 )
270310
271311 py_venv (
272312 name = "ide_support" ,
273313 tags = ["cli_help=Create virtual environment (.venv_docs) for documentation support:\n bazel run //:ide_support" ],
274314 venv_name = ".venv_docs" ,
275315 deps = deps ,
276- data = data ,
316+ # Add dependencies to ide_support, so esbonio has access to them.
317+ data = data + metamodel_data ,
277318 package_collisions = "warning" ,
278319 )
279320
@@ -288,10 +329,10 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = [], known_good =
288329 "--jobs" ,
289330 "auto" ,
290331 "--define=external_needs_source=" + str (data ),
291- ],
332+ ] + metamodel_opts ,
292333 formats = ["needs" ],
293334 sphinx = ":sphinx_build" ,
294- tools = data ,
335+ tools = data + metamodel_data ,
295336 visibility = ["//visibility:public" ],
296337 # Persistent workers cause stale symlinks after dependency version
297338 # changes, corrupting the Bazel cache.
0 commit comments