in cmd/wrapper/main.go [222:251]
func uploadGCSObject(ctx context.Context, client *storage.Client, path string, data io.Reader) error {
u, err := url.Parse(path)
if err != nil {
log.Fatalf("failed to parse gcs url: %v", err)
}
object := strings.TrimPrefix(u.Path, "/")
log.Printf("uploading to bucket %s object %s\n", u.Host, object)
upload := func() error {
dst := client.Bucket(u.Host).Object(object).NewWriter(ctx)
if _, err := io.Copy(dst, data); err != nil {
return fmt.Errorf("failed to write to gcs: %w", err)
}
if err := dst.Close(); err != nil {
return fmt.Errorf("failed to close gcs writer: %w", err)
}
return nil
}
var uploadErr error
for i := 1; i <= 5; i++ {
if uploadErr = upload(); uploadErr != nil {
time.Sleep(time.Duration(i) * time.Second)
continue
}
break
}
return uploadErr
}