Skip to content
This repository was archived by the owner on Jan 19, 2026. It is now read-only.

Commit 49218e7

Browse files
authored
Merge pull request #652 from flavio/feat-introduce-policy-version-annotation
feat: introduce policy version annotation
2 parents fe179b9 + 9ecdc9e commit 49218e7

File tree

2 files changed

+43
-19
lines changed

2 files changed

+43
-19
lines changed

src/constants.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
pub const KUBEWARDEN_CUSTOM_SECTION_METADATA: &str = "io.kubewarden.metadata";
22

33
pub const KUBEWARDEN_ANNOTATION_POLICY_TITLE: &str = "io.kubewarden.policy.title";
4+
pub const KUBEWARDEN_ANNOTATION_POLICY_VERSION: &str = "io.kubewarden.policy.version";
45
pub const KUBEWARDEN_ANNOTATION_POLICY_DESCRIPTION: &str = "io.kubewarden.policy.description";
56
pub const KUBEWARDEN_ANNOTATION_POLICY_AUTHOR: &str = "io.kubewarden.policy.author";
67
pub const KUBEWARDEN_ANNOTATION_POLICY_URL: &str = "io.kubewarden.policy.url";

src/policy_artifacthub.rs

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use crate::constants::{
1818
KUBEWARDEN_ANNOTATION_POLICY_DESCRIPTION, KUBEWARDEN_ANNOTATION_POLICY_LICENSE,
1919
KUBEWARDEN_ANNOTATION_POLICY_OCIURL, KUBEWARDEN_ANNOTATION_POLICY_SOURCE,
2020
KUBEWARDEN_ANNOTATION_POLICY_TITLE, KUBEWARDEN_ANNOTATION_POLICY_URL,
21+
KUBEWARDEN_ANNOTATION_POLICY_VERSION,
2122
};
2223
use crate::errors::ArtifactHubError;
2324
use crate::policy_metadata::Metadata;
@@ -154,7 +155,6 @@ impl Default for Provider {
154155
impl ArtifactHubPkg {
155156
pub fn from_metadata(
156157
metadata: &Metadata,
157-
version: &str,
158158
gh_release_tag: Option<&str>,
159159
created_at: OffsetDateTime,
160160
questions: Option<&str>,
@@ -167,6 +167,12 @@ impl ArtifactHubPkg {
167167
if metadata_annots.is_empty() {
168168
return Err(ArtifactHubError::NoAnnotations);
169169
}
170+
let version = metadata_annots
171+
.get(KUBEWARDEN_ANNOTATION_POLICY_VERSION)
172+
.ok_or(ArtifactHubError::MissingAnnotation(String::from(
173+
KUBEWARDEN_ANNOTATION_POLICY_VERSION,
174+
)))?;
175+
170176
let semver_version = Version::parse(version)
171177
.map_err(|e| ArtifactHubError::NoSemverVersion(e.to_string()))?;
172178
if questions
@@ -494,6 +500,10 @@ mod tests {
494500
protocol_version: None,
495501
rules: vec![],
496502
annotations: Some(BTreeMap::from([
503+
(
504+
String::from(KUBEWARDEN_ANNOTATION_POLICY_VERSION),
505+
String::from("0.2.1"),
506+
),
497507
(
498508
String::from(KUBEWARDEN_ANNOTATION_POLICY_TITLE),
499509
String::from("verify-image-signatures"),
@@ -535,6 +545,10 @@ mod tests {
535545
protocol_version: None,
536546
rules: vec![],
537547
annotations: Some(BTreeMap::from([
548+
(
549+
String::from(KUBEWARDEN_ANNOTATION_POLICY_VERSION),
550+
String::from("0.2.1"),
551+
),
538552
(
539553
String::from(KUBEWARDEN_ANNOTATION_POLICY_TITLE),
540554
String::from("verify-image-signatures"),
@@ -594,7 +608,6 @@ mod tests {
594608
// check annotations None
595609
let arthub = ArtifactHubPkg::from_metadata(
596610
&Metadata::default(),
597-
"0.2.1",
598611
None,
599612
OffsetDateTime::UNIX_EPOCH,
600613
None,
@@ -606,19 +619,36 @@ mod tests {
606619
annotations: Some(BTreeMap::from([])),
607620
..Default::default()
608621
};
609-
let arthub = ArtifactHubPkg::from_metadata(
610-
&metadata,
611-
"0.2.1",
612-
None,
613-
OffsetDateTime::UNIX_EPOCH,
614-
None,
615-
);
622+
let arthub =
623+
ArtifactHubPkg::from_metadata(&metadata, None, OffsetDateTime::UNIX_EPOCH, None);
616624
assert_eq!(arthub.unwrap_err(), ArtifactHubError::NoAnnotations);
617625

626+
// check version annotations is missing
627+
let mut annotations = mock_metadata_with_minimum_required().annotations.unwrap();
628+
annotations.remove(KUBEWARDEN_ANNOTATION_POLICY_VERSION);
629+
let metadata = Metadata {
630+
annotations: Some(annotations),
631+
..Default::default()
632+
};
633+
let arthub =
634+
ArtifactHubPkg::from_metadata(&metadata, None, OffsetDateTime::UNIX_EPOCH, None);
635+
assert_eq!(
636+
arthub.unwrap_err(),
637+
ArtifactHubError::MissingAnnotation(String::from(KUBEWARDEN_ANNOTATION_POLICY_VERSION))
638+
);
639+
618640
// check version is semver
641+
let mut annotations = mock_metadata_with_minimum_required().annotations.unwrap();
642+
annotations.insert(
643+
KUBEWARDEN_ANNOTATION_POLICY_VERSION.to_string(),
644+
"not-semver".to_string(),
645+
);
646+
619647
let arthub = ArtifactHubPkg::from_metadata(
620-
&mock_metadata_with_minimum_required(),
621-
"not-semver",
648+
&Metadata {
649+
annotations: Some(annotations),
650+
..Default::default()
651+
},
622652
None,
623653
OffsetDateTime::UNIX_EPOCH,
624654
None,
@@ -629,13 +659,8 @@ mod tests {
629659
));
630660

631661
// check questions is some and not empty
632-
let metadata = Metadata {
633-
annotations: Some(BTreeMap::from([(String::from("foo"), String::from("bar"))])),
634-
..Default::default()
635-
};
636662
let arthub = ArtifactHubPkg::from_metadata(
637-
&metadata,
638-
"0.2.1",
663+
&mock_metadata_with_minimum_required(),
639664
None,
640665
OffsetDateTime::UNIX_EPOCH,
641666
Some(""),
@@ -830,7 +855,6 @@ mod tests {
830855
fn artifacthubpkg_with_minimum_required() -> Result<()> {
831856
let artif = ArtifactHubPkg::from_metadata(
832857
&mock_metadata_with_minimum_required(),
833-
"0.2.1",
834858
None,
835859
OffsetDateTime::UNIX_EPOCH,
836860
None,
@@ -881,7 +905,6 @@ kwctl scaffold manifest -t ClusterAdmissionPolicy registry://ghcr.io/ocirepo/nam
881905
fn artifacthubpkg_with_all() -> Result<()> {
882906
let artif = ArtifactHubPkg::from_metadata(
883907
&mock_metadata_with_all(),
884-
"0.2.1",
885908
None,
886909
OffsetDateTime::UNIX_EPOCH,
887910
Some("questions contents"),

0 commit comments

Comments
 (0)