blob: 1f0b45b43aa606da13fbf2f8ce81834589301fe7 [file] [log] [blame]
// Copyright Istio Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package main
import (
"fmt"
"strings"
)
func extractTags(a Args, target, variant string, hasDoubleDefault bool) []string {
tags := []string{}
for _, h := range a.Hubs {
for _, tg := range a.Tags {
if variant == DefaultVariant {
// For default, we have no suffix
tags = append(tags, fmt.Sprintf("%s/%s:%s", h, target, tg))
} else {
// Otherwise, we have a suffix with the variant
tags = append(tags, fmt.Sprintf("%s/%s:%s-%s", h, target, tg, variant))
// If we need a default as well, add it as a second tag for the same image to avoid building twice
if variant == PrimaryVariant && hasDoubleDefault {
tags = append(tags, fmt.Sprintf("%s/%s:%s", h, target, tg))
}
}
}
}
return tags
}
func createArgs(args Args, target string, variant string, architecture string) map[string]string {
baseDist := variant
if baseDist == DefaultVariant {
baseDist = PrimaryVariant
}
m := map[string]string{
// Base version defines the tag of the base image to use. Typically, set in the Makefile and not overridden.
"BASE_VERSION": args.BaseVersion,
// Base distribution picks which variant to build
"BASE_DISTRIBUTION": baseDist,
// Additional metadata injected into some images
"proxy_version": args.ProxyVersion,
"istio_version": args.IstioVersion,
"VM_IMAGE_NAME": vmImageName(target),
"VM_IMAGE_VERSION": vmImageVersion(target),
}
// Only needed for crane - buildx does it automagically
if architecture != "" {
os, arch, _ := strings.Cut(architecture, "/")
m["TARGETARCH"] = arch
m["TARGETOS"] = os
}
return m
}
func vmImageName(target string) string {
if !strings.HasPrefix(target, "app_sidecar") {
// Not a VM
return ""
}
if strings.HasPrefix(target, "app_sidecar_base") {
return strings.Split(target, "_")[3]
}
return strings.Split(target, "_")[2]
}
func vmImageVersion(target string) string {
if !strings.HasPrefix(target, "app_sidecar") {
// Not a VM
return ""
}
if strings.HasPrefix(target, "app_sidecar_base") {
return strings.Split(target, "_")[4]
}
return strings.Split(target, "_")[3]
}