in tools/version-tracker/pkg/commands/upgrade/upgrade.go [720:756]
func updateUpstreamProjectsTrackerFile(projectsList *types.ProjectsList, buildToolingRepoPath, upstreamProjectsTrackerFilePath string) error {
// Load the boilerplate license text that is used as comment header for the upstream projects tracker file.
licenseBoilerplateFilepath := filepath.Join(buildToolingRepoPath, constants.LicenseBoilerplateFile)
licenseBoilerplateContents, err := os.ReadFile(licenseBoilerplateFilepath)
if err != nil {
return fmt.Errorf("reading license boilerplate file: %v", err)
}
// Prefix the non-empty lines of the boilerplate text with a `#` to render it as a YAML comment.
var b bytes.Buffer
s := bufio.NewScanner(strings.NewReader(strings.ReplaceAll(string(licenseBoilerplateContents), "\\\"", "\"")))
s.Split(bufio.ScanLines)
for s.Scan() {
line := s.Bytes()
if len(line) == 0 {
b.Write([]byte(fmt.Sprintf("%s\n", line)))
} else {
b.Write([]byte(fmt.Sprintf("# %s\n", line)))
}
}
b.Write([]byte("\n"))
// Create a new YAML encoder with an appropriate indentation value and encode the project list into a byte buffer
yamlEncoder := goyamlv3.NewEncoder(&b)
yamlEncoder.SetIndent(2)
err = yamlEncoder.Encode(&projectsList)
if err != nil {
return fmt.Errorf("encoding the project list into a byte buffer: %v", err)
}
err = os.WriteFile(upstreamProjectsTrackerFilePath, b.Bytes(), 0o644)
if err != nil {
return fmt.Errorf("writing upstream projects tracker file: %v", err)
}
return nil
}