99 "github.com/aws/aws-sdk-go-v2/credentials"
1010 "github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds"
1111 "github.com/aws/aws-sdk-go-v2/service/s3"
12+ "github.com/aws/smithy-go/middleware"
13+ smithyhttp "github.com/aws/smithy-go/transport/http"
1214 log "github.com/sirupsen/logrus"
1315)
1416
@@ -26,6 +28,30 @@ type S3StorageOptions struct {
2628 Config StorageConfig
2729}
2830
31+ type removeS3OperationIDMiddleware struct {}
32+
33+ func (m * removeS3OperationIDMiddleware ) ID () string {
34+ return "RemoveS3OperationIDMiddleware"
35+ }
36+
37+ func (m * removeS3OperationIDMiddleware ) HandleBuild (ctx context.Context , in middleware.BuildInput , next middleware.BuildHandler ) (
38+ out middleware.BuildOutput ,
39+ metadata middleware.Metadata ,
40+ err error ,
41+ ) {
42+ if request , ok := in .Request .(* smithyhttp.Request ); ok {
43+ query := request .URL .Query ()
44+ query .Del ("x-id" )
45+ request .URL .RawQuery = query .Encode ()
46+ }
47+
48+ return next .HandleBuild (ctx , in )
49+ }
50+
51+ func removeS3OperationID (stack * middleware.Stack ) error {
52+ return stack .Build .Add (& removeS3OperationIDMiddleware {}, middleware .After )
53+ }
54+
2955func NewS3Storage (options S3StorageOptions ) (* S3Storage , error ) {
3056 if options .URL != "" {
3157 return createS3StorageUsingEndpoint (options .Bucket , options .Project , options .URL , options .Config )
@@ -52,7 +78,9 @@ func createDefaultS3Storage(s3Bucket, project string, storageConfig StorageConfi
5278 }
5379
5480 return & S3Storage {
55- Client : s3 .NewFromConfig (config ),
81+ Client : s3 .NewFromConfig (config , func (o * s3.Options ) {
82+ o .APIOptions = append (o .APIOptions , removeS3OperationID )
83+ }),
5684 Bucket : s3Bucket ,
5785 Project : project ,
5886 StorageConfig : storageConfig ,
@@ -69,7 +97,9 @@ func createDefaultS3Storage(s3Bucket, project string, storageConfig StorageConfi
6997 }
7098
7199 return & S3Storage {
72- Client : s3 .NewFromConfig (config ),
100+ Client : s3 .NewFromConfig (config , func (o * s3.Options ) {
101+ o .APIOptions = append (o .APIOptions , removeS3OperationID )
102+ }),
73103 Bucket : s3Bucket ,
74104 Project : project ,
75105 StorageConfig : storageConfig ,
@@ -83,20 +113,28 @@ func createDefaultS3Storage(s3Bucket, project string, storageConfig StorageConfi
83113 }
84114
85115 return & S3Storage {
86- Client : s3 .NewFromConfig (config ),
116+ Client : s3 .NewFromConfig (config , func (o * s3.Options ) {
117+ o .APIOptions = append (o .APIOptions , removeS3OperationID )
118+ }),
87119 Bucket : s3Bucket ,
88120 Project : project ,
89121 StorageConfig : storageConfig ,
90122 }, nil
91123}
92124
93125func createS3StorageUsingEndpoint (s3Bucket , project , s3Url string , storageConfig StorageConfig ) (* S3Storage , error ) {
126+ region := os .Getenv ("SEMAPHORE_CACHE_S3_REGION" )
127+ if region == "" {
128+ region = "auto"
129+ }
130+
94131 options := []func (* awsConfig.LoadOptions ) error {
95- awsConfig .WithRegion ("auto" ),
132+ awsConfig .WithRegion (region ),
96133 awsConfig .WithEndpointResolverWithOptions (
97134 aws .EndpointResolverWithOptionsFunc (func (service , region string , options ... interface {}) (aws.Endpoint , error ) {
98135 return aws.Endpoint {
99- URL : s3Url ,
136+ URL : s3Url ,
137+ SigningRegion : region ,
100138 }, nil
101139 }),
102140 ),
@@ -125,6 +163,7 @@ func createS3StorageUsingEndpoint(s3Bucket, project, s3Url string, storageConfig
125163 StorageConfig : storageConfig ,
126164 Client : s3 .NewFromConfig (cfg , func (o * s3.Options ) {
127165 o .UsePathStyle = true
166+ o .APIOptions = append (o .APIOptions , removeS3OperationID )
128167 }),
129168 }, nil
130169}
0 commit comments