Skip to content

Commit 133d30f

Browse files
authored
Merge pull request #1257 from lcarva/EC-1059
Allow list of RPM repo IDs to be extended
2 parents 6927442 + 894ab13 commit 133d30f

File tree

3 files changed

+33
-5
lines changed

3 files changed

+33
-5
lines changed

antora/docs/modules/ROOT/pages/release_policy.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,14 +1008,14 @@ Each RPM package listed in an SBOM must specify the repository id that it comes
10081008
* FAILURE message: `RPM repo id check failed: %s`
10091009
* Code: `rpm_repos.ids_known`
10101010
* Effective from: `2024-11-10T00:00:00Z`
1011-
* https://github.com/enterprise-contract/ec-policies/blob/{page-origin-refhash}/policy/release/rpm_repos/rpm_repos.rego#L34[Source, window="_blank"]
1011+
* https://github.com/enterprise-contract/ec-policies/blob/{page-origin-refhash}/policy/release/rpm_repos/rpm_repos.rego#L36[Source, window="_blank"]
10121012

10131013
[#rpm_repos__rule_data_provided]
10141014
=== link:#rpm_repos__rule_data_provided[Known repo id list provided]
10151015

10161016
A list of known and permitted repository ids should be available in the rule data.
10171017

1018-
*Solution*: Include a data source that provides a list of known repository ids under the 'known_rpm_repositories' key under the top level 'rule_data' key.
1018+
*Solution*: Include a data source that provides a list of known repository ids under the 'known_rpm_repositories' key under the top level 'rule_data' key. This list can extended with the 'extra_rpm_repositories' rule data key. The contents of both lists are combined.
10191019

10201020
* Rule type: [rule-type-indicator failure]#FAILURE#
10211021
* FAILURE message: `Rule data '%s' has unexpected format: %s`

policy/release/rpm_repos/rpm_repos.rego

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ import data.lib.json as j
2121
# failure_msg: "Rule data '%s' has unexpected format: %s"
2222
# solution: >-
2323
# Include a data source that provides a list of known repository ids under the
24-
# 'known_rpm_repositories' key under the top level 'rule_data' key.
24+
# 'known_rpm_repositories' key under the top level 'rule_data' key. This list can
25+
# extended with the 'extra_rpm_repositories' rule data key. The contents of both
26+
# lists are combined.
2527
# collections:
2628
# - redhat
2729
# - policy_data
@@ -62,7 +64,9 @@ _rule_data_errors contains error if {
6264
"$schema": "http://json-schema.org/draft-07/schema#",
6365
"type": "array",
6466
"items": {"type": "string"},
65-
"uniqueItems": true,
67+
# The list of repo IDs is a combination of two different lists which are often managed
68+
# by different people. It's ok if those overlap.
69+
"uniqueItems": false,
6670
"minItems": 1,
6771
},
6872
)
@@ -181,10 +185,18 @@ _is_rpmish(purl) if {
181185
startswith(purl, "pkg:rpmmod/")
182186
}
183187

184-
_known_repo_ids := lib.rule_data(_rule_data_key)
188+
_known_repo_ids := combined if {
189+
extra := lib.rule_data(_rule_data_extras_key)
190+
known := lib.rule_data(_rule_data_key)
191+
combined := array.concat(extra, known)
192+
} else := known if {
193+
known := lib.rule_data(_rule_data_key)
194+
}
185195

186196
_rule_data_key := "known_rpm_repositories"
187197

198+
_rule_data_extras_key := "extra_rpm_repositories"
199+
188200
# Converts a list of purl objects, as returned by
189201
# all_purls_with_repo_ids, back into a list of purl strings
190202
_plain_purls(purl_objs) := {purl_obj.purl | some purl_obj in purl_objs}

policy/release/rpm_repos/rpm_repos_test.rego

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,22 @@ test_repo_id_all_known if {
7474
) with lib.sbom.all_sboms as fake_spdx_sboms with data.rule_data.known_rpm_repositories as fake_repo_id_list
7575
}
7676

77+
test_repo_id_all_known_with_extras if {
78+
rule_data := {
79+
"known_rpm_repositories": array.slice(fake_repo_id_list, 1, count(fake_repo_id_list)),
80+
"extra_rpm_repositories": array.slice(fake_repo_id_list, 0, 1),
81+
}
82+
lib.assert_equal(
83+
{p1, p2, p7},
84+
rpm_repos._plain_purls(rpm_repos.all_c2_purls_with_known_repo_ids),
85+
) with lib.sbom.all_sboms as fake_cyclonedx_sboms with data.rule_data as rule_data
86+
87+
lib.assert_equal(
88+
{p1, p2, p7},
89+
rpm_repos._plain_purls(rpm_repos.all_c2_purls_with_known_repo_ids),
90+
) with lib.sbom.all_sboms as fake_spdx_sboms with data.rule_data as rule_data
91+
}
92+
7793
test_repo_id_purls_missing_repo_ids if {
7894
expected := {
7995
{

0 commit comments

Comments
 (0)