util/prefixes.go (38 lines of code) (raw):

// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. package util import ( "fmt" "strings" ) // PrefixTags prefixes tags in the specified command and returns the new command. func PrefixTags(cmd string, registry string, allKnownRegistries []string) (joinedTags string, tags []string) { fields := strings.Fields(cmd) for i := 1; i < len(fields); i++ { if fields[i-1] == "-t" || fields[i-1] == "--tag" { fields[i] = PrefixRegistryToImageName(registry, fields[i], allKnownRegistries) tags = append(tags, fields[i]) } } return strings.Join(fields, " "), tags } // PrefixRegistryToImageName prefixes the specified registry to the image. func PrefixRegistryToImageName(registry string, img string, allKnownRegistries []string) string { if registry == "" { return img } if !hasKnownRegistryPrefix(img, allKnownRegistries) && !strings.HasPrefix(img, "library/") { return fmt.Sprintf("%s/%s", registry, img) } return img } func hasKnownRegistryPrefix(img string, allKnownRegistries []string) bool { for _, registry := range allKnownRegistries { if registry != "" && strings.HasPrefix(img, registry) { return true } } return false } // NormalizeImageTag adds "latest" to the image if the specified image // has no tag and it's not referenced by digest. func NormalizeImageTag(img string) string { if !strings.Contains(img, "@") && !strings.Contains(img, ":") { return fmt.Sprintf("%s:latest", img) } return img }