Merge pull request #507 from fluxcd/chart-meta-short-sha
This commit is contained in:
commit
50f930a11b
|
@ -443,14 +443,32 @@ func (r *HelmChartReconciler) fromTarballArtifact(ctx context.Context, source so
|
|||
opts.CachedChart = artifact.Path
|
||||
}
|
||||
|
||||
// Add revision metadata to chart build
|
||||
// Configure revision metadata for chart build if we should react to revision changes
|
||||
if c.Spec.ReconcileStrategy == sourcev1.ReconcileStrategyRevision {
|
||||
// Isolate the commit SHA from GitRepository type artifacts by removing the branch/ prefix.
|
||||
splitRev := strings.Split(source.Revision, "/")
|
||||
opts.VersionMetadata = splitRev[len(splitRev)-1]
|
||||
rev := source.Revision
|
||||
if c.Spec.SourceRef.Kind == sourcev1.GitRepositoryKind {
|
||||
// Split the reference by the `/` delimiter which may be present,
|
||||
// and take the last entry which contains the SHA.
|
||||
split := strings.Split(source.Revision, "/")
|
||||
rev = split[len(split)-1]
|
||||
}
|
||||
if kind := c.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
|
||||
// in a chart, which has a limited length of 63 characters.
|
||||
// To not fill most of this space with a full length SHA hex (40 characters for SHA-1, and
|
||||
// even more for SHA-2 for a chart from a Bucket), we shorten this to the first 12
|
||||
// characters taken from the hex.
|
||||
// For SHA-1, this has proven to be unique in the Linux kernel with over 875.000 commits
|
||||
// (http://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Short-SHA-1).
|
||||
// Note that for a collision to be problematic, it would need to happen right after the
|
||||
// previous SHA for the artifact, which is highly unlikely, if not virtually impossible.
|
||||
// Ref: https://en.wikipedia.org/wiki/Birthday_attack
|
||||
rev = rev[0:12]
|
||||
}
|
||||
opts.VersionMetadata = rev
|
||||
}
|
||||
// Set the VersionMetadata to the object's Generation if ValuesFiles is defined
|
||||
// This ensures changes can be noticed by the Artifact consumer
|
||||
// Set the VersionMetadata to the object's Generation if ValuesFiles is defined,
|
||||
// this ensures changes can be noticed by the Artifact consumer
|
||||
if len(opts.GetValuesFiles()) > 0 {
|
||||
if opts.VersionMetadata != "" {
|
||||
opts.VersionMetadata += "."
|
||||
|
|
|
@ -747,7 +747,7 @@ var _ = Describe("HelmChartReconciler", func() {
|
|||
storage.ArtifactExist(*got.Status.Artifact)
|
||||
}, timeout, interval).Should(BeTrue())
|
||||
Expect(got.Status.Artifact.Revision).To(ContainSubstring(updated.Status.Artifact.Revision))
|
||||
Expect(got.Status.Artifact.Revision).To(ContainSubstring(commit.String()))
|
||||
Expect(got.Status.Artifact.Revision).To(ContainSubstring(commit.String()[0:12]))
|
||||
})
|
||||
|
||||
When("Setting valid valuesFiles attribute", func() {
|
||||
|
|
Loading…
Reference in New Issue