mirror of
https://github.com/gomods/athens
synced 2026-02-03 08:40:31 +00:00
48 lines
1.4 KiB
Go
48 lines
1.4 KiB
Go
package s3
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"io"
|
|
|
|
"github.com/aws/aws-sdk-go-v2/aws"
|
|
"github.com/aws/aws-sdk-go-v2/service/s3"
|
|
"github.com/gomods/athens/pkg/errors"
|
|
"github.com/gomods/athens/pkg/observ"
|
|
moduploader "github.com/gomods/athens/pkg/storage/module"
|
|
)
|
|
|
|
// Save implements the (github.com/gomods/athens/pkg/storage).Saver interface.
|
|
func (s *Storage) Save(ctx context.Context, module, version string, mod []byte, zip io.Reader, zipMD5, info []byte) error {
|
|
const op errors.Op = "s3.Save"
|
|
ctx, span := observ.StartSpan(ctx, op.String())
|
|
defer span.End()
|
|
err := moduploader.Upload(ctx, module, version, bytes.NewReader(info), bytes.NewReader(mod), zip, s.upload, s.timeout)
|
|
// TODO: take out lease on the /list file and add the version to it
|
|
//
|
|
// Do that only after module source+metadata is uploaded
|
|
if err != nil {
|
|
return errors.E(op, err, errors.M(module), errors.V(version))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *Storage) upload(ctx context.Context, path, contentType string, stream io.Reader) error {
|
|
const op errors.Op = "s3.upload"
|
|
ctx, span := observ.StartSpan(ctx, op.String())
|
|
defer span.End()
|
|
|
|
upParams := &s3.PutObjectInput{
|
|
Bucket: aws.String(s.bucket),
|
|
Key: aws.String(path),
|
|
Body: stream,
|
|
ContentType: aws.String(contentType),
|
|
}
|
|
|
|
if _, err := s.uploader.Upload(ctx, upParams); err != nil {
|
|
return errors.E(op, err)
|
|
}
|
|
|
|
return nil
|
|
}
|