in hack/boilerplate.go [51:97]
func addLicense(path string, d fs.DirEntry, err error) error {
if !strings.HasSuffix(path, ".go") {
return nil
}
srcFile, err := os.Open(path)
if err != nil {
return fmt.Errorf("opening %s, %w", srcFile.Name(), err)
}
defer srcFile.Close()
buf := make([]byte, len(apacheLicense)+50)
_, err = srcFile.Read(buf)
if err != nil {
return fmt.Errorf("reading %s, %w", srcFile.Name(), err)
}
if bytes.Index(buf, []byte(`http://www.apache.org/licenses/LICENSE-2.0`)) != -1 {
return nil
}
log.Println("adding license to", path)
tmp, err := os.CreateTemp("", "")
if err != nil {
return fmt.Errorf("creating temp file, %w", err)
}
defer os.Remove(tmp.Name())
defer tmp.Close()
// write the license to the file
fmt.Fprint(tmp, apacheLicense)
if _, err := srcFile.Seek(0, io.SeekStart); err != nil {
return fmt.Errorf("seeking, %w", err)
}
// followed by the source file contents
_, err = io.Copy(tmp, srcFile)
if err != nil {
return fmt.Errorf("creating source, %w", err)
}
if err := os.Remove(path); err != nil {
return fmt.Errorf("removing %s, %w", path, err)
}
if err := os.Rename(tmp.Name(), path); err != nil {
return fmt.Errorf("moving %s => %s, %w", tmp.Name(), path, err)
}
return nil
}