controllers: make HelmChart compat with RFC-0005

This ensures the revision is correctly parsed for `Bucket` and
`GitRepository` sources from which a chart is built, either in the
legacy or new RFC-0005 format.

Signed-off-by: Hidde Beydals <hello@hidde.co>
This commit is contained in:
Hidde Beydals 2022-12-21 15:48:27 +00:00
parent fe8bc43f84
commit b89b049bf1
2 changed files with 12 additions and 6 deletions

View File

@ -21,6 +21,7 @@ import (
"crypto/tls" "crypto/tls"
"errors" "errors"
"fmt" "fmt"
"github.com/fluxcd/pkg/git"
"net/url" "net/url"
"os" "os"
"path/filepath" "path/filepath"
@ -789,10 +790,10 @@ func (r *HelmChartReconciler) buildFromTarballArtifact(ctx context.Context, obj
if obj.Spec.ReconcileStrategy == sourcev1.ReconcileStrategyRevision { if obj.Spec.ReconcileStrategy == sourcev1.ReconcileStrategyRevision {
rev := source.Revision rev := source.Revision
if obj.Spec.SourceRef.Kind == sourcev1.GitRepositoryKind { if obj.Spec.SourceRef.Kind == sourcev1.GitRepositoryKind {
// Split the reference by the `/` delimiter which may be present, rev = git.ExtractHashFromRevision(rev).String()
// and take the last entry which contains the SHA. }
split := strings.Split(source.Revision, "/") if obj.Spec.SourceRef.Kind == sourcev1.BucketKind {
rev = split[len(split)-1] rev = backwardsCompatibleDigest(rev).Hex()
} }
if kind := obj.Spec.SourceRef.Kind; kind == sourcev1.GitRepositoryKind || kind == sourcev1.BucketKind { if kind := obj.Spec.SourceRef.Kind; kind == sourcev1.GitRepositoryKind || kind == sourcev1.BucketKind {
// The SemVer from the metadata is at times used in e.g. the label metadata for a resource // The SemVer from the metadata is at times used in e.g. the label metadata for a resource
@ -1243,9 +1244,10 @@ func (r *HelmChartReconciler) requestsForGitRepositoryChange(o client.Object) []
return nil return nil
} }
revision := git.TransformRevision(repo.GetArtifact().Revision)
var reqs []reconcile.Request var reqs []reconcile.Request
for _, i := range list.Items { for _, i := range list.Items {
if i.Status.ObservedSourceArtifactRevision != repo.GetArtifact().Revision { if git.TransformRevision(i.Status.ObservedSourceArtifactRevision) != revision {
reqs = append(reqs, reconcile.Request{NamespacedName: client.ObjectKeyFromObject(&i)}) reqs = append(reqs, reconcile.Request{NamespacedName: client.ObjectKeyFromObject(&i)})
} }
} }
@ -1270,9 +1272,10 @@ func (r *HelmChartReconciler) requestsForBucketChange(o client.Object) []reconci
return nil return nil
} }
revision := backwardsCompatibleDigest(bucket.GetArtifact().Revision)
var reqs []reconcile.Request var reqs []reconcile.Request
for _, i := range list.Items { for _, i := range list.Items {
if i.Status.ObservedSourceArtifactRevision != bucket.GetArtifact().Revision { if backwardsCompatibleDigest(i.Status.ObservedSourceArtifactRevision) != revision {
reqs = append(reqs, reconcile.Request{NamespacedName: client.ObjectKeyFromObject(&i)}) reqs = append(reqs, reconcile.Request{NamespacedName: client.ObjectKeyFromObject(&i)})
} }
} }

View File

@ -1394,6 +1394,9 @@ func TestHelmChartReconciler_buildFromTarballArtifact(t *testing.T) {
} }
got, err := r.buildFromTarballArtifact(context.TODO(), obj, tt.source, &b) got, err := r.buildFromTarballArtifact(context.TODO(), obj, tt.source, &b)
if err != nil {
t.Log(err)
}
g.Expect(err != nil).To(Equal(tt.wantErr != nil)) g.Expect(err != nil).To(Equal(tt.wantErr != nil))
if tt.wantErr != nil { if tt.wantErr != nil {
g.Expect(reflect.TypeOf(err).String()).To(Equal(reflect.TypeOf(tt.wantErr).String())) g.Expect(reflect.TypeOf(err).String()).To(Equal(reflect.TypeOf(tt.wantErr).String()))