package main import ( "os" "strings" "testing" ) // The build agent and the toolchain images are gone (novox/hq ADR 0524 ยง5, issue 1295 and E6 of milestone R4g): no text a module // can show names them. Where the word stands for a reason that is another lane's or still waits for its change, buildagent-allowed // names the module's directory with that reason and the date it is dated from; the list only shrinks: a directory on it that no // longer names the word is refused, so the line is taken out. var gone = []string{"build-agent", "build agent", "toolchain image"} func allowedModules(t *testing.T) map[string]string { t.Helper() raw, err := os.ReadFile("buildagent-allowed") if err != nil { t.Fatal(err) } out := map[string]string{} for _, line := range strings.Split(string(raw), "\n") { entry, why, _ := strings.Cut(line, "#") if entry = strings.TrimSpace(entry); entry != "" && !strings.HasPrefix(line, "#") { if strings.TrimSpace(why) == "" { t.Fatalf("%q is allowed without a reason", entry) } out[entry] = strings.TrimSpace(why) } } return out } func TestNoTextOfTheCatalogueNamesTheBuildAgentOutsideTheModulesAllowed(t *testing.T) { texts, _, err := collect("../..") if err != nil { t.Fatal(err) } allowed := allowedModules(t) seen := map[string]bool{} for _, f := range check(gone, texts) { module := f if rest, ok := strings.CutPrefix(f, "modules/"); ok { module = "modules/" + strings.SplitN(rest, "/", 2)[0] } if _, ok := allowed[module]; ok { seen[module] = true continue } t.Errorf("%s (the build agent and the toolchain images are gone: say what stands in their place)", f) } for module, why := range allowed { if !seen[module] { t.Errorf("buildagent-allowed names %s (%s), which names the word no more: take the line out, so it cannot come back", module, why) } } }