// Command pflichttestgate ist das CI-Gate aus docs/TESTSTRATEGIE-CORE.md Abschnitt 5. // Aufruf: pflichttestgate // Beendet sich mit Exit-Code 1 und einer Liste der Verstöße, wenn ein sicherheitskritisches // Package ohne begleitende Testdatei geändert wurde. package main import ( "bufio" "fmt" "os" "gitea.perlbach24.de/scripte/nexarch/internal/pflichttestgate" ) func main() { var changedFiles []string scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { line := scanner.Text() if line != "" { changedFiles = append(changedFiles, line) } } if err := scanner.Err(); err != nil { fmt.Fprintf(os.Stderr, "pflichttestgate: Eingabe konnte nicht gelesen werden: %v\n", err) os.Exit(2) } violations := pflichttestgate.CheckDiff(changedFiles) if len(violations) == 0 { fmt.Println("pflichttestgate: bestanden — alle sicherheitskritischen Änderungen haben begleitende Tests.") return } fmt.Fprintln(os.Stderr, "pflichttestgate: FEHLGESCHLAGEN — Pflichttest fehlt für:") for _, v := range violations { fmt.Fprintf(os.Stderr, " - Package %q (Datei %q hat keine begleitende _test.go-Änderung)\n", v.Package, v.ChangedFile) } fmt.Fprintln(os.Stderr, "\nSiehe docs/TESTSTRATEGIE-CORE.md Abschnitt 3.") os.Exit(1) }