@@ -125,7 +125,7 @@ def _missing_requirements(deps):
125125 fail (msg )
126126 fail ("This case should be unreachable?!" )
127127
128- def docs (source_dir = "docs" , data = [], deps = [], scan_code = [], known_good = None ):
128+ def docs (source_dir = "docs" , data = [], deps = [], scan_code = [], known_good = None , metamodel = None ):
129129 """Creates all targets related to documentation.
130130
131131 By using this function, you'll get any and all updates for documentation targets in one place.
@@ -135,13 +135,24 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = [], known_good =
135135 data: Additional data files to include in the documentation build.
136136 deps: Additional dependencies for the documentation build.
137137 scan_code: List of code targets to scan for source code links.
138+ known_good: Optional label to a "known good" JSON file for source links.
139+ metamodel: Optional label to a metamodel.yaml file. When set, the extension loads this
140+ file instead of the default metamodel shipped with score_metamodel.
138141 """
139142
140143 call_path = native .package_name ()
141144
142145 if call_path != "" :
143146 fail ("docs() must be called from the root package. Current package: " + call_path )
144147
148+ metamodel_data = []
149+ metamodel_env = {}
150+ metamodel_opts = []
151+ if metamodel != None :
152+ metamodel_data = [metamodel ]
153+ metamodel_env = {"SCORE_METAMODEL_YAML" : "$(location " + str (metamodel ) + ")" }
154+ metamodel_opts = ["--define=score_metamodel_yaml=$(location " + str (metamodel ) + ")" ]
155+
145156 module_deps = deps
146157 deps = deps + _missing_requirements (deps )
147158 deps = deps + [
@@ -152,7 +163,7 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = [], known_good =
152163 sphinx_build_binary (
153164 name = "sphinx_build" ,
154165 visibility = ["//visibility:private" ],
155- data = data ,
166+ data = data + metamodel_data ,
156167 deps = deps ,
157168 )
158169
@@ -187,19 +198,19 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = [], known_good =
187198 data_with_docs_sources = _rewrite_needs_json_to_docs_sources (data )
188199 additional_combo_sourcelinks = _rewrite_needs_json_to_sourcelinks (data )
189200 _merge_sourcelinks (name = "merged_sourcelinks" , sourcelinks = [":sourcelinks_json" ] + additional_combo_sourcelinks , known_good = known_good )
190- docs_data = data + [":sourcelinks_json" ]
191- combo_data = data_with_docs_sources + [":merged_sourcelinks" ]
201+ docs_data = data + metamodel_data + [":sourcelinks_json" ]
202+ combo_data = data_with_docs_sources + metamodel_data + [":merged_sourcelinks" ]
192203
193204 docs_env = {
194205 "SOURCE_DIRECTORY" : source_dir ,
195206 "DATA" : str (data ),
196207 "SCORE_SOURCELINKS" : "$(location :sourcelinks_json)" ,
197- }
208+ } | metamodel_env
198209 docs_sources_env = {
199210 "SOURCE_DIRECTORY" : source_dir ,
200211 "DATA" : str (data_with_docs_sources ),
201212 "SCORE_SOURCELINKS" : "$(location :merged_sourcelinks)" ,
202- }
213+ } | metamodel_env
203214 if known_good :
204215 docs_env ["KNOWN_GOOD_JSON" ] = "$(location " + known_good + ")"
205216 docs_sources_env ["KNOWN_GOOD_JSON" ] = "$(location " + known_good + ")"
@@ -293,16 +304,24 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = [], known_good =
293304 "--jobs" ,
294305 "auto" ,
295306 "--define=external_needs_source=" + str (data ),
307+ "--define=score_sourcelinks_json=$(location :sourcelinks_json)" ,
308+ "--define=score_source_code_linker_plain_links=1" ,
296309 ],
297310 formats = ["needs" ],
298311 sphinx = ":sphinx_build" ,
299- tools = data ,
312+ tools = data + [ ":sourcelinks_json" ] ,
300313 visibility = ["//visibility:public" ],
301314 # Persistent workers cause stale symlinks after dependency version
302315 # changes, corrupting the Bazel cache.
303316 allow_persistent_workers = False ,
304317 )
305318
319+ native .alias (
320+ name = "traceability_gate" ,
321+ actual = "@score_docs_as_code//scripts_bazel:traceability_gate" ,
322+ tags = ["cli_help=Enforce traceability coverage thresholds:\n bazel run //:traceability_gate -- --metrics-json bazel-bin/needs_json/_build/needs/metrics.json" ],
323+ )
324+
306325def _sourcelinks_json (name , srcs ):
307326 """
308327 Creates a target that generates a JSON file with source code links.
0 commit comments