Skip to content

Commit bc5233f

Browse files
hoe-jocastler
authored andcommitted
[rules score]: refactor requirements
1 parent 8da106f commit bc5233f

9 files changed

Lines changed: 356 additions & 450 deletions

File tree

bazel/rules/rules_score/examples/seooc/docs/requirements/BUILD

Lines changed: 11 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -11,99 +11,60 @@
1111
# SPDX-License-Identifier: Apache-2.0
1212
# *******************************************************************************
1313

14-
load("@trlc//:trlc.bzl", "trlc_requirements", "trlc_requirements_test")
15-
load("//bazel/rules/rules_score:rules_score.bzl", "component_requirements", "feature_requirements")
14+
load("//bazel/rules/rules_score:rules_score.bzl", "assumed_system_requirements", "component_requirements", "feature_requirements")
1615
load("//validation/ai_checker:ai_checker.bzl", "trlc_requirements_ai_test")
1716

18-
trlc_requirements(
17+
assumed_system_requirements(
1918
name = "assumed_system_requirements",
2019
srcs = [
2120
"assumed_system_requirements.trlc",
2221
],
23-
spec = [
24-
"//bazel/rules/rules_score/trlc/config:score_requirements_model",
25-
],
2622
visibility = ["//visibility:public"],
2723
)
2824

29-
trlc_requirements_test(
30-
name = "assumed_system_requirements_test",
31-
reqs = [
32-
":assumed_system_requirements",
33-
],
34-
visibility = ["//visibility:public"],
35-
)
36-
37-
trlc_requirements(
38-
name = "feature_requirements_trlc",
25+
feature_requirements(
26+
name = "feature_requirements",
3927
srcs = [
4028
"feature_requirements.trlc",
4129
],
42-
spec = [
43-
"//bazel/rules/rules_score/trlc/config:score_requirements_model",
44-
],
4530
visibility = ["//visibility:public"],
4631
deps = [
4732
":assumed_system_requirements",
4833
],
4934
)
5035

51-
feature_requirements(
52-
name = "feature_requirements",
53-
srcs = [":feature_requirements_trlc"],
54-
visibility = ["//visibility:public"],
55-
)
56-
5736
trlc_requirements_ai_test(
5837
name = "feature_requirements_ai_test",
59-
reqs = [":feature_requirements_trlc"],
38+
reqs = [":feature_requirements"],
6039
tags = ["manual"],
6140
)
6241

63-
trlc_requirements(
64-
name = "component_requirements_trlc",
42+
component_requirements(
43+
name = "component_requirements",
6544
srcs = [
6645
"component_requirements.trlc",
6746
],
68-
spec = [
69-
"//bazel/rules/rules_score/trlc/config:score_requirements_model",
70-
],
7147
visibility = ["//visibility:public"],
7248
deps = [
7349
":assumed_system_requirements",
74-
":feature_requirements_trlc",
50+
":feature_requirements",
7551
],
7652
)
7753

7854
component_requirements(
79-
name = "component_requirements",
80-
srcs = [":component_requirements_trlc"],
81-
visibility = ["//visibility:public"],
82-
)
83-
84-
trlc_requirements(
85-
name = "component_requirements_extra_trlc",
55+
name = "component_requirements_extra",
8656
srcs = [
8757
"component_requirements_extra.trlc",
8858
],
89-
spec = [
90-
"//bazel/rules/rules_score/trlc/config:score_requirements_model",
91-
],
9259
visibility = ["//visibility:public"],
9360
deps = [
9461
":assumed_system_requirements",
95-
":feature_requirements_trlc",
62+
":feature_requirements",
9663
],
9764
)
9865

99-
component_requirements(
100-
name = "component_requirements_extra",
101-
srcs = [":component_requirements_extra_trlc"],
102-
visibility = ["//visibility:public"],
103-
)
104-
10566
trlc_requirements_ai_test(
10667
name = "component_requirements_ai_test",
107-
reqs = [":component_requirements_trlc"],
68+
reqs = [":component_requirements"],
10869
tags = ["manual"],
10970
)
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# *******************************************************************************
2+
# Copyright (c) 2025 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+
14+
"""
15+
Assumed System Requirements build rules for S-CORE projects.
16+
17+
Assumed System Requirements (ASR) are system-level requirements that represent
18+
the assumptions a Safety Element out of Context (SEooC) makes about the system
19+
it will be integrated into. Feature requirements are derived from them.
20+
"""
21+
22+
load("@trlc//:trlc.bzl", "trlc_requirements_test")
23+
load("//bazel/rules/rules_score/private:requirements.bzl", "score_requirements_rule")
24+
25+
# ============================================================================
26+
# Public Macro
27+
# ============================================================================
28+
29+
def assumed_system_requirements(
30+
name,
31+
srcs,
32+
deps = [],
33+
spec = Label("//bazel/rules/rules_score/trlc/config:score_requirements_model"),
34+
ref_package = "",
35+
visibility = None):
36+
"""Define Assumed System Requirements following S-CORE process guidelines.
37+
38+
Creates a target providing AssumedSystemRequirementsInfo, TrlcProviderInfo,
39+
and SphinxSourcesInfo, plus a validation test target ``<name>_test``.
40+
41+
Because this target emits TrlcProviderInfo, downstream requirement targets
42+
(e.g. feature_requirements) can reference it directly in their ``deps``
43+
without any intermediate trlc_requirements wrapper.
44+
45+
Args:
46+
name: The name of the target.
47+
srcs: List of .trlc source files containing AssumedSystemReq records as
48+
defined in the S-CORE requirements model.
49+
deps: Optional list of requirement targets whose TRLC records are needed
50+
for cross-reference parsing. These targets must provide
51+
TrlcProviderInfo. Typically empty for top-level system requirements.
52+
spec: Optional TRLC specification target providing RSL type definitions.
53+
Defaults to the S-CORE requirements model
54+
(``@score_tooling//bazel/rules/rules_score/trlc/config:score_requirements_model``).
55+
Override this when using a custom requirements model.
56+
visibility: Bazel visibility specification for the generated targets.
57+
58+
Generated Targets:
59+
<name>: Main target providing AssumedSystemRequirementsInfo,
60+
TrlcProviderInfo, and SphinxSourcesInfo.
61+
<name>_test: TRLC validation test (runs ``trlc --verify``).
62+
63+
Example:
64+
```starlark
65+
assumed_system_requirements(
66+
name = "asr",
67+
srcs = ["assumed_system_requirements.trlc"],
68+
)
69+
70+
feature_requirements(
71+
name = "feat_req",
72+
srcs = ["feature_requirements.trlc"],
73+
deps = [":asr"],
74+
)
75+
```
76+
"""
77+
score_requirements_rule(
78+
name = name,
79+
srcs = srcs,
80+
deps = deps,
81+
req_kind = "assumed_system",
82+
lobster_config = Label("//bazel/rules/rules_score/lobster/config:assumed_system_requirement"),
83+
spec = spec,
84+
ref_package = ref_package,
85+
visibility = visibility,
86+
)
87+
trlc_requirements_test(
88+
name = name + "_test",
89+
reqs = [":" + name],
90+
visibility = visibility,
91+
)

bazel/rules/rules_score/private/component_requirements.bzl

Lines changed: 40 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -14,67 +14,12 @@
1414
"""
1515
Component Requirements build rules for S-CORE projects.
1616
17-
This module provides macros and rules for defining component requirements
18-
following S-CORE process guidelines. Component requirements are derived from
19-
feature requirements and define the specific requirements for a software component.
17+
Component requirements are derived from feature requirements and define the
18+
specific requirements for a software component.
2019
"""
2120

22-
load("//bazel/rules/rules_score:providers.bzl", "ComponentRequirementsInfo", "SphinxSourcesInfo")
23-
24-
# ComponentRequirementsInfo and FeatureRequirementsInfo are re-exported from providers.bzl for backward compatibility.
25-
26-
# ============================================================================
27-
# Private Rule Implementation
28-
# ============================================================================
29-
30-
def _component_requirements_impl(ctx):
31-
"""Implementation for component_requirements rule.
32-
33-
Collects component requirements source files and links them to their
34-
parent feature requirements through providers.
35-
36-
Args:
37-
ctx: Rule context
38-
39-
Returns:
40-
List of providers including DefaultInfo and ComponentRequirementsInfo
41-
"""
42-
srcs = depset(ctx.files.srcs)
43-
44-
# Collect feature requirements providers
45-
feature_reqs = []
46-
47-
# Collect transitive sphinx sources from feature requirements
48-
transitive = [srcs]
49-
50-
return [
51-
DefaultInfo(files = srcs),
52-
ComponentRequirementsInfo(
53-
srcs = srcs,
54-
name = ctx.label.name,
55-
),
56-
SphinxSourcesInfo(
57-
srcs = srcs,
58-
deps = depset(transitive = transitive),
59-
ancillary = depset(),
60-
),
61-
]
62-
63-
# ============================================================================
64-
# Rule Definition
65-
# ============================================================================
66-
67-
_component_requirements = rule(
68-
implementation = _component_requirements_impl,
69-
doc = "Collects component requirements documents with traceability to feature requirements",
70-
attrs = {
71-
"srcs": attr.label_list(
72-
allow_files = [".rst", ".md", ".trlc"],
73-
mandatory = True,
74-
doc = "Source files containing component requirements specifications",
75-
),
76-
},
77-
)
21+
load("@trlc//:trlc.bzl", "trlc_requirements_test")
22+
load("//bazel/rules/rules_score/private:requirements.bzl", "score_requirements_rule")
7823

7924
# ============================================================================
8025
# Public Macro
@@ -83,35 +28,58 @@ _component_requirements = rule(
8328
def component_requirements(
8429
name,
8530
srcs,
31+
deps = [],
32+
spec = Label("//bazel/rules/rules_score/trlc/config:score_requirements_model"),
33+
ref_package = "",
8634
visibility = None):
8735
"""Define component requirements following S-CORE process guidelines.
8836
89-
Component requirements are derived from feature requirements and define
90-
the specific functional and safety requirements for a software component.
91-
They establish traceability from high-level features to component-level
92-
specifications.
37+
Creates a target providing ComponentRequirementsInfo, TrlcProviderInfo,
38+
and SphinxSourcesInfo, plus a validation test target ``<name>_test``.
39+
40+
Because this target emits TrlcProviderInfo, downstream targets can
41+
reference it directly in their ``deps`` without any intermediate
42+
trlc_requirements wrapper.
9343
9444
Args:
95-
name: The name of the component requirements target. Used as the base
96-
name for all generated targets.
97-
srcs: List of labels to .rst, .md, or .trlc files containing the
98-
component requirements specifications as defined in the S-CORE
99-
process.
45+
name: The name of the target.
46+
srcs: List of .trlc source files containing CompReq records as defined
47+
in the S-CORE requirements model.
48+
deps: Optional list of requirement targets (e.g. assumed_system_requirements,
49+
feature_requirements) whose TRLC records are needed for cross-reference
50+
parsing. These targets must provide TrlcProviderInfo.
51+
spec: Optional TRLC specification target providing RSL type definitions.
52+
Defaults to the S-CORE requirements model
53+
(``@score_tooling//bazel/rules/rules_score/trlc/config:score_requirements_model``).
54+
Override this when using a custom requirements model.
10055
visibility: Bazel visibility specification for the generated targets.
10156
10257
Generated Targets:
103-
<name>: Main component requirements target providing ComponentRequirementsInfo
58+
<name>: Main target providing ComponentRequirementsInfo, TrlcProviderInfo,
59+
and SphinxSourcesInfo.
60+
<name>_test: TRLC validation test (runs ``trlc --verify``).
10461
10562
Example:
10663
```starlark
10764
component_requirements(
108-
name = "my_component_requirements",
109-
srcs = ["component_requirements.rst"],
65+
name = "comp_req",
66+
srcs = ["component_requirements.trlc"],
67+
deps = [":asr", ":feat_req"],
11068
)
11169
```
11270
"""
113-
_component_requirements(
71+
score_requirements_rule(
11472
name = name,
11573
srcs = srcs,
74+
deps = deps,
75+
req_kind = "component",
76+
lobster_config = Label("//bazel/rules/rules_score/lobster/config:component_requirement"),
77+
spec = spec,
78+
ref_package = ref_package,
79+
visibility = visibility,
80+
)
81+
trlc_requirements_test(
82+
name = name + "_test",
83+
reqs = [":" + name],
11684
visibility = visibility,
11785
)

0 commit comments

Comments
 (0)