Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ def assumed_system_requirements(
deps = [],
spec = Label("//bazel/rules/rules_score/trlc/config:score_requirements_model"),
ref_package = "",
image_srcs = [],
**kwargs):
"""Define Assumed System Requirements following S-CORE process guidelines.

Expand Down Expand Up @@ -82,6 +83,7 @@ def assumed_system_requirements(
lobster_config = Label("//bazel/rules/rules_score/lobster/config:assumed_system_requirement"),
spec = spec,
ref_package = ref_package,
image_srcs = image_srcs,
**kwargs
)
trlc_requirements_test(
Expand Down
2 changes: 2 additions & 0 deletions bazel/rules/rules_score/private/component_requirements.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def component_requirements(
deps = [],
spec = Label("//bazel/rules/rules_score/trlc/config:score_requirements_model"),
ref_package = "",
image_srcs = [],
**kwargs):
"""Define component requirements following S-CORE process guidelines.

Expand Down Expand Up @@ -76,6 +77,7 @@ def component_requirements(
lobster_config = Label("//bazel/rules/rules_score/lobster/config:component_requirement"),
spec = spec,
ref_package = ref_package,
image_srcs = image_srcs,
**kwargs
)
trlc_requirements_test(
Expand Down
2 changes: 2 additions & 0 deletions bazel/rules/rules_score/private/feature_requirements.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ def feature_requirements(
deps = [],
spec = Label("//bazel/rules/rules_score/trlc/config:score_requirements_model"),
ref_package = "",
image_srcs = [],
**kwargs):
"""Define feature requirements following S-CORE process guidelines.
Expand Down Expand Up @@ -82,6 +83,7 @@ def feature_requirements(
lobster_config = Label("//bazel/rules/rules_score/lobster/config:feature_requirement"),
spec = spec,
ref_package = ref_package,
image_srcs = image_srcs,
**kwargs
)
trlc_requirements_test(
Expand Down
28 changes: 27 additions & 1 deletion bazel/rules/rules_score/private/requirements.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,26 @@ def _requirements_impl(ctx):
name = ctx.label.name,
)

sphinx_srcs = depset([rendered_file])
image_outputs = []
package_prefix = ctx.label.package + "/"
for image in ctx.files.image_srcs:
relative_path = image.short_path

# Keep `.. image:: img/...` references stable across packages.
# If the source path contains an img segment, stage from there.
img_split = relative_path.split("/img/", 1)
if len(img_split) == 2:
relative_path = "img/" + img_split[1]
elif relative_path.startswith(package_prefix):
relative_path = relative_path[len(package_prefix):]
else:
relative_path = image.basename

output = ctx.actions.declare_file(relative_path)
ctx.actions.symlink(output = output, target_file = image)
image_outputs.append(output)

sphinx_srcs = depset([rendered_file] + image_outputs)

transitive_sphinx = [sphinx_srcs]
for dep in ctx.attr.deps:
Expand Down Expand Up @@ -163,6 +182,11 @@ _score_requirements_rule = rule(
default = Label("//bazel/rules/rules_score/trlc/config:score_requirements_model"),
doc = "TRLC specification target providing the RSL files that define the requirement types. Defaults to the S-CORE requirements model.",
),
"image_srcs": attr.label_list(
allow_files = True,
default = [],
doc = "Image files to stage relative to the rendered requirements RST.",
),
"_renderer": attr.label(
default = Label("@trlc//tools/trlc_rst:trlc_rst"),
executable = True,
Expand All @@ -181,6 +205,7 @@ def score_requirements_rule(
deps = [],
spec = Label("//bazel/rules/rules_score/trlc/config:score_requirements_model"),
ref_package = "",
image_srcs = [],
**kwargs):
"""Macro wrapper around _score_requirements_rule with RST support.

Expand Down Expand Up @@ -213,5 +238,6 @@ def score_requirements_rule(
req_kind = req_kind,
lobster_config = lobster_config,
spec = spec,
image_srcs = image_srcs,
**kwargs
)