v0.4.3
Unbound Release / Check Preconditions (push) Successful in 21s
Unbound Release / Create Tag (push) Skipped
Unbound Release / Generate Changelog and Handle PR (push) Successful in 25s
storage / test (push) Skipped
storage / vulnerabilities (push) Skipped
Unbound Release / Create Release (push) Successful in 25s
Release / release (push) Successful in 2m13s
pre-commit / pre-commit (push) Successful in 2m36s
## [0.4.3] - 2026-08-09 ### 🐛 Bug Fixes - *(deps)* Update aws-sdk-go-v2 monorepo (#138) - *(deps)* Update aws-sdk-go-v2 monorepo (#140) - *(deps)* Update aws-sdk-go-v2 monorepo (#142) - *(deps)* Update aws-sdk-go-v2 monorepo (#148) - *(deps)* Update aws-sdk-go-v2 monorepo (#150) - *(deps)* Update aws-sdk-go-v2 monorepo (#152) - *(deps)* Update module github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager to v0.3.0 (#154) - *(deps)* Update aws-sdk-go-v2 monorepo (#156) - *(deps)* Update module github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager to v0.3.2 (#158) - *(deps)* Update aws-sdk-go-v2 monorepo (#161) - *(deps)* Update module github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager to v0.3.4 (#163) - *(deps)* Update aws-sdk-go-v2 monorepo (#166) - *(deps)* Update aws-sdk-go-v2 monorepo (#169) - *(deps)* Update aws-sdk-go-v2 monorepo (#171) - *(deps)* Update aws-sdk-go-v2 monorepo (#173) - *(deps)* Update aws-sdk-go-v2 monorepo (#175) - *(deps)* Update aws-sdk-go-v2 monorepo (#177) - *(deps)* Update aws-sdk-go-v2 monorepo (#179) ### ⚙️ Miscellaneous Tasks - *(deps)* Update actions/checkout action to v7 (#144) - *(deps)* Update pre-commit hook alessandrojcm/commitlint-pre-commit-hook to v9.26.0 (#146) - *(deps)* Update actions/setup-go action to v7 (#160) - *(deps)* Update actions/setup-python action to v7 (#165) <!-- generated by git-cliff --> --- **Note:** Please use **Squash Merge** when merging this PR. Reviewed-on: #180 Co-authored-by: Unbound Releaser <releaser@unbound.se>
Storage Module
Shared storage utilities for AWS S3.
Features
- S3 object storage with presigned URL generation
- Two upload strategies: managed uploads (for large files) and direct uploads
- Configurable part size for multipart uploads
- 15-minute presigned URL expiration
Usage
Using the Upload Manager (recommended for large files)
import "gitea.unbound.se/unboundsoftware/storage"
// Create storage with automatic AWS config loading
s3Storage, err := storage.New("my-bucket")
if err != nil {
// handle error
}
// Upload a file and get a presigned URL
url, err := s3Storage.Store("path/to/file.pdf", fileReader, "application/pdf")
Using Direct Upload (for smaller files or custom config)
import (
"github.com/aws/aws-sdk-go-v2/config"
"git.unbound.se/unboundsoftware/storage"
)
// Load custom AWS config
cfg, err := config.LoadDefaultConfig(context.Background())
if err != nil {
// handle error
}
// Create storage with custom config
s3Storage := storage.NewS3(cfg, "my-bucket")
// Upload a file and get a presigned URL
url, err := s3Storage.Store("path/to/file.pdf", fileReader, "application/pdf")
Configuration
The storage module uses AWS SDK v2 and loads configuration from:
- Environment variables (
AWS_REGION,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) - Shared configuration files (
~/.aws/config,~/.aws/credentials) - IAM roles (when running on AWS infrastructure)