func main()

in cmds/contest-generator/main.go [33:73]


func main() {
	flag.Usage = usage
	flag.Parse()

	data, err := ioutil.ReadFile(*flagTemplate)
	if err != nil {
		log.Fatalf("Failed to read template file '%s': %v", *flagTemplate, err)
	}
	t, err := template.New("contest").Parse(string(data))
	if err != nil {
		log.Fatalf("Template parsing failed: %v", err)
	}
	cfg, err := readConfig(*flagFromFile)
	if err != nil {
		log.Fatalf("Error parsing configuration file '%s': %v", *flagFromFile, err)
	}
	outfile := *flagOutfile
	if outfile == "" {
		tmpdir, err := ioutil.TempDir("", "contest")
		if err != nil {
			log.Fatalf("Cannot create temporary directory: %v", err)
		}
		outfile = path.Join(tmpdir, "contest.go")
	}

	log.Printf("Generating output file '%s' with the following plugins):\n%s", outfile, cfg)
	outFD, err := os.OpenFile(outfile, os.O_CREATE|os.O_WRONLY, 0644)
	if err != nil {
		log.Fatalf("Failed to create output file '%s': %v", outfile, err)
	}
	defer func() {
		if err := outFD.Close(); err != nil {
			log.Printf("Error while closing file descriptor for '%s': %v", outfile, err)
		}
	}()
	if err := t.Execute(outFD, cfg); err != nil {
		log.Fatalf("Template execution failed: %v", err)
	}
	log.Printf("Generated file '%s'. You can build it by running 'go build' in the output directory.", outfile)
	fmt.Println(path.Dir(outfile))
}