diff --git a/pkg/functions/function.go b/pkg/functions/function.go index ea94983de..962c0c392 100644 --- a/pkg/functions/function.go +++ b/pkg/functions/function.go @@ -472,6 +472,12 @@ func (f Function) ImageWithDigest() string { return f.Image } + // Return image with new Digest if image already contains SHA256 Digest + shaIndex := strings.Index(f.Image, "@sha256:") + if shaIndex > 0 { + return f.Image[:shaIndex] + "@" + f.ImageDigest + } + lastSlashIdx := strings.LastIndexAny(f.Image, "/") imageAsBytes := []byte(f.Image) diff --git a/pkg/functions/function_unit_test.go b/pkg/functions/function_unit_test.go index 08eeeff65..b0fc6fd18 100644 --- a/pkg/functions/function_unit_test.go +++ b/pkg/functions/function_unit_test.go @@ -105,6 +105,16 @@ func TestFunction_ImageWithDigest(t *testing.T) { fields: fields{Image: "bar:latest", ImageDigest: "42"}, want: "bar@42", }, + { + name: "Full path with port and SHA256 Digest", + fields: fields{Image: "image-registry.openshift-image-registry.svc.cluster.local:50000/default/bar@sha256:42", ImageDigest: "sha256:42"}, + want: "image-registry.openshift-image-registry.svc.cluster.local:50000/default/bar@sha256:42", + }, + { + name: "Full path with port and SHA256 Digest with empty ImageDigest", + fields: fields{Image: "image-registry.openshift-image-registry.svc.cluster.local:50000/default/bar@sha256:42", ImageDigest: ""}, + want: "image-registry.openshift-image-registry.svc.cluster.local:50000/default/bar@sha256:42", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {