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())
}
}