func main()

in scripts/gendockerfile.go [74:128]


func main() {
	flag.Parse()

	// Locate all go.mod files.
	var moduleDirs []string
	if err := filepath.Walk(*baseFlag, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}
		if !info.IsDir() {
			if info.Name() == "go.mod" {
				moduleDirs = append(moduleDirs, relPath(filepath.Dir(path)))
			}
			return nil
		}
		name := info.Name()
		if name != *baseFlag && (name == "vendor" || name == "tools" || strings.HasPrefix(name, ".")) {
			return filepath.SkipDir
		}
		return nil
	}); err != nil {
		log.Fatal(err)
	}
	sort.Strings(moduleDirs)

	var buf bytes.Buffer
	var out io.Writer = &buf
	outFile := filepath.Join(*baseFlag, "scripts", *outFlag)
	if !*diffFlag {
		f, err := os.Create(outFile)
		if err != nil {
			log.Fatal(err)
		}
		defer f.Close()
		out = f
	}

	var data struct {
		Dirs []string
	}
	data.Dirs = moduleDirs

	if err := dockerfileTemplate.Execute(out, &data); err != nil {
		log.Fatal(err)
	}
	if *diffFlag {
		cmd := exec.Command("diff", "-c", outFile, "-")
		cmd.Stdin = &buf
		cmd.Stdout = os.Stdout
		cmd.Stderr = os.Stderr
		if err := cmd.Run(); err != nil {
			log.Fatal(err)
		}
	}
}