func updateKubeGitVersionFile()

in cmd/release/number/main.go [99:145]


func updateKubeGitVersionFile(release *Release) error {
	if len(release.EKSBranchPreviousNumber) == 0 {
		return errors.New("failed to update KUBE_GIT_VERSION because previous release version tag is empty")
	}
	if len(release.EKSBranchNumber) == 0 {
		return errors.New("failed to update KUBE_GIT_VERSION because release version tag is empty")
	}

	kubeGitVersionFilePath := release.KubeGitVersionFilePath
	data, err := ioutil.ReadFile(kubeGitVersionFilePath)
	if err != nil {
		return fmt.Errorf("failed to read file because error: %v", err)
	}

	linebreak := []byte("\n")
	splitData := bytes.Split(data, linebreak)

	prefix := []byte("KUBE_GIT_VERSION='")
	hasFoundPrefix := false

	for i, line := range splitData {
		if !bytes.HasPrefix(line, prefix) {
			continue
		}
		hasFoundPrefix = true

		// End of line character (') is included to ensure entire version tag is captured
		versionTagToEndOfLine := []byte(release.EKSBranchNumber + "'")
		if bytes.Contains(line, versionTagToEndOfLine) {
			log.Printf("version tag %q already set", release.EKSBranchNumber)
			return nil
		}

		prevVersionTagToEndOfLine := []byte(release.EKSBranchPreviousNumber + "'")
		if !bytes.Contains(line, prevVersionTagToEndOfLine) {
			return fmt.Errorf("fail to find previous version tag %q to replace", release.EKSBranchPreviousNumber)
		}

		splitData[i] = bytes.Replace(line, prevVersionTagToEndOfLine, versionTagToEndOfLine, 1)
		break
	}

	if !hasFoundPrefix {
		return fmt.Errorf("failed to find line starting with %q that is needed to update version tag", prefix)
	}
	return os.WriteFile(kubeGitVersionFilePath, bytes.Join(splitData, linebreak), 0644)
}