func updateSpec()

in tools/eksDistroBuildToolingOpsTools/pkg/consumerUpdater/bottlerocket.go [164:200]


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

	splitData := bytes.Split(data, linebreak)
	goverLinePrefix := []byte("%global gover ")
	sourceLinePrefix := []byte("Source0: ")
	goverFound := false

	for i := 0; i < len(splitData); i++ {
		if bytes.HasPrefix(splitData[i], goverLinePrefix) {
			// Example —> %global gover 1.23.12
			splitData[i] = append(goverLinePrefix, eksD.KubernetesFullVersion()...)
			goverFound = true
			for j := i + 1; j < len(splitData); j++ {
				if bytes.HasPrefix(splitData[j], sourceLinePrefix) {
					re := regexp.MustCompile(constants.SemverRegex)
					// Example —> Source0: https://distro.eks.amazonaws.com/kubernetes-1-23/releases/6/artifacts/kubernetes/v%{gover}/kubernetes-src.tar.gz
					splitData[j] = append(sourceLinePrefix, re.ReplaceAll([]byte(eksD.KubernetesSourceArchive().Archive.URI), []byte("%{gover}"))...)
					logger.Info("updated spec file", "spec", specPath)
					return os.WriteFile(specPath, bytes.Join(splitData, linebreak), constants.OwnerWriteallReadOctal)
				}
			}
		}
	}

	var missingPrefix []byte
	if !goverFound {
		missingPrefix = goverLinePrefix
	} else {
		missingPrefix = sourceLinePrefix
	}
	return fmt.Errorf("finding line with prefix %s in %s", missingPrefix, specPath)
}