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
}