Merge pull request #4046 from jalaziz/4045

Improve support for third-party registry images
This commit is contained in:
Avi Deitcher 2024-06-24 11:08:04 -07:00 committed by GitHub
commit be7dfdd42c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 65 additions and 1 deletions

View File

@ -32,7 +32,12 @@ func ReferenceExpand(ref string, options ...ReferenceOption) string {
case 1:
ret = "docker.io/library/" + ref
case 2:
ret = "docker.io/" + ref
// If the first part is not a domain, assume it is a DockerHub user/org.
// This logic is copied from moby:
// https://github.com/moby/moby/blob/e7347f8a8c2fd3d2abd34b638d6fc8c18b0278d1/registry/search.go#L148C29-L149C71
if !strings.Contains(parts[0], ".") && !strings.Contains(parts[0], ":") && parts[0] != "localhost" {
ret = "docker.io/" + ref
}
}
if opts.withTag && !strings.Contains(ret, ":") {

View File

@ -0,0 +1,59 @@
package util
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestReferenceExpand(t *testing.T) {
tests := []struct {
name string
ref string
options []ReferenceOption
want string
}{
{
"basic image name should expand to docker.io/library image",
"redis",
nil,
"docker.io/library/redis",
},
{
"image name with user/org should expand to docker.io image",
"foo/bar",
nil,
"docker.io/foo/bar",
},
{
"custom registry image name should not expand",
"myregistry.io/foo",
nil,
"myregistry.io/foo",
},
{
"image name with more than three parts should not expand",
"foo/bar/baz",
nil,
"foo/bar/baz",
},
{
"with tag should add latest if image does not have tag",
"redis",
[]ReferenceOption{ReferenceWithTag()},
"docker.io/library/redis:latest",
},
{
"with tag should not add latest if image already has tag",
"redis:alpine",
[]ReferenceOption{ReferenceWithTag()},
"docker.io/library/redis:alpine",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := ReferenceExpand(tt.ref, tt.options...)
assert.Equal(t, tt.want, got)
})
}
}