func uploadGCSObject()

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
}