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
2 changes: 2 additions & 0 deletions bazel/rules/rules_score/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ load(
exports_files([
"templates/conf.template.py",
"templates/seooc_index.template.rst",
"templates/unit.template.rst",
"templates/component.template.rst",
])

# HTML merge tool
Expand Down
16 changes: 12 additions & 4 deletions bazel/rules/rules_score/private/assumptions_of_use.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ operating conditions and constraints for a Safety Element out of Context (SEooC)
"""

load("//bazel/rules/rules_score:providers.bzl", "SphinxSourcesInfo")
load("//bazel/rules/rules_score/private:component_requirements.bzl", "ComponentRequirementsInfo")
load("//bazel/rules/rules_score/private:feature_requirements.bzl", "FeatureRequirementsInfo")

# ============================================================================
Expand Down Expand Up @@ -55,13 +56,13 @@ def _assumptions_of_use_impl(ctx):

# Collect feature requirements providers
feature_reqs = []
for feat_req in ctx.attr.feature_requirement:
for feat_req in ctx.attr.feature_requirements:
if FeatureRequirementsInfo in feat_req:
feature_reqs.append(feat_req[FeatureRequirementsInfo])

# Collect transitive sphinx sources from feature requirements
transitive = [srcs]
for feat_req in ctx.attr.feature_requirement:
for feat_req in ctx.attr.feature_requirements:
if SphinxSourcesInfo in feat_req:
transitive.append(feat_req[SphinxSourcesInfo].transitive_srcs)

Expand Down Expand Up @@ -91,11 +92,16 @@ _assumptions_of_use = rule(
mandatory = True,
doc = "Source files containing Assumptions of Use specifications",
),
"feature_requirement": attr.label_list(
"feature_requirements": attr.label_list(
providers = [FeatureRequirementsInfo],
mandatory = False,
doc = "List of feature_requirements targets that these Assumptions of Use trace to",
),
"component_requirements": attr.label_list(
providers = [ComponentRequirementsInfo],
mandatory = False,
doc = "List of feature_requirements targets that these Assumptions of Use trace to",
),
},
)

Expand All @@ -107,6 +113,7 @@ def assumptions_of_use(
name,
srcs,
feature_requirement = [],
component_requirements = [],
visibility = None):
"""Define Assumptions of Use following S-CORE process guidelines.

Expand Down Expand Up @@ -141,6 +148,7 @@ def assumptions_of_use(
_assumptions_of_use(
name = name,
srcs = srcs,
feature_requirement = feature_requirement,
feature_requirements = feature_requirement,
component_requirements = component_requirements,
visibility = visibility,
)
10 changes: 0 additions & 10 deletions bazel/rules/rules_score/private/component.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,6 @@ def _component_impl(ctx):

requirements_depset = depset(transitive = requirements_files)

# Collect implementation targets
implementation_depset = depset(ctx.attr.implementation)

# Collect components and tests
components_depset = depset(ctx.attr.components)
tests_depset = depset(ctx.attr.tests)
Expand All @@ -63,7 +60,6 @@ def _component_impl(ctx):
ComponentInfo(
name = ctx.label.name,
requirements = requirements_depset,
implementation = implementation_depset,
components = components_depset,
tests = tests_depset,
),
Expand All @@ -85,10 +81,6 @@ _component = rule(
mandatory = True,
doc = "Component requirements artifacts (typically component_requirements targets)",
),
"implementation": attr.label_list(
doc = "Implementation targets (libraries, binaries) that realize this component",
default = [],
),
"components": attr.label_list(
mandatory = True,
doc = "Unit targets that comprise this component",
Expand All @@ -108,7 +100,6 @@ def component(
name,
units = None,
tests = [],
implementation = [],
requirements = None,
components = None,
testonly = True,
Expand Down Expand Up @@ -152,7 +143,6 @@ def component(
_component(
name = name,
requirements = requirements,
implementation = implementation,
components = components,
tests = tests,
testonly = testonly,
Expand Down
40 changes: 16 additions & 24 deletions bazel/rules/rules_score/private/dependability_analysis.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ a comprehensive view of component reliability and safety.

load("//bazel/rules/rules_score:providers.bzl", "SphinxSourcesInfo")
load("//bazel/rules/rules_score/private:architectural_design.bzl", "ArchitecturalDesignInfo")
load("//bazel/rules/rules_score/private:safety_analysis.bzl", "SafetyAnalysisInfo")
load("//bazel/rules/rules_score/private:safety_analysis.bzl", "AnalysisInfo")

# ============================================================================
# Provider Definition
Expand All @@ -31,9 +31,8 @@ load("//bazel/rules/rules_score/private:safety_analysis.bzl", "SafetyAnalysisInf
DependabilityAnalysisInfo = provider(
doc = "Provider for dependability analysis artifacts",
fields = {
"safety_analysis": "List of SafetyAnalysisInfo providers",
"dfa": "Depset of Dependent Failure Analysis documentation",
"fmea": "Depset of Failure Mode and Effects Analysis documentation",
"safety_analysis": "List of AnalysisInfo providers",
"security_analysis": "List of AnalysisInfo providers",
"arch_design": "ArchitecturalDesignInfo provider for linked architectural design",
"name": "Name of the dependability analysis target",
},
Expand All @@ -55,30 +54,20 @@ def _dependability_analysis_impl(ctx):
Returns:
List of providers including DefaultInfo and DependabilityAnalysisInfo
"""
dfa_files = depset(ctx.files.dfa)
fmea_files = depset(ctx.files.fmea)

# Collect safety analysis providers
safety_analysis_infos = []
safety_analysis_files = []
for sa in ctx.attr.safety_analysis:
if SafetyAnalysisInfo in sa:
safety_analysis_infos.append(sa[SafetyAnalysisInfo])
safety_analysis_files.append(sa.files)
security_analysis_files = depset(ctx.files.dfa)
safety_analysis_files = depset(ctx.files.fmea)

# Get architectural design provider if available
arch_design_info = None
if ctx.attr.arch_design and ArchitecturalDesignInfo in ctx.attr.arch_design:
arch_design_info = ctx.attr.arch_design[ArchitecturalDesignInfo]

# Combine all files for DefaultInfo
all_files = depset(
transitive = [dfa_files, fmea_files] + safety_analysis_files,
)
all_files = depset(transitive = [security_analysis_files, safety_analysis_files])

# Collect transitive sphinx sources from safety analysis and architectural design
transitive = [all_files]
for sa in ctx.attr.safety_analysis:
for sa in ctx.attr.security_analysis:
if SphinxSourcesInfo in sa:
transitive.append(sa[SphinxSourcesInfo].transitive_srcs)
if ctx.attr.arch_design and SphinxSourcesInfo in ctx.attr.arch_design:
Expand All @@ -87,9 +76,8 @@ def _dependability_analysis_impl(ctx):
return [
DefaultInfo(files = all_files),
DependabilityAnalysisInfo(
safety_analysis = safety_analysis_infos,
dfa = dfa_files,
fmea = fmea_files,
safety_analysis = security_analysis_files,
security_analysis = security_analysis_files,
arch_design = arch_design_info,
name = ctx.label.name,
),
Expand All @@ -107,8 +95,9 @@ _dependability_analysis = rule(
implementation = _dependability_analysis_impl,
doc = "Collects dependability analysis documents for S-CORE process compliance",
attrs = {
"safety_analysis": attr.label_list(
providers = [SafetyAnalysisInfo],
"security_analysis": attr.label_list(
# TODO: change provider name
providers = [AnalysisInfo],
mandatory = False,
doc = "List of safety_analysis targets containing FMEA, FMEDA, FTA results",
),
Expand Down Expand Up @@ -183,7 +172,10 @@ def dependability_analysis(
"""
_dependability_analysis(
name = name,
safety_analysis = safety_analysis,
# TODO: this needs to be fixed. A security is not a safety_analysis.
# we leave it for now for compatibility reasons until there is alignment on the a
# attributes of a dependability analysis
security_analysis = safety_analysis,
dfa = dfa,
fmea = fmea,
arch_design = arch_design,
Expand Down
Loading