func main()

in windows-builder/builder/main.go [40:114]


func main() {
	log.Print("Starting Windows builder")
	flag.Parse()
	var r *builder.Remote
	var s *builder.Server
	var bs *builder.BuilderServer

	// Connect to server
	if (*hostname != "") && (*username != "") && (*password != "") {
		r = &builder.Remote{
			Hostname: hostname,
			Username: username,
			Password: password,
		}
		log.Printf("Connecting to existing host %s", *r.Hostname)
	} else {
		ctx := context.Background()
		bs = &builder.BuilderServer{
			ImageUrl:         image,
			VPC:              network,
			Subnet:           subnetwork,
			Region:           region,
			Zone:             zone,
			Labels:           labels,
			MachineType:      machineType,
			Preemptible:      preemptible,
			DiskSizeGb:       diskSizeGb,
			DiskType:         diskType,
			ServiceAccount:   serviceAccount,
			Tags:             tags,
			UseInternalNet:   useInternalNet,
			CreateExternalIP: createExternalIP,
		}
		s = builder.NewServer(ctx, bs)
		r = &s.Remote

		log.Print("Setting up termination signal handler")
		sigsChannel := make(chan os.Signal, 1)
		signal.Notify(sigsChannel, syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT)
		go func() {
			sig := <-sigsChannel
			log.Printf("Signal %+v received, terminating", sig)
			deleteInstanceAndExit(s, bs, 1)
		}()
	}

	log.Print("Waiting for server to become available")
	err := r.Wait()
	if err != nil {
		log.Printf("Error connecting to server: %+v", err)
		deleteInstanceAndExit(s, bs, 1)
	}

	r.BucketName = workspaceBucket
	// Copy workspace to remote machine
	if !*notCopyWorkspace {
		log.Print("Copying workspace")
		err = r.Copy(*workspacePath, *copyTimeout)
		if err != nil {
			log.Printf("Error copying workspace: %+v", err)
			deleteInstanceAndExit(s, bs, 1)
		}
	}

	// Execute on remote
	log.Printf("Executing command %s", *command)
	err = r.Run(*command, *commandTimeout)
	if err != nil {
		log.Printf("Error executing command: %+v", err)
		deleteInstanceAndExit(s, bs, 1)
	}

	// Shut down server if started
	deleteInstanceAndExit(s, bs, 0)
}