in cmd/annotatestablegen/main.go [30:122]
func main() {
cwd, err := os.Getwd()
if err != nil {
log.Fatalf("failed to get current working directory: %v", err)
}
repoRoot, err := repotools.FindRepoRoot(cwd)
if err != nil {
log.Fatalf("failed to get git repo root: %v", err)
}
tags, err := git.Tags(repoRoot)
if err != nil {
log.Fatalf("failed to get git repository tags: %v", err)
}
moduleTags := git.ParseModuleTags(tags)
discoverer := gomod.NewDiscoverer(repoRoot)
if err := discoverer.Discover(); err != nil {
log.Fatalf("failed to discover go modules: %v", err)
}
modules := discoverer.Modules()
if err != nil {
log.Fatalf("failed to get modules relative to repo: %v", err)
}
var toRelease []string
for it := modules.Iterator(); ; {
module := it.Next()
if module == nil {
break
}
fullPath := module.AbsPath()
isGenerated, err := isGeneratedModule(fullPath)
if err != nil {
log.Fatalf("failed to determine if module is generated: %v", err)
}
if !isGenerated {
continue
}
stable, err := isGeneratedModuleStable(fullPath)
if err != nil {
log.Fatalf("failed to determine if generated module is stable: %v", err)
}
latest, ok := moduleTags.Latest(module.Path())
if !ok && stable {
toRelease = append(toRelease, module.Path())
} else if ok && stable && len(semver.Prerelease(latest)) > 0 {
toRelease = append(toRelease, module.Path())
}
}
if len(toRelease) == 0 {
log.Printf("[INFO] no generated modules require release annotation")
return
}
var annotation changelog.Annotation
annotation, err = changelog.LoadAnnotation(repoRoot, reservedChangeID)
if err != nil && !os.IsNotExist(err) {
log.Fatalf("failed to load module annotation: %v", err)
}
if err != nil {
annotation, err = changelog.NewAnnotation()
if err != nil {
log.Fatalf("failed to generated annotation: %v", err)
}
annotation.ID = reservedChangeID
annotation.Type = changelog.ReleaseChangeType
annotation.Description = description
} else if annotation.Type != changelog.ReleaseChangeType {
log.Fatalf("annotation type does not match the expected type")
}
sort.Strings(annotation.Modules)
for _, modDir := range toRelease {
annotation.Modules = repotools.AppendIfNotPresent(annotation.Modules, modDir)
}
if err := changelog.WriteAnnotation(repoRoot, annotation); err != nil {
log.Fatalf("failed to write annotation: %v", err)
}
}