@@ -209,11 +209,16 @@ func (r *HelmRepositoryReconciler) reconcile(ctx context.Context, repository sou
209209 return sourcev1 .HelmRepositoryNotReady (repository , sourcev1 .IndexationFailedReason , err .Error ()), err
210210 }
211211
212- // return early on unchanged generation
212+ indexBytes , err := yaml .Marshal (& chartRepo .Index )
213+ if err != nil {
214+ return sourcev1 .HelmRepositoryNotReady (repository , sourcev1 .StorageOperationFailedReason , err .Error ()), err
215+ }
216+ hash := r .Storage .Checksum (bytes .NewReader (indexBytes ))
213217 artifact := r .Storage .NewArtifactFor (repository .Kind ,
214218 repository .ObjectMeta .GetObjectMeta (),
215- chartRepo .Index .Generated .Format (time .RFC3339Nano ),
216- fmt .Sprintf ("index-%s.yaml" , url .PathEscape (chartRepo .Index .Generated .Format (time .RFC3339Nano ))))
219+ hash ,
220+ fmt .Sprintf ("index-%s.yaml" , hash ))
221+ // return early on unchanged index
217222 if apimeta .IsStatusConditionTrue (repository .Status .Conditions , meta .ReadyCondition ) && repository .GetArtifact ().HasRevision (artifact .Revision ) {
218223 if artifact .URL != repository .GetArtifact ().URL {
219224 r .Storage .SetArtifactURL (repository .GetArtifact ())
@@ -238,11 +243,7 @@ func (r *HelmRepositoryReconciler) reconcile(ctx context.Context, repository sou
238243 defer unlock ()
239244
240245 // save artifact to storage
241- b , err := yaml .Marshal (& chartRepo .Index )
242- if err != nil {
243- return sourcev1 .HelmRepositoryNotReady (repository , sourcev1 .IndexationFailedReason , err .Error ()), err
244- }
245- if err := r .Storage .AtomicWriteFile (& artifact , bytes .NewReader (b ), 0644 ); err != nil {
246+ if err := r .Storage .AtomicWriteFile (& artifact , bytes .NewReader (indexBytes ), 0644 ); err != nil {
246247 err = fmt .Errorf ("unable to write repository index file: %w" , err )
247248 return sourcev1 .HelmRepositoryNotReady (repository , sourcev1 .StorageOperationFailedReason , err .Error ()), err
248249 }
0 commit comments