@@ -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} ;
2223use crate :: errors:: ArtifactHubError ;
2324use crate :: policy_metadata:: Metadata ;
@@ -154,7 +155,6 @@ impl Default for Provider {
154155impl 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