func updateCargo()

in tools/eksDistroBuildToolingOpsTools/pkg/consumerUpdater/bottlerocket.go [128:161]


func updateCargo(cargoPath string, eksD eksDistroRelease.Release) error {
	logger.Info("updating Bottlerockt cargo.toml", "cargo.toml path", cargoPath, "eks distro release", eksD.EksDistroReleaseFullVersion())
	data, err := os.ReadFile(cargoPath)
	if err != nil {
		return fmt.Errorf("reading cargo file: %w", err)
	}

	splitData := bytes.Split(data, linebreak)
	urlLinePrefix := []byte("url = ")
	shaLinePrefix := []byte("sha512 = ")
	urlFound := false
	for i := 0; i < len(splitData); i++ {
		if bytes.HasPrefix(splitData[i], urlLinePrefix) {
			// Example —> url = "https://distro.eks.amazonaws.com/kubernetes-1-23/releases/6/artifacts/kubernetes/v1.23.12/kubernetes-src.tar.gz"
			splitData[i] = append(urlLinePrefix, fmt.Sprintf("%q", eksD.KubernetesSourceArchive().Archive.URI)...)
			urlFound = true
			for j := i + 1; j < len(splitData); j++ {
				if bytes.HasPrefix(splitData[j], shaLinePrefix) {
					// Example —> sha512 = "3033c434d02e6e0296a6659e36e64ce65f7d5408a5d6338dae04bd03225abc7b3a6691e6cce788ac624ba556602a0638b228c64af09e2c8ae19188286a21b5b5"
					splitData[j] = append(shaLinePrefix, fmt.Sprintf("%q", eksD.KubernetesSourceArchive().Archive.SHA512)...)
					logger.Info("updated cargo.toml file", "cargo.toml", cargoPath)
					return os.WriteFile(cargoPath, bytes.Join(splitData, linebreak), constants.OwnerWriteallReadOctal)
				}
			}
		}
	}
	var missingPrefix []byte
	if !urlFound {
		missingPrefix = urlLinePrefix
	} else {
		missingPrefix = shaLinePrefix
	}
	return fmt.Errorf("finding line with prefix %s in %s", missingPrefix, cargoPath)
}