@@ -124,6 +124,7 @@ func getPatchOptions(ownedConditions []string, controllerName string) []patch.Op
124124// +kubebuilder:rbac:groups=source.toolkit.fluxcd.io,resources=gitrepositories/status,verbs=get;update;patch
125125// +kubebuilder:rbac:groups=source.toolkit.fluxcd.io,resources=gitrepositories/finalizers,verbs=get;create;update;patch;delete
126126// +kubebuilder:rbac:groups="",resources=events,verbs=create;patch
127+ // +kubebuilder:rbac:groups="",resources=configmaps,verbs=get;list;watch
127128
128129// GitRepositoryReconciler reconciles a v1.GitRepository object.
129130type GitRepositoryReconciler struct {
@@ -1073,25 +1074,66 @@ func (r *GitRepositoryReconciler) verifySignature(ctx context.Context, obj *sour
10731074 return sreconcile .ResultSuccess , nil
10741075 }
10751076
1076- // Get secret with GPG data
1077- publicKeySecret := types.NamespacedName {
1078- Namespace : obj .Namespace ,
1079- Name : obj .Spec .Verification .SecretRef .Name ,
1080- }
1081- secret := & corev1.Secret {}
1082- if err := r .Client .Get (ctx , publicKeySecret , secret ); err != nil {
1083- e := serror .NewGeneric (
1084- fmt .Errorf ("PGP public keys secret error: %w" , err ),
1085- "VerificationError" ,
1086- )
1087- conditions .MarkFalse (obj , sourcev1 .SourceVerifiedCondition , e .Reason , "%s" , e )
1088- return sreconcile .ResultEmpty , e
1089- }
1077+ var keyRings []string
1078+
1079+ if obj .Spec .Verification .PublicKeyRef != nil {
1080+ // new cross-namespace logic
1081+ ref := obj .Spec .Verification .PublicKeyRef
1082+ switch ref .Kind {
1083+ case "Secret" :
1084+ var secret corev1.Secret
1085+ if err := r .Client .Get (ctx , types.NamespacedName {
1086+ Namespace : ref .Namespace ,
1087+ Name : ref .Name ,
1088+ }, & secret ); err != nil {
1089+ e := serror .NewGeneric (
1090+ fmt .Errorf ("PGP public keys secret error: %w" , err ),
1091+ "VerificationError" ,
1092+ )
1093+ conditions .MarkFalse (obj , sourcev1 .SourceVerifiedCondition , e .Reason , "%s" , e )
1094+ return sreconcile .ResultEmpty , e
1095+ }
1096+ for _ , v := range secret .Data {
1097+ keyRings = append (keyRings , string (v ))
1098+ }
1099+
1100+ case "ConfigMap" :
1101+ var cm corev1.ConfigMap
1102+ if err := r .Client .Get (ctx , types.NamespacedName {
1103+ Namespace : ref .Namespace ,
1104+ Name : ref .Name ,
1105+ }, & cm ); err != nil {
1106+ e := serror .NewGeneric (
1107+ fmt .Errorf ("PGP public keys configmap error: %w" , err ),
1108+ "VerificationError" ,
1109+ )
1110+ conditions .MarkFalse (obj , sourcev1 .SourceVerifiedCondition , e .Reason , "%s" , e )
1111+ return sreconcile .ResultEmpty , e
1112+ }
1113+ for _ , v := range cm .Data {
1114+ keyRings = append (keyRings , v )
1115+ }
1116+ }
1117+ } else {
1118+ // fallback to same-namespace SecretRef
1119+ publicKeySecret := types.NamespacedName {
1120+ Namespace : obj .Namespace ,
1121+ Name : obj .Spec .Verification .SecretRef .Name ,
1122+ }
1123+ secret := & corev1.Secret {}
1124+ if err := r .Client .Get (ctx , publicKeySecret , secret ); err != nil {
1125+ e := serror .NewGeneric (
1126+ fmt .Errorf ("PGP public keys secret error: %w" , err ),
1127+ "VerificationError" ,
1128+ )
1129+ conditions .MarkFalse (obj , sourcev1 .SourceVerifiedCondition , e .Reason , "%s" , e )
1130+ return sreconcile .ResultEmpty , e
1131+ }
1132+ for _ , v := range secret .Data {
1133+ keyRings = append (keyRings , string (v ))
1134+ }
1135+ }
10901136
1091- var keyRings []string
1092- for _ , v := range secret .Data {
1093- keyRings = append (keyRings , string (v ))
1094- }
10951137
10961138 var message strings.Builder
10971139 if obj .Spec .Verification .VerifyTag () {
0 commit comments