in commands/helpers/cache_archiver.go [102:151]
func (c *CacheArchiverCommand) handleGoCloudURL(file io.Reader) error {
logrus.Infoln("Uploading", filepath.Base(c.File), "to", url_helpers.CleanURL(c.GoCloudURL))
if c.mux == nil {
c.mux = blob.DefaultURLMux()
}
ctx, cancelWrite := context.WithCancel(context.Background())
defer cancelWrite()
u, err := url.Parse(c.GoCloudURL)
if err != nil {
return err
}
err = loadEnvFile(c.EnvFile)
if err != nil {
return err
}
objectName := strings.TrimLeft(u.Path, "/")
if objectName == "" {
return fmt.Errorf("no object name provided")
}
b, err := c.mux.OpenBucket(ctx, c.GoCloudURL)
if err != nil {
return err
}
defer b.Close()
writer, err := b.NewWriter(ctx, objectName, nil)
if err != nil {
return err
}
if _, err = io.Copy(writer, file); err != nil {
cancelWrite()
if writerErr := writer.Close(); writerErr != nil {
logrus.WithError(writerErr).Error("error closing Go cloud upload after copy failure")
}
return err
}
if err := writer.Close(); err != nil {
return err
}
return nil
}