diff --git a/.github/workflows/go-test.yml b/.github/workflows/go-test.yml new file mode 100644 index 0000000..2a31c6e --- /dev/null +++ b/.github/workflows/go-test.yml @@ -0,0 +1,20 @@ +name: Go Test + +on: + pull_request: + push: + branches: + - develop + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version-file: go.mod + - name: Test + run: go test ./... + - name: Build + run: go build ./... diff --git a/s3store.go b/s3store.go index 9a2106a..9f986c5 100644 --- a/s3store.go +++ b/s3store.go @@ -258,6 +258,10 @@ func ParseS3URL(s3URL *url.URL) (configOptions []func(*awsconfig.LoadOptions) er )) } + if profile := s3URL.Query().Get("profile"); profile != "" { + configOptions = append(configOptions, awsconfig.WithSharedConfigProfile(profile)) + } + return configOptions, bucket, strings.Trim(path, "/"), getStorageClass(s3URL.Query()), nil } diff --git a/s3store_test.go b/s3store_test.go index 0e4bdb7..ff2e296 100644 --- a/s3store_test.go +++ b/s3store_test.go @@ -91,3 +91,15 @@ func TestParseS3URL(t *testing.T) { }) } } + +func TestParseS3URL_Profile(t *testing.T) { + baseURL, err := url.Parse("s3://s3.example.com/my-bucket?region=us-east-1&profile=myprofile") + require.NoError(t, err) + + configOptions, bucket, path, _, err := ParseS3URL(baseURL) + require.NoError(t, err) + assert.Equal(t, "my-bucket", bucket) + assert.Equal(t, "", path) + // profile adds one extra config option (region + endpoint + profile = 3) + assert.Equal(t, 3, len(configOptions)) +}