func main()

in tools/teamcity-generator/main.go [20:81]


func main() {
	var version string
	var outputPath string

	flag.Parse()
	outputPath = *oPath
	version = *ver
	if outputPath == "" {
		log.Fatalf("missing output flag: provide `--output <path>` to set the path to output generated files to")
	}
	if version == "" {
		log.Fatalf("missing version flag: provide `--version <ga|beta>` to set the path to output generated files to")
	}
	if version != GA_VERSION && version != BETA_VERSION {
		log.Fatalf("invalid version flag value: value must be `%s` or `%s`", GA_VERSION, BETA_VERSION)
	}

	var terraformResourceDirectory string
	switch version {
	case GA_VERSION:
		terraformResourceDirectory = "google"
	case BETA_VERSION:
		terraformResourceDirectory = "google-beta"
	default:
		log.Fatalf("invalid version flag value: value must be `%s` or `%s`", GA_VERSION, BETA_VERSION)
	}

	log.Printf("Generating TeamCity configuration service package map for `%s` provider", terraformResourceDirectory)

	// Get a list of the service packages found in a given directory
	servicesDir := fmt.Sprintf("%s/%s/services", outputPath, terraformResourceDirectory)
	serviceList, err := readAllServicePackages(servicesDir)
	if err != nil {
		log.Fatalf("error determining service package list: %s", err)
	}

	// Create a string of the map that should be created in .teamcity/components/generated/services.kt
	relativeServicesDir := fmt.Sprintf("./%s/services", terraformResourceDirectory)
	serviceMap, err := createMap(serviceList, relativeServicesDir)
	if err != nil {
		log.Fatalf("error creating service package map: %s", err)
	}

	// Ensure .teamcity/components/generated/services.kt exists, create if not present
	// "Create creates or truncates the named file. If the file already exists, it is truncated."
	servicesKtFilePath := fmt.Sprintf("%s/.teamcity/components/generated/services.kt", outputPath)
	log.Printf("Opening %s", servicesKtFilePath)
	f, err := os.Create(servicesKtFilePath)
	if err != nil {
		log.Fatalf("error creating or truncating existing file `.teamcity/components/generated/services.kt` in output directory: %s", err)
	}
	defer f.Close()

	// Save map to .teamcity/components/generated/services.kt
	log.Printf("Saving service map to %s", servicesKtFilePath)
	_, err = f.Write([]byte(serviceMap))
	if err != nil {
		log.Fatalf("error writing to file `.teamcity/components/generated/services.kt` in output directory: %s", err)
	}

	log.Println("Finished")
}