Skip to content

Commit c1512d3

Browse files
committed
rely on index checksum for HelmRepository reconcile operation
Fixes #256 Signed-off-by: Léo Martinez <[email protected]>
1 parent ab6ceb0 commit c1512d3

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

controllers/helmrepository_controller.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)