Skip to content

Commit

Permalink
Centralize uploads in a single bucket
Browse files Browse the repository at this point in the history
  • Loading branch information
jasonrudolph committed Jun 3, 2021
1 parent de84945 commit be57499
Show file tree
Hide file tree
Showing 7 changed files with 149 additions and 44 deletions.
14 changes: 10 additions & 4 deletions internal/cmd/submit/submit.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ type Submit struct {

envs map[string]string
path string
bucket string
accountID uint64
repositoryID uint64
repositoryPath string
Expand Down Expand Up @@ -150,6 +151,11 @@ func (s *Submit) Init(args []string, envs map[string]string, commitResolverFacto
}
s.credentials.SecretAccessKey = key

s.bucket, ok = envs["BUILDPULSE_BUCKET"]
if !ok {
s.bucket = "buildpulse-uploads"
}

if flagset["repository-dir"] && flagset["tree"] {
return fmt.Errorf("invalid use of flag -repository-dir with flag -tree: use one or the other, but not both")
}
Expand Down Expand Up @@ -231,10 +237,9 @@ func (s *Submit) Run() (string, error) {

// upload transmits the file at the given path to S3
func (s *Submit) upload(path string) (string, error) {
bucket := fmt.Sprintf("%d.buildpulse-uploads", s.accountID)
key := fmt.Sprintf("%d/buildpulse-%s.gz", s.repositoryID, s.idgen())
key := fmt.Sprintf("%d/%d/buildpulse-%s.gz", s.accountID, s.repositoryID, s.idgen())

err := putS3Object(s.client, s.credentials.AccessKeyID, s.credentials.SecretAccessKey, bucket, key, path)
err := putS3Object(s.client, s.credentials.AccessKeyID, s.credentials.SecretAccessKey, s.bucket, key, path)
if err != nil {
return "", err
}
Expand Down Expand Up @@ -344,7 +349,7 @@ func putS3Object(client *http.Client, id string, secret string, bucket string, o
sess, err := session.NewSession(
aws.NewConfig().
WithCredentials(awscreds.NewCredentials(provider)).
WithRegion("us-east-2").
WithRegion("us-east-1").
WithHTTPClient(client),
)
if err != nil {
Expand All @@ -361,6 +366,7 @@ func putS3Object(client *http.Client, id string, secret string, bucket string, o
_, err = uploader.Upload(&s3manager.UploadInput{
Bucket: aws.String(bucket),
Key: aws.String(objectKey),
ACL: aws.String("bucket-owner-full-control"),
Body: file,
})
if err != nil {
Expand Down
41 changes: 38 additions & 3 deletions internal/cmd/submit/submit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ func TestSubmit_Init(t *testing.T) {
assert.Equal(t, resultsDir, s.path)
assert.EqualValues(t, 42, s.accountID)
assert.EqualValues(t, 8675309, s.repositoryID)
assert.Equal(t, "buildpulse-uploads", s.bucket)
assert.Equal(t, "some-access-key-id", s.credentials.AccessKeyID)
assert.Equal(t, "some-secret-access-key", s.credentials.SecretAccessKey)
assert.Equal(t, exampleEnv, s.envs)
Expand Down Expand Up @@ -76,6 +77,24 @@ func TestSubmit_Init(t *testing.T) {
assert.Equal(t, resultsDir, s.path)
assert.Equal(t, "Static", s.commitResolver.Source())
})

t.Run("WithBuildPulseBucketEnvVar", func(t *testing.T) {
repoDir := t.TempDir()

envs := map[string]string{
"BUILDPULSE_ACCESS_KEY_ID": "some-access-key-id",
"BUILDPULSE_SECRET_ACCESS_KEY": "some-secret-access-key",
"BUILDPULSE_BUCKET": "buildpulse-uploads-test",
}
s := NewSubmit(&metadata.Version{}, logger.New())
err = s.Init(
[]string{resultsDir, "--account-id", "42", "--repository-id", "8675309", "--repository-dir", repoDir},
envs,
new(stubCommitResolverFactory),
)
assert.NoError(t, err)
assert.Equal(t, "buildpulse-uploads-test", s.bucket)
})
}

func TestSubmit_Init_invalidArgs(t *testing.T) {
Expand Down Expand Up @@ -302,6 +321,7 @@ func TestSubmit_Run(t *testing.T) {
commitResolver: metadata.NewStaticCommitResolver(&metadata.Commit{TreeSHA: "ccccccccccccccccccccdddddddddddddddddddd"}, log),
envs: envs,
path: dir,
bucket: "buildpulse-uploads",
accountID: 42,
repositoryID: 8675309,
credentials: credentials{
Expand All @@ -320,13 +340,14 @@ func TestSubmit_Run(t *testing.T) {
assert.Contains(t, string(yaml), ":tree: ccccccccccccccccccccdddddddddddddddddddd")
assert.Contains(t, string(yaml), ":reporter_version: v1.2.3")

assert.Equal(t, "8675309/buildpulse-00000000-0000-0000-0000-000000000000.gz", key)
assert.Equal(t, "42/8675309/buildpulse-00000000-0000-0000-0000-000000000000.gz", key)
}

func Test_upload(t *testing.T) {
tests := []struct {
name string
fixture string
bucket string
accountID uint64
accessKeyID string
secretAccessKey string
Expand All @@ -335,6 +356,7 @@ func Test_upload(t *testing.T) {
{
name: "success",
fixture: "testdata/s3-success",
bucket: "buildpulse-uploads",
accountID: 42,
accessKeyID: accessKeyID,
secretAccessKey: secretAccessKey,
Expand All @@ -343,6 +365,7 @@ func Test_upload(t *testing.T) {
{
name: "bad access key ID",
fixture: "testdata/s3-bad-access-key-id",
bucket: "buildpulse-uploads",
accountID: 42,
accessKeyID: "some-bogus-access-key-id",
secretAccessKey: secretAccessKey,
Expand All @@ -351,15 +374,26 @@ func Test_upload(t *testing.T) {
{
name: "bad secret access key",
fixture: "testdata/s3-bad-secret-access-key",
bucket: "buildpulse-uploads",
accountID: 42,
accessKeyID: accessKeyID,
secretAccessKey: "some-bogus-secret-access-key",
err: "SignatureDoesNotMatch",
},
{
name: "credentials not authorized for account ID",
fixture: "testdata/s3-unauthorized-object-prefix",
bucket: "buildpulse-uploads",
accountID: 1,
accessKeyID: accessKeyID,
secretAccessKey: secretAccessKey,
err: "AccessDenied",
},
{
name: "bad bucket",
fixture: "testdata/s3-bad-bucket",
accountID: 1,
bucket: "some-bogus-bucket",
accountID: 42,
accessKeyID: accessKeyID,
secretAccessKey: secretAccessKey,
err: "NoSuchBucket",
Expand All @@ -380,6 +414,7 @@ func Test_upload(t *testing.T) {
client: &http.Client{Transport: r},
idgen: func() uuid.UUID { return uuid.MustParse("00000000-0000-0000-0000-000000000000") },
logger: logger.New(),
bucket: tt.bucket,
accountID: tt.accountID,
repositoryID: 8675309,
credentials: credentials{
Expand All @@ -390,7 +425,7 @@ func Test_upload(t *testing.T) {
key, err := s.upload("testdata/example-test-results.tar.gz")
if tt.err == "" {
assert.NoError(t, err)
assert.Equal(t, "8675309/buildpulse-00000000-0000-0000-0000-000000000000.gz", key)
assert.Equal(t, "42/8675309/buildpulse-00000000-0000-0000-0000-000000000000.gz", key)
} else {
assert.Contains(t, err.Error(), tt.err)
}
Expand Down
16 changes: 9 additions & 7 deletions internal/cmd/submit/testdata/s3-bad-access-key-id.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,28 +26,30 @@ interactions:
Content-Md5:
- 6gFDgFr83IG+LPcNWlCHvw==
User-Agent:
- aws-sdk-go/1.33.7 (go1.14.4; darwin; amd64) S3Manager
- aws-sdk-go/1.38.30 (go1.16.4; darwin; amd64) S3Manager
X-Amz-Acl:
- bucket-owner-full-control
X-Amz-Content-Sha256:
- f3f8d97071a55a395844dda7fcf8d8d5aba75001f198ec8b4e704cae6752b24a
X-Amz-Date:
- 20200719T143259Z
url: https://s3.us-east-2.amazonaws.com/42.buildpulse-uploads/8675309/buildpulse-00000000-0000-0000-0000-000000000000.gz
- 20210531T214646Z
url: https://buildpulse-uploads.s3.amazonaws.com/42/8675309/buildpulse-00000000-0000-0000-0000-000000000000.gz
method: PUT
response:
body: |-
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>InvalidAccessKeyId</Code><Message>The AWS Access Key Id you provided does not exist in our records.</Message><AWSAccessKeyId>some-bogus-access-key-id</AWSAccessKeyId><RequestId>58AC6676F94D46D0</RequestId><HostId>QGt3B5LNYCZnL10BuuK1ggBNiZNxvyGvflveIvkfrqZLRJ0WZEC+7P8kSGj4PC2xxYVhSp0t1tU=</HostId></Error>
<Error><Code>InvalidAccessKeyId</Code><Message>The AWS Access Key Id you provided does not exist in our records.</Message><AWSAccessKeyId>some-bogus-access-key-id</AWSAccessKeyId><RequestId>V3SN21JQXCN0XBRX</RequestId><HostId>pkBIxHU70/CW12+4y15EH6VV8m5lwDi0WarPpRsoTfTEnXMDHjGp4M0maJ8AWRlVOzFuuep66j8=</HostId></Error>
headers:
Content-Type:
- application/xml
Date:
- Sun, 19 Jul 2020 14:32:59 GMT
- Mon, 31 May 2021 21:46:47 GMT
Server:
- AmazonS3
X-Amz-Id-2:
- QGt3B5LNYCZnL10BuuK1ggBNiZNxvyGvflveIvkfrqZLRJ0WZEC+7P8kSGj4PC2xxYVhSp0t1tU=
- pkBIxHU70/CW12+4y15EH6VV8m5lwDi0WarPpRsoTfTEnXMDHjGp4M0maJ8AWRlVOzFuuep66j8=
X-Amz-Request-Id:
- 58AC6676F94D46D0
- V3SN21JQXCN0XBRX
status: 403 Forbidden
code: 403
duration: ""
16 changes: 9 additions & 7 deletions internal/cmd/submit/testdata/s3-bad-bucket.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,28 +26,30 @@ interactions:
Content-Md5:
- 6gFDgFr83IG+LPcNWlCHvw==
User-Agent:
- aws-sdk-go/1.33.7 (go1.14.4; darwin; amd64) S3Manager
- aws-sdk-go/1.38.30 (go1.16.4; darwin; amd64) S3Manager
X-Amz-Acl:
- bucket-owner-full-control
X-Amz-Content-Sha256:
- f3f8d97071a55a395844dda7fcf8d8d5aba75001f198ec8b4e704cae6752b24a
X-Amz-Date:
- 20200719T143259Z
url: https://s3.us-east-2.amazonaws.com/1.buildpulse-uploads/8675309/buildpulse-00000000-0000-0000-0000-000000000000.gz
- 20210531T214648Z
url: https://some-bogus-bucket.s3.amazonaws.com/42/8675309/buildpulse-00000000-0000-0000-0000-000000000000.gz
method: PUT
response:
body: |-
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>NoSuchBucket</Code><Message>The specified bucket does not exist</Message><BucketName>1.buildpulse-uploads</BucketName><RequestId>C5FC16CF1F3BC159</RequestId><HostId>Cpe4wKK/oIGVgeKjYMEw2J5jjCfNSOUj+fDaBxDO8EzsRhv+Gnk4x3zfSFu5oiBD35LrSzWbQmY=</HostId></Error>
<Error><Code>NoSuchBucket</Code><Message>The specified bucket does not exist</Message><BucketName>some-bogus-bucket</BucketName><RequestId>58A71AVNTZZBQJWY</RequestId><HostId>Ie1S/LTzl32U1TevgGUWYBwhlnxLtThyC+qHS9OrpXCqXNyiYwIp2hmlNhpmF1a5Stuxv/FXaX0=</HostId></Error>
headers:
Content-Type:
- application/xml
Date:
- Sun, 19 Jul 2020 14:32:59 GMT
- Mon, 31 May 2021 21:46:49 GMT
Server:
- AmazonS3
X-Amz-Id-2:
- Cpe4wKK/oIGVgeKjYMEw2J5jjCfNSOUj+fDaBxDO8EzsRhv+Gnk4x3zfSFu5oiBD35LrSzWbQmY=
- Ie1S/LTzl32U1TevgGUWYBwhlnxLtThyC+qHS9OrpXCqXNyiYwIp2hmlNhpmF1a5Stuxv/FXaX0=
X-Amz-Request-Id:
- C5FC16CF1F3BC159
- 58A71AVNTZZBQJWY
status: 404 Not Found
code: 404
duration: ""
33 changes: 18 additions & 15 deletions internal/cmd/submit/testdata/s3-bad-secret-access-key.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,41 +26,44 @@ interactions:
Content-Md5:
- 6gFDgFr83IG+LPcNWlCHvw==
User-Agent:
- aws-sdk-go/1.33.7 (go1.14.4; darwin; amd64) S3Manager
- aws-sdk-go/1.38.30 (go1.16.4; darwin; amd64) S3Manager
X-Amz-Acl:
- bucket-owner-full-control
X-Amz-Content-Sha256:
- f3f8d97071a55a395844dda7fcf8d8d5aba75001f198ec8b4e704cae6752b24a
X-Amz-Date:
- 20200719T143259Z
url: https://s3.us-east-2.amazonaws.com/42.buildpulse-uploads/8675309/buildpulse-00000000-0000-0000-0000-000000000000.gz
- 20210531T214647Z
url: https://buildpulse-uploads.s3.amazonaws.com/42/8675309/buildpulse-00000000-0000-0000-0000-000000000000.gz
method: PUT
response:
body: |-
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>AKIAZJC22P3ACUHVRANB</AWSAccessKeyId><StringToSign>AWS4-HMAC-SHA256
20200719T143259Z
20200719/us-east-2/s3/aws4_request
52fa879397d75bc2ab94e9b141609f8b5b2517f8dfb2d873ff61506b87894885</StringToSign><SignatureProvided>014c478cefcc9b4483695ad616c939aad277cec17f1fd5231598b1ddfe33951b</SignatureProvided><StringToSignBytes>41 57 53 34 2d 48 4d 41 43 2d 53 48 41 32 35 36 0a 32 30 32 30 30 37 31 39 54 31 34 33 32 35 39 5a 0a 32 30 32 30 30 37 31 39 2f 75 73 2d 65 61 73 74 2d 32 2f 73 33 2f 61 77 73 34 5f 72 65 71 75 65 73 74 0a 35 32 66 61 38 37 39 33 39 37 64 37 35 62 63 32 61 62 39 34 65 39 62 31 34 31 36 30 39 66 38 62 35 62 32 35 31 37 66 38 64 66 62 32 64 38 37 33 66 66 36 31 35 30 36 62 38 37 38 39 34 38 38 35</StringToSignBytes><CanonicalRequest>PUT
/42.buildpulse-uploads/8675309/buildpulse-00000000-0000-0000-0000-000000000000.gz
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>AKIA3SYVRUSE2Q574CNU</AWSAccessKeyId><StringToSign>AWS4-HMAC-SHA256
20210531T214647Z
20210531/us-east-1/s3/aws4_request
da882f94b55cb90236dacc696af4ee265d16a137a90ba10949a746332976c384</StringToSign><SignatureProvided>3ad34a491e2d3627056dbfbd049001d8097a80e4f605861eb57557cf66a625b1</SignatureProvided><StringToSignBytes>41 57 53 34 2d 48 4d 41 43 2d 53 48 41 32 35 36 0a 32 30 32 31 30 35 33 31 54 32 31 34 36 34 37 5a 0a 32 30 32 31 30 35 33 31 2f 75 73 2d 65 61 73 74 2d 31 2f 73 33 2f 61 77 73 34 5f 72 65 71 75 65 73 74 0a 64 61 38 38 32 66 39 34 62 35 35 63 62 39 30 32 33 36 64 61 63 63 36 39 36 61 66 34 65 65 32 36 35 64 31 36 61 31 33 37 61 39 30 62 61 31 30 39 34 39 61 37 34 36 33 33 32 39 37 36 63 33 38 34</StringToSignBytes><CanonicalRequest>PUT
/42/8675309/buildpulse-00000000-0000-0000-0000-000000000000.gz
content-length:731
content-md5:6gFDgFr83IG+LPcNWlCHvw==
host:s3.us-east-2.amazonaws.com
host:buildpulse-uploads.s3.amazonaws.com
x-amz-acl:bucket-owner-full-control
x-amz-content-sha256:f3f8d97071a55a395844dda7fcf8d8d5aba75001f198ec8b4e704cae6752b24a
x-amz-date:20200719T143259Z
x-amz-date:20210531T214647Z
content-length;content-md5;host;x-amz-content-sha256;x-amz-date
f3f8d97071a55a395844dda7fcf8d8d5aba75001f198ec8b4e704cae6752b24a</CanonicalRequest><CanonicalRequestBytes>50 55 54 0a 2f 34 32 2e 62 75 69 6c 64 70 75 6c 73 65 2d 75 70 6c 6f 61 64 73 2f 38 36 37 35 33 30 39 2f 62 75 69 6c 64 70 75 6c 73 65 2d 30 30 30 30 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30 30 30 30 30 30 30 30 30 2e 67 7a 0a 0a 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 3a 37 33 31 0a 63 6f 6e 74 65 6e 74 2d 6d 64 35 3a 36 67 46 44 67 46 72 38 33 49 47 2b 4c 50 63 4e 57 6c 43 48 76 77 3d 3d 0a 68 6f 73 74 3a 73 33 2e 75 73 2d 65 61 73 74 2d 32 2e 61 6d 61 7a 6f 6e 61 77 73 2e 63 6f 6d 0a 78 2d 61 6d 7a 2d 63 6f 6e 74 65 6e 74 2d 73 68 61 32 35 36 3a 66 33 66 38 64 39 37 30 37 31 61 35 35 61 33 39 35 38 34 34 64 64 61 37 66 63 66 38 64 38 64 35 61 62 61 37 35 30 30 31 66 31 39 38 65 63 38 62 34 65 37 30 34 63 61 65 36 37 35 32 62 32 34 61 0a 78 2d 61 6d 7a 2d 64 61 74 65 3a 32 30 32 30 30 37 31 39 54 31 34 33 32 35 39 5a 0a 0a 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 3b 63 6f 6e 74 65 6e 74 2d 6d 64 35 3b 68 6f 73 74 3b 78 2d 61 6d 7a 2d 63 6f 6e 74 65 6e 74 2d 73 68 61 32 35 36 3b 78 2d 61 6d 7a 2d 64 61 74 65 0a 66 33 66 38 64 39 37 30 37 31 61 35 35 61 33 39 35 38 34 34 64 64 61 37 66 63 66 38 64 38 64 35 61 62 61 37 35 30 30 31 66 31 39 38 65 63 38 62 34 65 37 30 34 63 61 65 36 37 35 32 62 32 34 61</CanonicalRequestBytes><RequestId>8526C8600AB406DF</RequestId><HostId>HmNRpx4US1IuBCvJO4OenAwje8zyYcms0E3S0+TJQbmVPfxqf3e5QfCWG9TpEOMqzHXHZO7AXSQ=</HostId></Error>
content-length;content-md5;host;x-amz-acl;x-amz-content-sha256;x-amz-date
f3f8d97071a55a395844dda7fcf8d8d5aba75001f198ec8b4e704cae6752b24a</CanonicalRequest><CanonicalRequestBytes>50 55 54 0a 2f 34 32 2f 38 36 37 35 33 30 39 2f 62 75 69 6c 64 70 75 6c 73 65 2d 30 30 30 30 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30 30 30 30 30 30 30 30 30 2e 67 7a 0a 0a 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 3a 37 33 31 0a 63 6f 6e 74 65 6e 74 2d 6d 64 35 3a 36 67 46 44 67 46 72 38 33 49 47 2b 4c 50 63 4e 57 6c 43 48 76 77 3d 3d 0a 68 6f 73 74 3a 62 75 69 6c 64 70 75 6c 73 65 2d 75 70 6c 6f 61 64 73 2e 73 33 2e 61 6d 61 7a 6f 6e 61 77 73 2e 63 6f 6d 0a 78 2d 61 6d 7a 2d 61 63 6c 3a 62 75 63 6b 65 74 2d 6f 77 6e 65 72 2d 66 75 6c 6c 2d 63 6f 6e 74 72 6f 6c 0a 78 2d 61 6d 7a 2d 63 6f 6e 74 65 6e 74 2d 73 68 61 32 35 36 3a 66 33 66 38 64 39 37 30 37 31 61 35 35 61 33 39 35 38 34 34 64 64 61 37 66 63 66 38 64 38 64 35 61 62 61 37 35 30 30 31 66 31 39 38 65 63 38 62 34 65 37 30 34 63 61 65 36 37 35 32 62 32 34 61 0a 78 2d 61 6d 7a 2d 64 61 74 65 3a 32 30 32 31 30 35 33 31 54 32 31 34 36 34 37 5a 0a 0a 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 3b 63 6f 6e 74 65 6e 74 2d 6d 64 35 3b 68 6f 73 74 3b 78 2d 61 6d 7a 2d 61 63 6c 3b 78 2d 61 6d 7a 2d 63 6f 6e 74 65 6e 74 2d 73 68 61 32 35 36 3b 78 2d 61 6d 7a 2d 64 61 74 65 0a 66 33 66 38 64 39 37 30 37 31 61 35 35 61 33 39 35 38 34 34 64 64 61 37 66 63 66 38 64 38 64 35 61 62 61 37 35 30 30 31 66 31 39 38 65 63 38 62 34 65 37 30 34 63 61 65 36 37 35 32 62 32 34 61</CanonicalRequestBytes><RequestId>V3ST47REND7JTXMY</RequestId><HostId>dTmM4lihDx436MiIkOUGhWcb6Tuzo+fwdgAhTBApITQXqElNd6yMLpMGhaBsJ8E2N7s2pUsT8Ys=</HostId></Error>
headers:
Content-Type:
- application/xml
Date:
- Sun, 19 Jul 2020 14:32:59 GMT
- Mon, 31 May 2021 21:46:47 GMT
Server:
- AmazonS3
X-Amz-Id-2:
- HmNRpx4US1IuBCvJO4OenAwje8zyYcms0E3S0+TJQbmVPfxqf3e5QfCWG9TpEOMqzHXHZO7AXSQ=
- dTmM4lihDx436MiIkOUGhWcb6Tuzo+fwdgAhTBApITQXqElNd6yMLpMGhaBsJ8E2N7s2pUsT8Ys=
X-Amz-Request-Id:
- 8526C8600AB406DF
- V3ST47REND7JTXMY
status: 403 Forbidden
code: 403
duration: ""
18 changes: 10 additions & 8 deletions internal/cmd/submit/testdata/s3-success.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,30 +26,32 @@ interactions:
Content-Md5:
- 6gFDgFr83IG+LPcNWlCHvw==
User-Agent:
- aws-sdk-go/1.33.7 (go1.14.4; darwin; amd64) S3Manager
- aws-sdk-go/1.38.30 (go1.16.4; darwin; amd64) S3Manager
X-Amz-Acl:
- bucket-owner-full-control
X-Amz-Content-Sha256:
- f3f8d97071a55a395844dda7fcf8d8d5aba75001f198ec8b4e704cae6752b24a
X-Amz-Date:
- 20200719T143258Z
url: https://s3.us-east-2.amazonaws.com/42.buildpulse-uploads/8675309/buildpulse-00000000-0000-0000-0000-000000000000.gz
- 20210531T213223Z
url: https://buildpulse-uploads.s3.amazonaws.com/42/8675309/buildpulse-00000000-0000-0000-0000-000000000000.gz
method: PUT
response:
body: ""
headers:
Content-Length:
- "0"
Date:
- Sun, 19 Jul 2020 14:33:00 GMT
- Mon, 31 May 2021 21:32:26 GMT
Etag:
- '"ea0143805afcdc81be2cf70d5a5087bf"'
Server:
- AmazonS3
X-Amz-Expiration:
- expiry-date="Tue, 04 Aug 2020 00:00:00 GMT", rule-id="Expire after 15 days"
X-Amz-Id-2:
- PHRKzEDQ0pEBOXfdhKY89gFYMVSqY2WgAf3V+BSu+DklZxdHe6n6RgSD9kK9+RyUCjUi/+0KmL0=
- a/xFpXLpCAJ/fJJgNsv3kVpqtAJp9ptsJouY5u5z5MxfBRV/4aszYL/A+wpX6HpRlBRAQbRvweU=
X-Amz-Request-Id:
- C7333E247CD0CD80
- FRD66ZCYX88WRRH4
X-Amz-Server-Side-Encryption:
- AES256
status: 200 OK
code: 200
duration: ""
Loading

0 comments on commit be57499

Please sign in to comment.