When AWS_ENDPOINT_URL_S3 or AWS_ENDPOINT_URL is set — typically because the runtime is pointing at a local MinIO / S3-compatible endpoint — auto-enable path-style addressing on the S3 client. Without this, requests fail because MinIO does not implement virtual-hosted style addressing out of the box.
Production deployments leave those env vars unset and continue talking to real AWS S3 with virtual-hosted style — no behaviour change for prod.
Both New() and NewS3() share a s3ClientOptions helper that applies the toggle.
Motivation
Spinning up a MinIO-backed acctest environment for Shiny (document-service, invoice-service, accounting-service). Without this change callers would have to sidestep storage.New and construct an aws.Config by hand just to flip UsePathStyle.
Test plan
New unit test TestS3ClientOptions_PathStyleTogglesOnCustomEndpoint covers the three relevant env-var states
## Summary
When `AWS_ENDPOINT_URL_S3` or `AWS_ENDPOINT_URL` is set — typically because the runtime is pointing at a local MinIO / S3-compatible endpoint — auto-enable path-style addressing on the S3 client. Without this, requests fail because MinIO does not implement virtual-hosted style addressing out of the box.
Production deployments leave those env vars unset and continue talking to real AWS S3 with virtual-hosted style — no behaviour change for prod.
Both `New()` and `NewS3()` share a `s3ClientOptions` helper that applies the toggle.
## Motivation
Spinning up a MinIO-backed acctest environment for Shiny (document-service, invoice-service, accounting-service). Without this change callers would have to sidestep `storage.New` and construct an `aws.Config` by hand just to flip `UsePathStyle`.
## Test plan
- [x] New unit test `TestS3ClientOptions_PathStyleTogglesOnCustomEndpoint` covers the three relevant env-var states
- [x] `go test ./...` passes
🤖 Generated with [Claude Code](https://claude.com/claude-code)
When AWS_ENDPOINT_URL_S3 or AWS_ENDPOINT_URL is set (typically because
the runtime is pointing at a local MinIO/S3-compatible endpoint),
enable path-style addressing on the S3 client. Without this
requests fail because MinIO doesn't implement virtual-hosted style
addressing out of the box.
Production deployments leave those env vars unset and continue talking
to real AWS S3 with virtual-hosted style, so no behaviour change there.
Both New() and NewS3() share a s3ClientOptions helper that applies the
toggle.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
argoyle
scheduled this pull request to auto merge when all checks succeed 2026-04-17 17:11:13 +00:00
argoyle
merged commit 1620565ae6 into main2026-04-17 17:18:54 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
When
AWS_ENDPOINT_URL_S3orAWS_ENDPOINT_URLis set — typically because the runtime is pointing at a local MinIO / S3-compatible endpoint — auto-enable path-style addressing on the S3 client. Without this, requests fail because MinIO does not implement virtual-hosted style addressing out of the box.Production deployments leave those env vars unset and continue talking to real AWS S3 with virtual-hosted style — no behaviour change for prod.
Both
New()andNewS3()share as3ClientOptionshelper that applies the toggle.Motivation
Spinning up a MinIO-backed acctest environment for Shiny (document-service, invoice-service, accounting-service). Without this change callers would have to sidestep
storage.Newand construct anaws.Configby hand just to flipUsePathStyle.Test plan
TestS3ClientOptions_PathStyleTogglesOnCustomEndpointcovers the three relevant env-var statesgo test ./...passes🤖 Generated with Claude Code