From 75e0e11c7a71511a01ffda8b34fb8d0fefdfc489 Mon Sep 17 00:00:00 2001 From: vishwajitdandage Date: Tue, 25 Aug 2026 10:38:23 +0530 Subject: [PATCH] feat: enhance AssumedSystemRequirementsInfo with transitive property and update requirements handling --- .../private/dependable_element.bzl | 2 +- .../rules_score/private/requirements.bzl | 22 ++++++++++++++++++- bazel/rules/rules_score/providers.bzl | 1 + 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/bazel/rules/rules_score/private/dependable_element.bzl b/bazel/rules/rules_score/private/dependable_element.bzl index f49229b6..7b12c2c5 100644 --- a/bazel/rules/rules_score/private/dependable_element.bzl +++ b/bazel/rules/rules_score/private/dependable_element.bzl @@ -812,7 +812,7 @@ def _dependable_element_index_impl(ctx): # carry AssumedSystemRequirementsInfo. assumed_system_req_refs = [] for req_target in ctx.attr.requirements: - if AssumedSystemRequirementsInfo in req_target: + if AssumedSystemRequirementsInfo in req_target and not req_target[AssumedSystemRequirementsInfo].is_transitive: label_files, label_refs = _process_artifact_files(ctx, "assumed_system_requirements", req_target) output_files.extend(label_files) assumed_system_req_refs.extend(label_refs) diff --git a/bazel/rules/rules_score/private/requirements.bzl b/bazel/rules/rules_score/private/requirements.bzl index b7a96171..8b60c752 100644 --- a/bazel/rules/rules_score/private/requirements.bzl +++ b/bazel/rules/rules_score/private/requirements.bzl @@ -96,21 +96,38 @@ def _requirements_impl(ctx): srcs = depset([lobster_file]), name = ctx.label.name, ) + assumed_srcs_from_deps = [ + dep[AssumedSystemRequirementsInfo].srcs + for dep in ctx.attr.deps + if AssumedSystemRequirementsInfo in dep + ] + if assumed_srcs_from_deps: + assumed_provider = AssumedSystemRequirementsInfo( + srcs = depset(transitive = assumed_srcs_from_deps), + name = ctx.label.name, + is_transitive = True, + ) + else: + assumed_provider = None elif ctx.attr.req_kind == "component": req_provider = ComponentRequirementsInfo( srcs = depset([lobster_file]), name = ctx.label.name, ) + assumed_provider = None elif ctx.attr.req_kind == "aou": req_provider = AssumptionsOfUseInfo( aou_lobster = depset([lobster_file]), name = ctx.label.name, ) + assumed_provider = None else: # assumed_system req_provider = AssumedSystemRequirementsInfo( srcs = depset([lobster_file]), name = ctx.label.name, + is_transitive = False, ) + assumed_provider = None image_outputs = subrule_trlc_image_stage(ctx.files.image_srcs) @@ -121,7 +138,7 @@ def _requirements_impl(ctx): if SphinxSourcesInfo in dep: transitive_sphinx.append(dep[SphinxSourcesInfo].deps) - return [ + providers = [ DefaultInfo(files = all_trlc_files), TrlcProviderInfo( spec = spec_depset, @@ -135,6 +152,9 @@ def _requirements_impl(ctx): aux_srcs = depset(), ), ] + if assumed_provider != None: + providers = providers + [assumed_provider] + return providers # ============================================================================ # Rule Definition diff --git a/bazel/rules/rules_score/providers.bzl b/bazel/rules/rules_score/providers.bzl index 908a725b..31dee858 100644 --- a/bazel/rules/rules_score/providers.bzl +++ b/bazel/rules/rules_score/providers.bzl @@ -109,6 +109,7 @@ AssumedSystemRequirementsInfo = provider( fields = { "srcs": "Depset of .lobster traceability files generated from TRLC requirement sources.", "name": "Name of the requirements target.", + "is_transitive": "Whether this provider is propagated through a feature requirements target for traceability lookup rather than owned by that target.", }, )