func()

in release/pkg/generate_spec.go [355:464]


func (r *ReleaseConfig) GetSourceImageURI(name, repoName string, tagOptions map[string]string) (string, string, error) {
	var sourceImageUri string
	sourcedFromBranch := r.BuildRepoBranchName
	if r.DevRelease || r.ReleaseEnvironment == "development" {
		latestTag := getLatestUploadDestination(r.BuildRepoBranchName)
		if name == "bottlerocket-bootstrap" {
			sourceImageUri = fmt.Sprintf("%s/%s:v%s-%s-%s",
				r.SourceContainerRegistry,
				repoName,
				tagOptions["eksDReleaseChannel"],
				tagOptions["eksDReleaseNumber"],
				latestTag,
			)
		} else if name == "cloud-provider-vsphere" {
			sourceImageUri = fmt.Sprintf("%s/%s:%s-%s",
				r.SourceContainerRegistry,
				repoName,
				tagOptions["gitTag"],
				latestTag,
			)
		} else if name == "kind-node" {
			sourceImageUri = fmt.Sprintf("%s/%s:%s-eks-%s-%s-%s",
				r.SourceContainerRegistry,
				repoName,
				tagOptions["kubeVersion"],
				tagOptions["eksDReleaseChannel"],
				tagOptions["eksDReleaseNumber"],
				latestTag,
			)
		} else {
			sourceImageUri = fmt.Sprintf("%s/%s:%s",
				r.SourceContainerRegistry,
				repoName,
				latestTag,
			)
		}
		if !r.DryRun {
			sourceEcrAuthConfig := r.SourceClients.ECR.AuthConfig
			err := images.PollForExistence(r.DevRelease, sourceEcrAuthConfig, sourceImageUri, r.SourceContainerRegistry, r.ReleaseEnvironment, r.BuildRepoBranchName)
			if err != nil {
				if r.BuildRepoBranchName != "main" {
					fmt.Printf("Tag corresponding to %s branch not found for %s image. Using image artifact from main\n", r.BuildRepoBranchName, repoName)
					var gitTagFromMain string
					if name == "bottlerocket-bootstrap" {
						gitTagFromMain = "non-existent"
					} else {
						gitTagFromMain, err = r.readGitTag(tagOptions["projectPath"], "main")
						if err != nil {
							return "", "", errors.Cause(err)
						}
					}
					sourceImageUri = strings.NewReplacer(r.BuildRepoBranchName, "latest", tagOptions["gitTag"], gitTagFromMain).Replace(sourceImageUri)
					sourcedFromBranch = "main"
				} else {
					return "", "", errors.Cause(err)
				}
			}
		}
	} else if r.ReleaseEnvironment == "production" {
		if name == "bottlerocket-bootstrap" {
			sourceImageUri = fmt.Sprintf("%s/%s:v%s-%s-eks-a-%d",
				r.SourceContainerRegistry,
				repoName,
				tagOptions["eksDReleaseChannel"],
				tagOptions["eksDReleaseNumber"],
				r.BundleNumber,
			)
		} else if name == "cloud-provider-vsphere" {
			sourceImageUri = fmt.Sprintf("%s/%s:%s-eks-d-%s-eks-a-%d",
				r.SourceContainerRegistry,
				repoName,
				tagOptions["gitTag"],
				tagOptions["eksDReleaseChannel"],
				r.BundleNumber,
			)
		} else if name == "eks-anywhere-cluster-controller" {
			sourceImageUri = fmt.Sprintf("%s/%s:%s-eks-a-%d",
				r.SourceContainerRegistry,
				repoName,
				r.ReleaseVersion,
				r.BundleNumber,
			)
		} else if name == "eks-anywhere-diagnostic-collector" {
			sourceImageUri = fmt.Sprintf("%s/%s:%s-eks-a-%d",
				r.SourceContainerRegistry,
				repoName,
				r.ReleaseVersion,
				r.BundleNumber,
			)
		} else if name == "kind-node" {
			sourceImageUri = fmt.Sprintf("%s/%s:%s-eks-d-%s-%s-eks-a-%d",
				r.SourceContainerRegistry,
				repoName,
				tagOptions["kubeVersion"],
				tagOptions["eksDReleaseChannel"],
				tagOptions["eksDReleaseNumber"],
				r.BundleNumber,
			)
		} else {
			sourceImageUri = fmt.Sprintf("%s/%s:%s-eks-a-%d",
				r.SourceContainerRegistry,
				repoName,
				tagOptions["gitTag"],
				r.BundleNumber,
			)
		}
	}

	return sourceImageUri, sourcedFromBranch, nil
}