@@ -2,20 +2,22 @@ package driver
22
33import (
44 "bytes"
5+ "context"
6+ "errors"
57 "fmt"
68 "io"
79 "strings"
810
9- "github.com/aws/aws-sdk-go/aws"
10- "github.com/aws/aws-sdk-go/aws/awserr "
11- "github.com/aws/aws-sdk-go/service/s3"
11+ "github.com/aws/aws-sdk-go-v2 /aws"
12+ "github.com/aws/aws-sdk-go-v2/service/s3 "
13+ "github.com/aws/aws-sdk-go-v2 /service/s3/types "
1214 "github.com/blang/semver"
1315 "github.com/concourse/semver-resource/version"
1416)
1517
1618type Servicer interface {
17- GetObject (* s3.GetObjectInput ) (* s3.GetObjectOutput , error )
18- PutObject (* s3.PutObjectInput ) (* s3.PutObjectOutput , error )
19+ GetObject (context. Context , * s3.GetObjectInput , ... func ( * s3. Options ) ) (* s3.GetObjectOutput , error )
20+ PutObject (context. Context , * s3.PutObjectInput , ... func ( * s3. Options ) ) (* s3.PutObjectOutput , error )
1921}
2022
2123type S3Driver struct {
@@ -30,10 +32,11 @@ type S3Driver struct {
3032func (driver * S3Driver ) Bump (bump version.Bump ) (semver.Version , error ) {
3133 var currentVersion semver.Version
3234
33- resp , err := driver .Svc .GetObject (& s3.GetObjectInput {
34- Bucket : aws .String (driver .BucketName ),
35- Key : aws .String (driver .Key ),
36- })
35+ resp , err := driver .Svc .GetObject (context .TODO (),
36+ & s3.GetObjectInput {
37+ Bucket : aws .String (driver .BucketName ),
38+ Key : aws .String (driver .Key ),
39+ })
3740 if err == nil {
3841 bucketNumberPayload , err := io .ReadAll (resp .Body )
3942 if err != nil {
@@ -46,10 +49,13 @@ func (driver *S3Driver) Bump(bump version.Bump) (semver.Version, error) {
4649 if err != nil {
4750 return semver.Version {}, err
4851 }
49- } else if s3err , ok := err .(awserr.RequestFailure ); ok && s3err .StatusCode () == 404 {
50- currentVersion = driver .InitialVersion
5152 } else {
52- return semver.Version {}, err
53+ var noSuchKey * types.NoSuchKey
54+ if errors .As (err , & noSuchKey ) {
55+ currentVersion = driver .InitialVersion
56+ } else {
57+ return semver.Version {}, err
58+ }
5359 }
5460
5561 newVersion := bump .Apply (currentVersion )
@@ -68,21 +74,20 @@ func (driver *S3Driver) Set(newVersion semver.Version) error {
6874 Key : aws .String (driver .Key ),
6975 ContentType : aws .String ("text/plain" ),
7076 Body : bytes .NewReader ([]byte (newVersion .String ())),
71- ACL : aws .String (s3 .ObjectCannedACLPrivate ),
7277 }
7378
7479 if len (driver .ServerSideEncryption ) > 0 {
75- params .ServerSideEncryption = aws . String (driver .ServerSideEncryption )
80+ params .ServerSideEncryption = types . ServerSideEncryption (driver .ServerSideEncryption )
7681 }
7782
78- _ , err := driver .Svc .PutObject (params )
83+ _ , err := driver .Svc .PutObject (context . TODO (), params )
7984 return err
8085}
8186
8287func (driver * S3Driver ) Check (cursor * semver.Version ) ([]semver.Version , error ) {
8388 var bucketNumber string
8489
85- resp , err := driver .Svc .GetObject (& s3.GetObjectInput {
90+ resp , err := driver .Svc .GetObject (context . TODO (), & s3.GetObjectInput {
8691 Bucket : aws .String (driver .BucketName ),
8792 Key : aws .String (driver .Key ),
8893 })
@@ -94,14 +99,17 @@ func (driver *S3Driver) Check(cursor *semver.Version) ([]semver.Version, error)
9499 defer resp .Body .Close ()
95100
96101 bucketNumber = string (bucketNumberPayload )
97- } else if s3err , ok := err .(awserr.RequestFailure ); ok && s3err .StatusCode () == 404 {
98- if cursor == nil {
99- return []semver.Version {driver .InitialVersion }, nil
102+ } else {
103+ var noSuchKey * types.NoSuchKey
104+ if errors .As (err , & noSuchKey ) {
105+ if cursor == nil {
106+ return []semver.Version {driver .InitialVersion }, nil
107+ } else {
108+ return []semver.Version {}, nil
109+ }
100110 } else {
101- return []semver. Version {}, nil
111+ return nil , err
102112 }
103- } else {
104- return nil , err
105113 }
106114
107115 bucketVersion , err := semver .Parse (bucketNumber )
0 commit comments