argoyle
1620565ae6
feat: auto-enable path-style addressing when a custom endpoint is set ( #99 )
...
Release / release (push) Successful in 52s
storage / test (push) Successful in 1m46s
storage / vulnerabilities (push) Successful in 1m46s
pre-commit / pre-commit (push) Successful in 6m26s
## 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 )
Reviewed-on: #99
2026-04-17 17:18:53 +00:00
argoyle
862ec3f7bc
feat: add PresignInlineURL method for inline content display ( #97 )
...
storage / vulnerabilities (push) Successful in 1m43s
storage / test (push) Successful in 1m44s
Release / release (push) Successful in 58s
pre-commit / pre-commit (push) Successful in 6m14s
## Summary
- Add `PresignInlineURL(ctx, key, contentType)` method that generates presigned URLs with `Content-Disposition: inline` and optional `Content-Type` override
- Browsers will render content (e.g. PDFs) directly in iframes instead of triggering download dialogs
- Existing `PresignURL` remains unchanged
## Context
The document-service uses presigned S3 URLs to display PDFs in iframes. Without `Content-Disposition: inline`, the browser triggers a download dialog instead of rendering the PDF.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Reviewed-on: #97
2026-04-16 08:52:38 +00:00
argoyle
425056b0c2
feat: add PresignURL method for existing objects ( #95 )
...
Release / release (push) Successful in 59s
storage / vulnerabilities (push) Successful in 1m43s
storage / test (push) Successful in 1m56s
pre-commit / pre-commit (push) Successful in 5m29s
## Summary
Add `PresignURL(ctx, key)` method to generate presigned download URLs for existing S3 objects (15 min expiry). Needed by document-service to serve document preview/download links.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Reviewed-on: #95
2026-04-16 06:41:56 +00:00
argoyle
9ada1c5e17
Merge pull request 'chore(release): prepare for v0.1.2' ( #52 ) from next-release into main
...
Release / release (push) Successful in 43s
storage / vulnerabilities (push) Successful in 1m46s
storage / test (push) Successful in 1m55s
pre-commit / pre-commit (push) Successful in 4m28s
Reviewed-on: #52
2026-02-06 00:31:05 +00:00
argoyle
44a0a6bd36
Merge pull request 'refactor: migrate from deprecated s3/manager to s3/transfermanager' ( #55 ) from migrate-to-transfermanager into main
...
Release / release (push) Successful in 1m26s
storage / vulnerabilities (push) Successful in 2m1s
storage / test (push) Successful in 2m56s
pre-commit / pre-commit (push) Successful in 8m29s
Reviewed-on: #55
2026-02-06 00:10:15 +00:00
argoyle and Claude Opus 4.6
d8decc411e
refactor: migrate from deprecated s3/manager to s3/transfermanager
...
storage / test (pull_request) Successful in 1m25s
storage / vulnerabilities (pull_request) Successful in 1m58s
pre-commit / pre-commit (pull_request) Successful in 5m0s
Replace feature/s3/manager (deprecated) with feature/s3/transfermanager.
Updates Uploader interface, constructor, and all tests to use the new
UploadObject API with transfermanager types.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-06 01:03:19 +01:00
argoyle
f49aabcc48
Merge pull request 'chore(release): prepare for v0.1.1' ( #47 ) from next-release into main
...
pre-commit / pre-commit (push) Successful in 14m18s
storage / test (push) Successful in 5m15s
Release / release (push) Successful in 3m43s
storage / vulnerabilities (push) Successful in 8m30s
Reviewed-on: #47
2026-01-09 13:50:08 +00:00
argoyle
ec5383af6d
Merge pull request 'chore: migrate module path to gitea.unbound.se' ( #48 ) from migrate-to-gitea into main
...
pre-commit / pre-commit (push) Successful in 6m49s
Release / release (push) Successful in 2m25s
storage / vulnerabilities (push) Successful in 3m14s
storage / test (push) Successful in 4m0s
Reviewed-on: #48
2026-01-09 13:24:25 +00:00
argoyle
41d0edf378
chore: migrate module path to gitea.unbound.se
...
storage / vulnerabilities (pull_request) Successful in 7m22s
storage / test (pull_request) Successful in 7m25s
pre-commit / pre-commit (pull_request) Successful in 12m49s
Update module path from git.unbound.se to gitea.unbound.se for Go module
discovery over HTTPS.
2026-01-09 13:43:53 +01:00
argoyle
75b9dc34ac
Merge pull request 'chore(deps): update actions/setup-python action to v6' ( #46 ) from renovate/actions-setup-python-6.x into main
...
storage / test (push) Successful in 3m16s
storage / vulnerabilities (push) Successful in 3m29s
Release / release (push) Successful in 3m45s
pre-commit / pre-commit (push) Successful in 13m3s
Reviewed-on: #46
2026-01-09 09:05:12 +00:00
argoyle
aaa0204d34
Merge pull request 'chore(release): prepare for v0.1.0' ( #18 ) from next-release into main
...
Release / release (push) Successful in 1m1s
storage / vulnerabilities (push) Successful in 5m47s
storage / test (push) Successful in 6m44s
pre-commit / pre-commit (push) Successful in 8m51s
Reviewed-on: #18
2026-01-09 07:50:09 +00:00
argoyle
918dc6aa0b
Merge pull request 'ci: add pre-commit and release workflows' ( #45 ) from add-workflows into main
...
storage / vulnerabilities (push) Successful in 1m7s
Release / release (push) Successful in 53s
storage / test (push) Successful in 1m53s
pre-commit / pre-commit (push) Has been cancelled
Reviewed-on: #45
2026-01-09 07:46:53 +00:00
argoyle and Claude Opus 4.5
57fe122b3a
ci: add pre-commit and release workflows
...
storage / vulnerabilities (pull_request) Successful in 2m24s
storage / test (pull_request) Successful in 2m29s
pre-commit / pre-commit (pull_request) Successful in 5m37s
- Add pre-commit workflow to run hooks on PRs and main branch pushes
- Add release workflow using shared unboundsoftware workflow
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-09 08:38:46 +01:00
argoyle
9c530267ee
Merge pull request 'chore: migrate from GitLab to Gitea' ( #44 ) from migrate-to-gitea into main
...
storage / test (push) Successful in 2m51s
storage / vulnerabilities (push) Successful in 2m18s
Reviewed-on: #44
2026-01-09 07:04:10 +00:00
argoyle and Claude Opus 4.5
887d3b8517
chore: migrate from GitLab to Gitea
...
storage / vulnerabilities (pull_request) Successful in 2m45s
storage / test (pull_request) Successful in 2m57s
- Update module path from gitlab.com/unboundsoftware/storage to
git.unbound.se/unboundsoftware/storage
- Update import examples in documentation (CLAUDE.md, README.md)
- Remove .gitlab-ci.yml (GitLab CI pipeline no longer needed)
- Remove gitlab-ci-linter pre-commit hook
- Update go-imports local path in pre-commit config
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-09 08:00:42 +01:00
argoyle
14cb137593
Merge pull request 'chore(deps): update pre-commit hook golangci/golangci-lint to v2.8.0' ( #43 ) from renovate/golangci-golangci-lint-2.x into main
...
storage / test (push) Successful in 1m50s
storage / vulnerabilities (push) Successful in 4m16s
Reviewed-on: #43
2026-01-09 04:13:22 +00:00
argoyle
9632a497e6
Merge pull request 'chore(deps): update actions/setup-go action to v6' ( #42 ) from renovate/actions-setup-go-6.x into main
...
storage / test (push) Successful in 5m7s
storage / vulnerabilities (push) Successful in 5m38s
Reviewed-on: #42
2026-01-08 15:21:14 +00:00
argoyle
1e331a4ea2
Merge pull request 'chore(deps): update actions/checkout action to v6' ( #41 ) from renovate/actions-checkout-6.x into main
...
storage / vulnerabilities (push) Successful in 1m36s
storage / test (push) Successful in 1m44s
Reviewed-on: #41
2026-01-08 14:17:10 +00:00
argoyle
e00cd62aa6
Merge pull request 'feat: add Gitea Actions workflow' ( #40 ) from feat/gitea-migration into main
...
storage / test (push) Successful in 3m24s
storage / vulnerabilities (push) Successful in 3m10s
Reviewed-on: #40
2026-01-08 13:11:45 +00:00
argoyle
534427f2b1
feat: add Gitea Actions workflow
storage / test (pull_request) Successful in 1m36s
storage / vulnerabilities (pull_request) Successful in 1m11s
2026-01-08 14:09:14 +01:00
argoyle
2881b1955a
Merge branch 'claude-docs' into 'main'
...
docs: add CLAUDE.md for Claude Code integration
See merge request unboundsoftware/storage!38
2025-12-31 22:06:04 +01:00
argoyle
a92faa9934
docs: add CLAUDE.md for Claude Code integration
2025-12-31 21:56:05 +01:00
argoyle
18fcbf65ea
Merge branch 'renovate/golang-1.25.5' into 'main'
...
chore(deps): update golang:1.25.5 docker digest to ad03ba9
See merge request unboundsoftware/storage!37
2025-12-30 15:55:17 +01:00
argoyle
4c54c3ab2a
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!36
2025-12-25 13:33:06 +01:00
argoyle
0060269862
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!35
2025-12-17 08:24:18 +01:00
argoyle
5320aea80b
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!34
2025-12-15 21:35:56 +01:00
argoyle
83937ad10b
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!33
2025-12-10 06:50:04 +01:00
argoyle
27157b7e8c
Merge branch 'renovate/golang-1.25.5' into 'main'
...
chore(deps): update golang:1.25.5 docker digest to 0c27bcf
See merge request unboundsoftware/storage!32
2025-12-09 09:39:23 +01:00
argoyle
64b5cb521e
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!31
2025-12-09 09:38:51 +01:00
argoyle
c1b738de97
Merge branch 'renovate/golangci-golangci-lint-2.x' into 'main'
...
chore(deps): update pre-commit hook golangci/golangci-lint to v2.7.2
See merge request unboundsoftware/storage!30
2025-12-08 09:39:59 +01:00
argoyle
0c6e36a779
Merge branch 'renovate/golangci-golangci-lint-2.x' into 'main'
...
chore(deps): update pre-commit hook golangci/golangci-lint to v2.7.1
See merge request unboundsoftware/storage!29
2025-12-04 16:23:56 +01:00
argoyle
6c5e0d90db
Merge branch 'renovate/golangci-golangci-lint-2.x' into 'main'
...
chore(deps): update pre-commit hook golangci/golangci-lint to v2.7.0
See merge request unboundsoftware/storage!28
2025-12-04 08:26:56 +01:00
argoyle
2b7e76f84f
Merge branch 'renovate/golang-1.x' into 'main'
...
chore(deps): update golang docker tag to v1.25.5
See merge request unboundsoftware/storage!27
2025-12-02 19:24:22 +01:00
argoyle
8e61272aa0
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!26
2025-12-02 19:23:57 +01:00
argoyle
bed6e6e492
Merge branch 'renovate/gitleaks-gitleaks-8.x' into 'main'
...
chore(deps): update pre-commit hook gitleaks/gitleaks to v8.30.0
See merge request unboundsoftware/storage!25
2025-11-27 00:03:29 +01:00
argoyle
97300e2566
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!24
2025-11-26 12:35:13 +01:00
argoyle
5e966e3f00
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!23
2025-11-22 09:58:04 +01:00
argoyle
71c4c1e41b
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!22
2025-11-21 11:08:36 +01:00
argoyle
61df02c0e1
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!21
2025-11-20 09:28:22 +01:00
argoyle
8678a8e400
Merge branch 'renovate/gitleaks-gitleaks-8.x' into 'main'
...
chore(deps): update pre-commit hook gitleaks/gitleaks to v8.29.1
See merge request unboundsoftware/storage!20
2025-11-20 09:18:53 +01:00
argoyle
791dbe26ff
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!19
2025-11-19 22:18:37 +01:00
argoyle
3b6211ca27
Merge branch 'renovate/golang-1.25.4' into 'main'
...
chore(deps): update golang:1.25.4 docker digest to efe81fa
See merge request unboundsoftware/storage!18
2025-11-18 16:17:03 +01:00
argoyle
5ceed9f680
Merge branch 'renovate/golangci-golangci-lint-2.x' into 'main'
...
chore(deps): update pre-commit hook golangci/golangci-lint to v2.6.2
See merge request unboundsoftware/storage!16
2025-11-14 16:20:26 +01:00
argoyle
e473db679b
Merge branch 'next-release' into 'main'
...
chore(release): prepare for v0.0.3
See merge request unboundsoftware/storage!8
2025-11-13 10:35:52 +01:00
argoyle
56d4c97755
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!15
2025-11-13 08:58:55 +01:00
argoyle
ec66555b0e
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update module github.com/aws/aws-sdk-go-v2/feature/s3/manager to v1.20.6
See merge request unboundsoftware/storage!14
2025-11-12 08:59:09 +01:00
argoyle
5665f3f03a
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!13
2025-11-11 21:13:41 +01:00
argoyle
d3b5010422
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!12
2025-11-11 10:36:04 +01:00
argoyle
62a43f672e
Merge branch 'renovate/golang-1.x' into 'main'
...
chore(deps): update golang docker tag to v1.25.4
See merge request unboundsoftware/storage!11
2025-11-05 23:11:18 +01:00
argoyle
e1830fa03a
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update module github.com/aws/aws-sdk-go-v2/feature/s3/manager to v1.20.4
See merge request unboundsoftware/storage!10
2025-11-05 23:10:25 +01:00
argoyle
bd540ed16f
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update module github.com/aws/aws-sdk-go-v2/service/s3 to v1.90.0
See merge request unboundsoftware/storage!9
2025-11-05 21:15:26 +01:00
argoyle
1967c6d8c8
Merge branch 'renovate/gitleaks-gitleaks-8.x' into 'main'
...
chore(deps): update pre-commit hook gitleaks/gitleaks to v8.29.0
See merge request unboundsoftware/storage!7
2025-11-05 06:51:32 +01:00
argoyle
077aea07e1
Merge branch 'next-release' into 'main'
...
chore(release): prepare for v0.0.2
See merge request unboundsoftware/storage!3
2025-11-04 21:21:06 +01:00
argoyle
f8f0b2045c
Merge branch 'renovate/aws-sdk-go-v2-monorepo' into 'main'
...
fix(deps): update aws-sdk-go-v2 monorepo
See merge request unboundsoftware/storage!6
2025-11-04 21:10:19 +01:00
argoyle
13fa0d8a0c
Merge branch 'renovate/golangci-golangci-lint-2.x' into 'main'
...
chore(deps): update pre-commit hook golangci/golangci-lint to v2.6.1
See merge request unboundsoftware/storage!5
2025-11-04 13:16:06 +01:00
argoyle
6b197d194a
Merge branch 'renovate/golang-1.25.3' into 'main'
...
chore(deps): update golang:1.25.3 docker digest to 9ac0edc
See merge request unboundsoftware/storage!4
2025-11-04 13:15:37 +01:00
argoyle
41a6bf9f51
Merge branch 'renovate/golangci-golangci-lint-2.x' into 'main'
...
chore(deps): update pre-commit hook golangci/golangci-lint to v2.6.0
See merge request unboundsoftware/storage!2
2025-11-04 11:25:50 +01:00
argoyle
bcb6adb2b9
Merge branch 'next-release' into 'main'
...
chore(release): prepare for v0.0.1
See merge request unboundsoftware/storage!1
2025-11-04 10:51:01 +01:00
argoyle and Claude
d12b497a28
feat: add storage module with S3 support and development tooling
...
Create shared storage module for AWS S3 operations with comprehensive
development infrastructure:
Core Features:
- S3 interface with two upload patterns (manager and direct)
- Presigned URL generation with 15-minute expiration
- Support for multipart uploads and direct PutObject
- Comprehensive test coverage (8 tests, 70.4% coverage)
- Generic implementation without project-specific dependencies
Development Tooling:
- .editorconfig for consistent editor settings
- .pre-commit-config.yaml with Go linters and formatters
- .golangci.yml for golangci-lint configuration
- commitlint.config.js for conventional commit validation
- cliff.toml for automated changelog generation (v0.0.1)
- renovate.json for automated dependency updates
- .gitlab-ci.yml for CI/CD pipeline
CI/CD Pipeline:
- Automated testing with race detection
- Coverage tracking and Codecov integration
- Vulnerability scanning with govulncheck
- Pre-commit validation gates
- Release automation
Module exports:
- New(bucket) - Upload manager pattern for large files
- NewS3(cfg, bucket) - Direct upload pattern
- Store(path, content, contentType) - Upload and get presigned URL
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-04 10:41:05 +01:00