github.com/secure-build/gitlab-runner@v12.5.0+incompatible/cache/s3/adapter.go (about) 1 package s3 2 3 import ( 4 "fmt" 5 "net/url" 6 "time" 7 8 "github.com/sirupsen/logrus" 9 10 "gitlab.com/gitlab-org/gitlab-runner/cache" 11 "gitlab.com/gitlab-org/gitlab-runner/common" 12 ) 13 14 type s3Adapter struct { 15 timeout time.Duration 16 config *common.CacheS3Config 17 objectName string 18 client minioClient 19 } 20 21 func (a *s3Adapter) GetDownloadURL() *url.URL { 22 URL, err := a.client.PresignedGetObject(a.config.BucketName, a.objectName, a.timeout, nil) 23 if err != nil { 24 logrus.WithError(err).Error("error while generating S3 pre-signed URL") 25 26 return nil 27 } 28 29 return URL 30 } 31 32 func (a *s3Adapter) GetUploadURL() *url.URL { 33 URL, err := a.client.PresignedPutObject(a.config.BucketName, a.objectName, a.timeout) 34 if err != nil { 35 logrus.WithError(err).Error("error while generating S3 pre-signed URL") 36 37 return nil 38 } 39 40 return URL 41 } 42 43 func New(config *common.CacheConfig, timeout time.Duration, objectName string) (cache.Adapter, error) { 44 s3 := config.S3 45 if s3 == nil { 46 return nil, fmt.Errorf("missing S3 configuration") 47 } 48 49 client, err := newMinioClient(s3) 50 if err != nil { 51 return nil, fmt.Errorf("error while creating S3 cache storage client: %v", err) 52 } 53 54 a := &s3Adapter{ 55 config: s3, 56 timeout: timeout, 57 objectName: objectName, 58 client: client, 59 } 60 61 return a, nil 62 } 63 64 func init() { 65 err := cache.Factories().Register("s3", New) 66 if err != nil { 67 panic(err) 68 } 69 }