feat: add Gitea Actions workflow
storage / test (pull_request) Successful in 1m36s
storage / vulnerabilities (pull_request) Successful in 1m11s

This commit is contained in:
2026-01-08 14:09:14 +01:00
parent 2881b1955a
commit 534427f2b1
2 changed files with 49 additions and 17 deletions
+30
View File
@@ -0,0 +1,30 @@
name: storage
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: stable
- name: Run tests
run: go test -race -coverprofile=coverage.txt ./...
vulnerabilities:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: stable
- name: Check vulnerabilities
run: |
go install golang.org/x/vuln/cmd/govulncheck@latest
govulncheck ./...
+19 -17
View File
@@ -1,41 +1,43 @@
# storage # storage
Shared Go library for AWS S3 storage operations. Standalone Go library for AWS S3 storage operations.
## Shared Documentation **Note:** This is an independent library, not part of the Shiny ecosystem, though it is currently only used by Shiny services.
@../docs/claude/architecture.md ## Purpose
@../docs/claude/go-services.md
@../docs/claude/conventions.md
## Library Information
### Purpose
Provides standardized S3 object storage utilities with presigned URL generation. Used by services that need to store and serve files (PDFs, images, etc.). Provides standardized S3 object storage utilities with presigned URL generation. Used by services that need to store and serve files (PDFs, images, etc.).
### Usage ## Usage
```go ```go
import "gitlab.com/unboundsoftware/shiny/storage" import "gitlab.com/unboundsoftware/storage"
// Create storage with automatic AWS config // Option 1: Managed uploads (multipart, 5MB part size) - loads AWS config automatically
s3Storage, err := storage.New("my-bucket") s3Storage, err := storage.New("my-bucket")
// Option 2: Direct uploads with custom AWS config
cfg, _ := config.LoadDefaultConfig(context.Background())
s3Storage := storage.NewS3(cfg, "my-bucket")
// Upload and get presigned URL (15-minute expiration) // Upload and get presigned URL (15-minute expiration)
url, err := s3Storage.Store("path/to/file.pdf", reader, "application/pdf") url, err := s3Storage.Store("path/to/file.pdf", reader, "application/pdf")
``` ```
### Features ## Features
- **Managed uploads** - For large files with multipart upload - **Managed uploads** (`New`) - Uses upload manager with 5MB multipart chunks for large files
- **Direct uploads** - For smaller files or custom config - **Direct uploads** (`NewS3`) - Uses PutObject directly, allows custom AWS config
- **Presigned URLs** - 15-minute expiration for secure access - **Presigned URLs** - 15-minute expiration for secure access
- **Configurable part size** - For multipart upload optimization
### Configuration ## Configuration
Uses AWS SDK v2, loading config from: Uses AWS SDK v2, loading config from:
- Environment variables (`AWS_REGION`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`) - Environment variables (`AWS_REGION`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`)
- Shared config files (`~/.aws/config`, `~/.aws/credentials`) - Shared config files (`~/.aws/config`, `~/.aws/credentials`)
- IAM roles (on AWS infrastructure) - IAM roles (on AWS infrastructure)
## Development
- Go 1.23+
- Run tests: `go test ./...`