func()

in release/pkg/assets_capi.go [31:154]


func (r *ReleaseConfig) GetCAPIAssets() ([]Artifact, error) {
	gitTag, err := r.readGitTag(capiProjectPath, r.BuildRepoBranchName)
	if err != nil {
		return nil, errors.Cause(err)
	}

	capiImages := []string{
		"cluster-api-controller",
		"kubeadm-bootstrap-controller",
		"kubeadm-control-plane-controller",
	}

	componentTagOverrideMap := map[string]ImageTagOverride{}
	sourcedFromBranch := r.BuildRepoBranchName
	artifacts := []Artifact{}
	for _, image := range capiImages {
		repoName := fmt.Sprintf("kubernetes-sigs/cluster-api/%s", image)
		tagOptions := map[string]string{
			"gitTag":      gitTag,
			"projectPath": capiProjectPath,
		}

		sourceImageUri, sourcedFromBranch, err := r.GetSourceImageURI(image, repoName, tagOptions)
		if err != nil {
			return nil, errors.Cause(err)
		}
		if sourcedFromBranch != r.BuildRepoBranchName {
			gitTag, err = r.readGitTag(capiProjectPath, sourcedFromBranch)
			if err != nil {
				return nil, errors.Cause(err)
			}
			tagOptions["gitTag"] = gitTag
		}
		releaseImageUri, err := r.GetReleaseImageURI(image, repoName, tagOptions)
		if err != nil {
			return nil, errors.Cause(err)
		}

		imageArtifact := &ImageArtifact{
			AssetName:         image,
			SourceImageURI:    sourceImageUri,
			ReleaseImageURI:   releaseImageUri,
			Arch:              []string{"amd64"},
			OS:                "linux",
			GitTag:            gitTag,
			ProjectPath:       capiProjectPath,
			SourcedFromBranch: sourcedFromBranch,
		}
		artifacts = append(artifacts, Artifact{Image: imageArtifact})

		componentTagOverrideMap[image] = ImageTagOverride{
			Repository: repoName,
			ReleaseUri: imageArtifact.ReleaseImageURI,
		}
	}

	var imageTagOverrides []ImageTagOverride

	kubeRbacProxyImageTagOverride, err := r.GetKubeRbacProxyImageTagOverride()
	if err != nil {
		return nil, errors.Cause(err)
	}

	componentManifestMap := map[string][]string{
		"bootstrap-kubeadm":     {"bootstrap-components.yaml", "metadata.yaml"},
		"cluster-api":           {"core-components.yaml", "metadata.yaml"},
		"control-plane-kubeadm": {"control-plane-components.yaml", "metadata.yaml"},
	}
	sortedComponentNames := sortManifestMap(componentManifestMap)

	for _, component := range sortedComponentNames {
		manifestList := componentManifestMap[component]
		for _, manifest := range manifestList {
			var sourceS3Prefix string
			var releaseS3Path string
			var imageTagOverride ImageTagOverride
			latestPath := getLatestUploadDestination(sourcedFromBranch)

			if r.DevRelease || r.ReleaseEnvironment == "development" {
				sourceS3Prefix = fmt.Sprintf("%s/%s/manifests/%s/%s", capiProjectPath, latestPath, component, gitTag)
			} else {
				sourceS3Prefix = fmt.Sprintf("releases/bundles/%d/artifacts/cluster-api/manifests/%s/%s", r.BundleNumber, component, gitTag)
			}

			if r.DevRelease {
				releaseS3Path = fmt.Sprintf("artifacts/%s/cluster-api/manifests/%s/%s", r.DevReleaseUriVersion, component, gitTag)
			} else {
				releaseS3Path = fmt.Sprintf("releases/bundles/%d/artifacts/cluster-api/manifests/%s/%s", r.BundleNumber, component, gitTag)
			}

			cdnURI, err := r.GetURI(filepath.Join(releaseS3Path, manifest))
			if err != nil {
				return nil, errors.Cause(err)
			}

			if component == "bootstrap-kubeadm" {
				imageTagOverride = componentTagOverrideMap["kubeadm-bootstrap-controller"]
			} else if component == "cluster-api" {
				imageTagOverride = componentTagOverrideMap["cluster-api-controller"]
			} else {
				imageTagOverride = componentTagOverrideMap["kubeadm-control-plane-controller"]
			}

			imageTagOverrides = append(imageTagOverrides, imageTagOverride, kubeRbacProxyImageTagOverride)

			manifestArtifact := &ManifestArtifact{
				SourceS3Key:       manifest,
				SourceS3Prefix:    sourceS3Prefix,
				ArtifactPath:      filepath.Join(r.ArtifactDir, fmt.Sprintf("%s-manifests", component), r.BuildRepoHead),
				ReleaseName:       manifest,
				ReleaseS3Path:     releaseS3Path,
				ReleaseCdnURI:     cdnURI,
				ImageTagOverrides: imageTagOverrides,
				GitTag:            gitTag,
				ProjectPath:       capiProjectPath,
				SourcedFromBranch: sourcedFromBranch,
				Component:         component,
			}
			artifacts = append(artifacts, Artifact{Manifest: manifestArtifact})
		}
	}

	return artifacts, nil
}