@@ -120,7 +120,7 @@ def _missing_requirements(deps):
120120 fail (msg )
121121 fail ("This case should be unreachable?!" )
122122
123- def docs (source_dir = "docs" , data = [], deps = [], scan_code = []):
123+ def docs (source_dir = "docs" , data = [], deps = [], scan_code = [], metamodel = None ):
124124 """Creates all targets related to documentation.
125125
126126 By using this function, you'll get any and all updates for documentation targets in one place.
@@ -130,13 +130,23 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = []):
130130 data: Additional data files to include in the documentation build.
131131 deps: Additional dependencies for the documentation build.
132132 scan_code: List of code targets to scan for source code links.
133+ metamodel: Optional label to a metamodel.yaml file. When set, the extension loads this
134+ file instead of the default metamodel shipped with score_metamodel.
133135 """
134136
135137 call_path = native .package_name ()
136138
137139 if call_path != "" :
138140 fail ("docs() must be called from the root package. Current package: " + call_path )
139141
142+ metamodel_data = []
143+ metamodel_env = {}
144+ metamodel_opts = []
145+ if metamodel != None :
146+ metamodel_data = [metamodel ]
147+ metamodel_env = {"SCORE_METAMODEL_YAML" : "$(location " + str (metamodel ) + ")" }
148+ metamodel_opts = ["--define=score_metamodel_yaml=$(location " + str (metamodel ) + ")" ]
149+
140150 module_deps = deps
141151 deps = deps + _missing_requirements (deps )
142152 deps = deps + [
@@ -147,7 +157,7 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = []):
147157 sphinx_build_binary (
148158 name = "sphinx_build" ,
149159 visibility = ["//visibility:private" ],
150- data = data ,
160+ data = data + metamodel_data ,
151161 deps = deps ,
152162 )
153163
@@ -181,28 +191,28 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = []):
181191 name = "docs" ,
182192 tags = ["cli_help=Build documentation:\n bazel run //:docs" ],
183193 srcs = ["@score_docs_as_code//src:incremental.py" ],
184- data = data + [":sourcelinks_json" ],
194+ data = data + [":sourcelinks_json" ] + metamodel_data ,
185195 deps = deps ,
186196 env = {
187197 "SOURCE_DIRECTORY" : source_dir ,
188198 "DATA" : str (data ),
189199 "ACTION" : "incremental" ,
190200 "SCORE_SOURCELINKS" : "$(location :sourcelinks_json)" ,
191- },
201+ } | metamodel_env ,
192202 )
193203
194204 py_binary (
195205 name = "docs_combo" ,
196206 tags = ["cli_help=Build full documentation with all dependencies:\n bazel run //:docs_combo" ],
197207 srcs = ["@score_docs_as_code//src:incremental.py" ],
198- data = data_with_docs_sources + [":merged_sourcelinks" ],
208+ data = data_with_docs_sources + [":merged_sourcelinks" ] + metamodel_data ,
199209 deps = deps ,
200210 env = {
201211 "SOURCE_DIRECTORY" : source_dir ,
202212 "DATA" : str (data_with_docs_sources ),
203213 "ACTION" : "incremental" ,
204214 "SCORE_SOURCELINKS" : "$(location :merged_sourcelinks)" ,
205- },
215+ } | metamodel_env ,
206216 )
207217
208218 native .alias (
@@ -215,55 +225,55 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = []):
215225 name = "docs_link_check" ,
216226 tags = ["cli_help=Verify Links inside Documentation:\n bazel run //:link_check\n (Note: this could take a long time)" ],
217227 srcs = ["@score_docs_as_code//src:incremental.py" ],
218- data = data ,
228+ data = data + metamodel_data ,
219229 deps = deps ,
220230 env = {
221231 "SOURCE_DIRECTORY" : source_dir ,
222232 "DATA" : str (data ),
223233 "ACTION" : "linkcheck" ,
224- },
234+ } | metamodel_env ,
225235 )
226236
227237 py_binary (
228238 name = "docs_check" ,
229239 tags = ["cli_help=Verify documentation:\n bazel run //:docs_check" ],
230240 srcs = ["@score_docs_as_code//src:incremental.py" ],
231- data = data + [":sourcelinks_json" ],
241+ data = data + [":sourcelinks_json" ] + metamodel_data ,
232242 deps = deps ,
233243 env = {
234244 "SOURCE_DIRECTORY" : source_dir ,
235245 "DATA" : str (data ),
236246 "ACTION" : "check" ,
237247 "SCORE_SOURCELINKS" : "$(location :sourcelinks_json)" ,
238- },
248+ } | metamodel_env ,
239249 )
240250
241251 py_binary (
242252 name = "live_preview" ,
243253 tags = ["cli_help=Live preview documentation in the browser:\n bazel run //:live_preview" ],
244254 srcs = ["@score_docs_as_code//src:incremental.py" ],
245- data = data + [":sourcelinks_json" ],
255+ data = data + [":sourcelinks_json" ] + metamodel_data ,
246256 deps = deps ,
247257 env = {
248258 "SOURCE_DIRECTORY" : source_dir ,
249259 "DATA" : str (data ),
250260 "ACTION" : "live_preview" ,
251261 "SCORE_SOURCELINKS" : "$(location :sourcelinks_json)" ,
252- },
262+ } | metamodel_env ,
253263 )
254264
255265 py_binary (
256266 name = "live_preview_combo_experimental" ,
257267 tags = ["cli_help=Live preview full documentation with all dependencies in the browser:\n bazel run //:live_preview_combo_experimental" ],
258268 srcs = ["@score_docs_as_code//src:incremental.py" ],
259- data = data_with_docs_sources + [":merged_sourcelinks" ],
269+ data = data_with_docs_sources + [":merged_sourcelinks" ] + metamodel_data ,
260270 deps = deps ,
261271 env = {
262272 "SOURCE_DIRECTORY" : source_dir ,
263273 "DATA" : str (data_with_docs_sources ),
264274 "ACTION" : "live_preview" ,
265275 "SCORE_SOURCELINKS" : "$(location :merged_sourcelinks)" ,
266- },
276+ } | metamodel_env ,
267277 )
268278
269279 score_virtualenv (
@@ -272,7 +282,7 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = []):
272282 venv_name = ".venv_docs" ,
273283 reqs = deps ,
274284 # Add dependencies to ide_support, so esbonio has access to them.
275- data = data ,
285+ data = data + metamodel_data ,
276286 )
277287
278288 sphinx_docs (
@@ -286,10 +296,10 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = []):
286296 "--jobs" ,
287297 "auto" ,
288298 "--define=external_needs_source=" + str (data ),
289- ],
299+ ] + metamodel_opts ,
290300 formats = ["needs" ],
291301 sphinx = ":sphinx_build" ,
292- tools = data ,
302+ tools = data + metamodel_data ,
293303 visibility = ["//visibility:public" ],
294304 )
295305
0 commit comments