Skip to content

Commit e521641

Browse files
committed
[rules score] add images to requirements
1 parent fbfef8e commit e521641

20 files changed

Lines changed: 406 additions & 9 deletions

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ repos:
3131
rev: a1bb792acda6fd0724936b4ebbdbc8eceb9c0459 # v6.2.0
3232
hooks:
3333
- id: reuse-lint-file
34-
exclude: \.(svg|tpl|txt|conf|lock|json|in)$
34+
exclude: \.(svg|tpl|txt|conf|lock|json|in|png)$
3535
- repo: local
3636
hooks:
3737
- id: copyright

MODULE.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ use_repo(pip, "manual_analysis_deps")
291291
bazel_dep(name = "trlc", version = "0.0.0")
292292
git_override(
293293
module_name = "trlc",
294-
commit = "08ff8c7d6c362153392003c671a9799a446b0db5",
294+
commit = "7f06d0396fd0e5f02b657d25700775af5113b7e0",
295295
remote = "https://github.com/bmw-software-engineering/trlc.git",
296296
)
297297

bazel/rules/rules_score/private/assumed_system_requirements.bzl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def assumed_system_requirements(
3333
spec = Label("//bazel/rules/rules_score/trlc/config:score_requirements_model"),
3434
lobster_config = Label("//bazel/rules/rules_score/lobster/config:assumed_system_requirement"),
3535
ref_package = "",
36+
image_srcs = [],
3637
**kwargs):
3738
"""Define Assumed System Requirements following S-CORE process guidelines.
3839
@@ -85,6 +86,7 @@ def assumed_system_requirements(
8586
lobster_config = lobster_config,
8687
spec = spec,
8788
ref_package = ref_package,
89+
image_srcs = image_srcs,
8890
**kwargs
8991
)
9092
trlc_requirements_test(

bazel/rules/rules_score/private/component_requirements.bzl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ def component_requirements(
3232
spec = Label("//bazel/rules/rules_score/trlc/config:score_requirements_model"),
3333
lobster_config = Label("//bazel/rules/rules_score/lobster/config:component_requirement"),
3434
ref_package = "",
35+
image_srcs = [],
3536
**kwargs):
3637
"""Define component requirements following S-CORE process guidelines.
3738
@@ -79,6 +80,7 @@ def component_requirements(
7980
lobster_config = lobster_config,
8081
spec = spec,
8182
ref_package = ref_package,
83+
image_srcs = image_srcs,
8284
**kwargs
8385
)
8486
trlc_requirements_test(

bazel/rules/rules_score/private/feature_requirements.bzl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def feature_requirements(
3333
spec = Label("//bazel/rules/rules_score/trlc/config:score_requirements_model"),
3434
lobster_config = Label("//bazel/rules/rules_score/lobster/config:feature_requirement"),
3535
ref_package = "",
36+
image_srcs = [],
3637
**kwargs):
3738
"""Define feature requirements following S-CORE process guidelines.
3839
@@ -85,6 +86,7 @@ def feature_requirements(
8586
lobster_config = lobster_config,
8687
spec = spec,
8788
ref_package = ref_package,
89+
image_srcs = image_srcs,
8890
**kwargs
8991
)
9092
trlc_requirements_test(

bazel/rules/rules_score/private/requirements.bzl

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public-facing macros.
2020
"""
2121

2222
load("@lobster//:lobster.bzl", "subrule_lobster_trlc")
23-
load("@trlc//:trlc.bzl", "TrlcProviderInfo")
23+
load("@trlc//:trlc.bzl", "TrlcProviderInfo", "subrule_trlc_image_stage")
2424
load("//bazel/rules/rules_score:providers.bzl", "AssumedSystemRequirementsInfo", "ComponentRequirementsInfo", "FeatureRequirementsInfo", "SphinxSourcesInfo")
2525
load("//bazel/rules/rules_score/private:rst_to_trlc.bzl", "rst_to_trlc")
2626

@@ -105,7 +105,9 @@ def _requirements_impl(ctx):
105105
name = ctx.label.name,
106106
)
107107

108-
sphinx_srcs = depset([rendered_file])
108+
image_outputs = subrule_trlc_image_stage(ctx.files.image_srcs)
109+
110+
sphinx_srcs = depset([rendered_file] + image_outputs)
109111

110112
transitive_sphinx = [sphinx_srcs]
111113
for dep in ctx.attr.deps:
@@ -163,14 +165,19 @@ _score_requirements_rule = rule(
163165
default = Label("//bazel/rules/rules_score/trlc/config:score_requirements_model"),
164166
doc = "TRLC specification target providing the RSL files that define the requirement types. Defaults to the S-CORE requirements model.",
165167
),
168+
"image_srcs": attr.label_list(
169+
allow_files = [".svg"],
170+
default = [],
171+
doc = "SVG image files to stage next to the rendered RST. The package-relative path of each file (e.g. 'diagrams/arch.svg') must match the path written in a ``.. image::`` directive inside the requirement description field. Only SVG files are permitted.",
172+
),
166173
"_renderer": attr.label(
167174
default = Label("@trlc//tools/trlc_rst:trlc_rst"),
168175
executable = True,
169176
cfg = "exec",
170177
doc = "TRLC-to-RST renderer tool.",
171178
),
172179
},
173-
subrules = [subrule_lobster_trlc],
180+
subrules = [subrule_lobster_trlc, subrule_trlc_image_stage],
174181
)
175182

176183
def score_requirements_rule(

bazel/rules/rules_score/test/BUILD

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ load(
3939
"providers_test",
4040
"sphinx_module_test_suite",
4141
)
42+
load(
43+
":requirements_image_test.bzl",
44+
"image_srcs_sphinx_sources_test",
45+
"requirements_image_test_suite",
46+
)
4247
load(
4348
":requirements_rst_test.bzl",
4449
"aous_rst_provider_test",
@@ -694,6 +699,25 @@ aous_rst_sphinx_test(
694699

695700
requirements_rst_test_suite(name = "requirements_rst_tests")
696701

702+
# ============================================================================
703+
# Image srcs Tests
704+
# ============================================================================
705+
706+
# Fixture: feature_requirements with image_srcs
707+
feature_requirements(
708+
name = "feat_req_with_image",
709+
srcs = ["fixtures/seooc_test/feature_requirements.trlc"],
710+
image_srcs = ["fixtures/image_srcs/diagrams/arch.svg"],
711+
deps = [":asr_trlc"],
712+
)
713+
714+
image_srcs_sphinx_sources_test(
715+
name = "image_srcs_sphinx_sources_test",
716+
target_under_test = ":feat_req_with_image",
717+
)
718+
719+
requirements_image_test_suite(name = "requirements_image_tests")
720+
697721
# ============================================================================
698722
# Combined Test Suite
699723
# ============================================================================
@@ -732,15 +756,29 @@ py_test(
732756
deps = ["//bazel/rules/rules_score:rst_to_trlc_lib"],
733757
)
734758

759+
py_test(
760+
name = "test_trlc_rst_image_rendering",
761+
size = "small",
762+
srcs = ["trlc_rst_image_rendering_test.py"],
763+
data = [
764+
"fixtures/image_requirements/image_requirements.trlc",
765+
"fixtures/image_requirements/schema.rsl",
766+
],
767+
main = "trlc_rst_image_rendering_test.py",
768+
deps = ["@trlc//tools/trlc_rst:trlc_rst_lib"],
769+
)
770+
735771
# Combined test suite for all tests
736772
test_suite(
737773
name = "all_tests",
738774
tests = [
775+
":requirements_image_tests",
739776
":requirements_rst_tests",
740777
":seooc_tests",
741778
":sphinx_module_tests",
742779
":test_rst_to_trlc",
743780
":test_safety_analysis_tools",
781+
":test_trlc_rst_image_rendering",
744782
":unit_component_tests",
745783
],
746784
)

bazel/rules/rules_score/test/MODULE.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ register_toolchains(
7171
bazel_dep(name = "trlc", version = "0.0.0")
7272
git_override(
7373
module_name = "trlc",
74-
commit = "c7750ebd0520996e05b9a9bc91eb6a4f62030f22",
74+
commit = "7f06d0396fd0e5f02b657d25700775af5113b7e0",
7575
remote = "https://github.com/bmw-software-engineering/trlc.git",
7676
)
7777

Lines changed: 17 additions & 0 deletions
Loading
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/********************************************************************************
2+
* Copyright (c) 2026 Contributors to the Eclipse Foundation
3+
*
4+
* See the NOTICE file(s) distributed with this work for additional
5+
* information regarding copyright ownership.
6+
*
7+
* This program and the accompanying materials are made available under the
8+
* terms of the Apache License Version 2.0 which is available at
9+
* https://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* SPDX-License-Identifier: Apache-2.0
12+
********************************************************************************/
13+
package ImageTest
14+
15+
Requirement REQ_with_image {
16+
description = '''
17+
The system shall support image rendering in requirements.
18+
19+
![System overview](diagrams/overview.svg)
20+
'''
21+
}
22+
23+
Requirement REQ_no_image {
24+
description = "The system shall operate without images."
25+
}

0 commit comments

Comments
 (0)