func updateBottlerocketVersionFiles()

in tools/version-tracker/pkg/commands/upgrade/upgrade.go [892:943]


func updateBottlerocketVersionFiles(client *gogithub.Client, projectRootFilepath, projectPath, branchName string) (string, string, []string, error) {
	updatedBRFiles := []string{}
	var bottlerocketReleaseMap map[string]interface{}
	bottlerocketReleasesFilePath := filepath.Join(projectRootFilepath, constants.BottlerocketReleasesFile)
	bottlerocketReleasesRelativeFilePath := filepath.Join(projectPath, constants.BottlerocketReleasesFile)
	bottlerocketReleasesFileContents, err := os.ReadFile(bottlerocketReleasesFilePath)
	if err != nil {
		return "", "", nil, fmt.Errorf("reading Bottlerocket releases file: %v", err)
	}

	err = yaml.Unmarshal(bottlerocketReleasesFileContents, &bottlerocketReleaseMap)
	if err != nil {
		return "", "", nil, fmt.Errorf("unmarshalling Bottlerocket releases file: %v", err)
	}

	var currentBottlerocketVersion string
	for channel := range bottlerocketReleaseMap {
		for _, format := range constants.BottlerocketImageFormats {
			releaseVersionByFormat := bottlerocketReleaseMap[channel].(map[string]interface{})[fmt.Sprintf("%s-release-version", format)]
			if releaseVersionByFormat != nil {
				currentBottlerocketVersion = releaseVersionByFormat.(string)
				break
			}
		}
		if currentBottlerocketVersion != "" {
			break
		}
	}

	latestBottlerocketVersion, needsUpgrade, err := github.GetLatestRevision(client, "bottlerocket-os", "bottlerocket", currentBottlerocketVersion, branchName, false, false)
	if err != nil {
		return "", "", nil, fmt.Errorf("getting latest Bottlerocket version from GitHub: %v", err)
	}

	if needsUpgrade {
		logger.Info("Bottlerocket version is out of date.", "Current version", currentBottlerocketVersion, "Latest version", latestBottlerocketVersion)

		err = updateBottlerocketReleasesFile(bottlerocketReleaseMap, bottlerocketReleasesFilePath, latestBottlerocketVersion)
		if err != nil {
			return "", "", nil, fmt.Errorf("updating Bottlerocket releases file: %v", err)
		}
		updatedBRFiles = append(updatedBRFiles, bottlerocketReleasesRelativeFilePath)

		updatedHostContainerFiles, err := updateBottlerocketHostContainerMetadata(client, projectRootFilepath, projectPath, latestBottlerocketVersion)
		if err != nil {
			return "", "", nil, fmt.Errorf("updating Bottlerocket host containers metadata files: %v", err)
		}
		updatedBRFiles = append(updatedBRFiles, updatedHostContainerFiles...)
	}

	return currentBottlerocketVersion, latestBottlerocketVersion, updatedBRFiles, nil
}