summaryrefslogtreecommitdiff
path: root/vendor/github.com/minio/minio-go/v7/CLAUDE.md
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/minio/minio-go/v7/CLAUDE.md')
-rw-r--r--vendor/github.com/minio/minio-go/v7/CLAUDE.md125
1 files changed, 125 insertions, 0 deletions
diff --git a/vendor/github.com/minio/minio-go/v7/CLAUDE.md b/vendor/github.com/minio/minio-go/v7/CLAUDE.md
new file mode 100644
index 000000000..26ff95323
--- /dev/null
+++ b/vendor/github.com/minio/minio-go/v7/CLAUDE.md
@@ -0,0 +1,125 @@
+CLAUDE.md
+=========
+
+This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
+
+Commands
+--------
+
+### Testing
+
+```bash
+# Run all tests with race detection (requires MinIO server at localhost:9000)
+SERVER_ENDPOINT=localhost:9000 ACCESS_KEY=minioadmin SECRET_KEY=minioadmin ENABLE_HTTPS=1 MINT_MODE=full go test -race -v ./...
+
+# Run tests without race detection
+go test ./...
+
+# Run short tests only (no functional tests)
+go test -short -race ./...
+
+# Run functional tests
+go build -race functional_tests.go
+SERVER_ENDPOINT=localhost:9000 ACCESS_KEY=minioadmin SECRET_KEY=minioadmin ENABLE_HTTPS=1 MINT_MODE=full ./functional_tests
+
+# Run functional tests without TLS
+SERVER_ENDPOINT=localhost:9000 ACCESS_KEY=minioadmin SECRET_KEY=minioadmin ENABLE_HTTPS=0 MINT_MODE=full ./functional_tests
+```
+
+### Linting and Code Quality
+
+```bash
+# Run all checks (lint, vet, test, examples, functional tests)
+make checks
+
+# Run linter only
+make lint
+
+# Run vet and staticcheck
+make vet
+
+# Alternative: run golangci-lint directly
+golangci-lint run --timeout=5m --config ./.golangci.yml
+```
+
+### Building Examples
+
+```bash
+# Build all examples
+make examples
+
+# Build a specific example
+cd examples/s3 && go build -mod=mod putobject.go
+```
+
+Architecture
+------------
+
+### Core Client Structure
+
+The MinIO Go SDK is organized around a central `Client` struct (api.go:52) that implements Amazon S3 compatible methods. Key architectural patterns:
+
+1. **Modular API Organization**: API methods are split into logical files:
+
+ - `api-bucket-*.go`: Bucket operations (lifecycle, encryption, versioning, etc.)
+ - `api-object-*.go`: Object operations (legal hold, retention, tagging, etc.)
+ - `api-get-*.go`, `api-put-*.go`: GET and PUT operations
+ - `api-list.go`: Listing operations
+ - `api-stat.go`: Status/info operations
+
+2. **Credential Management**: The `pkg/credentials/` package provides various credential providers:
+
+ - Static credentials
+ - Environment variables (AWS/MinIO)
+ - IAM roles
+ - STS (Security Token Service) variants
+ - File-based credentials
+ - Chain provider for fallback mechanisms
+
+3. **Request Signing**: The `pkg/signer/` package handles AWS signature versions:
+
+ - V2 signatures (legacy)
+ - V4 signatures (standard)
+ - Streaming signatures for large uploads
+
+4. **Transport Layer**: Custom HTTP transport with:
+
+ - Retry logic with configurable max retries
+ - Health status monitoring
+ - Tracing support via httptrace
+ - Bucket location caching (`bucketLocCache`\)
+ - Session caching for credentials
+
+5. **Helper Packages**:
+
+ - `pkg/encrypt/`: Server-side encryption utilities
+ - `pkg/notification/`: Event notification handling
+ - `pkg/policy/`: Bucket policy management
+ - `pkg/lifecycle/`: Object lifecycle rules
+ - `pkg/tags/`: Object and bucket tagging
+ - `pkg/s3utils/`: S3 utility functions
+ - `pkg/kvcache/`: Key-value caching
+ - `pkg/singleflight/`: Deduplication of concurrent requests
+
+### Testing Strategy
+
+- Unit tests alongside implementation files (`*_test.go`\)
+- Comprehensive functional tests in `functional_tests.go` requiring a live MinIO server
+- Example programs in `examples/` directory demonstrating API usage
+- Build tag `//go:build mint` for integration tests
+
+### Error Handling
+
+- Custom error types in `api-error-response.go`
+- HTTP status code mapping
+- Retry logic for transient failures
+- Detailed error context preservation
+
+Important Patterns
+------------------
+
+1. **Context Usage**: All API methods accept `context.Context` for cancellation and timeout control
+2. **Options Pattern**: Methods use Options structs for optional parameters (e.g., `PutObjectOptions`, `GetObjectOptions`\)
+3. **Streaming Support**: Large file operations use io.Reader/Writer interfaces for memory efficiency
+4. **Bucket Lookup Types**: Supports both path-style and virtual-host-style S3 URLs
+5. **MD5/SHA256 Hashing**: Configurable hash functions for integrity checks via `md5Hasher` and `sha256Hasher`