func main()

in gcs-fetcher/cmd/gcs-fetcher/main.go [62:126]


func main() {
	flag.Parse()

	if *help {
		fmt.Println("Fetches source files from Google Cloud Storage")
		flag.PrintDefaults()
		return
	}

	var stdout, stderr io.Writer = os.Stdout, os.Stderr
	if outputDir, ok := os.LookupEnv("BUILDER_OUTPUT"); ok {
		if err := os.MkdirAll(outputDir, os.ModePerm); err != nil {
			logFatalf(os.Stderr, "Failed to create folder %s: %v", outputDir, err)
		}
		outfile := filepath.Join(outputDir, "output")
		f, err := os.OpenFile(outfile, os.O_RDWR|os.O_CREATE, 0644)
		if err != nil {
			logFatalf(os.Stderr, "Cannot open output file %s: %v", outfile, err)
		}
		defer func() {
			if cerr := f.Close(); cerr != nil {
				log.Fatalf("Failed to close %q: %v", outfile, cerr)
			}
		}()
		stderr = io.MultiWriter(stderr, f)
	}

	if *location == "" || *sourceType == "" {
		logFatalf(stderr, "Must specify --location and --type")
	}

	ctx := context.Background()
	client, err := storage.NewClient(ctx, option.WithUserAgent(userAgent))
	if err != nil {
		logFatalf(stderr, "Failed to create new GCS client: %v", err)
	}

	bucket, object, generation, err := common.ParseBucketObject(*location)
	if err != nil {
		logFatalf(stderr, "Failed to parse --location: %v", err)
	}

	gcs := &fetcher.Fetcher{
		GCS:         realGCS{client},
		OS:          realOS{},
		DestDir:     *destDir,
		StagingDir:  filepath.Join(*destDir, *stagingFolder),
		CreatedDirs: map[string]bool{},
		Bucket:      bucket,
		Object:      object,
		Generation:  generation,
		TimeoutGCS:  *timeoutGCS,
		WorkerCount: *workerCount,
		Retries:     *retries,
		Backoff:     *backoff,
		SourceType:  *sourceType,
		KeepSource:  *keepSource,
		Verbose:     *verbose,
		Stdout:      stdout,
		Stderr:      stderr,
	}
	if err := gcs.Fetch(ctx); err != nil {
		logFatalf(stderr, "failed to Fetch: %v", err.Error())
	}
}