'Generic Commit'
Some checks failed
Build-Test-Publish / build (push) Failing after 1m20s

This commit is contained in:
Your Name
2025-06-14 15:51:42 +12:00
parent a752f2ccc2
commit 4ecfc1b68f
3 changed files with 109 additions and 3 deletions

100
CLAUDE.md Normal file
View File

@@ -0,0 +1,100 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
Simple Object Server is a C++23 application that provides a REST API for storing and retrieving files with metadata. Key features include:
- File storage with deduplication using content hashing
- Metadata management with label:tag system
- Token-based authentication for write operations
- Support for large file uploads
- CORS and rate limiting support
## Common Development Commands
### Building
```bash
# Build for current architecture (debug mode)
./build.sh
# Build for multiple architectures (release mode)
./publish.sh
```
### Testing
```bash
# Build Docker image and run all tests
./test.sh
# Run integration tests directly
./testing/test.sh
# Test large file uploads (1GB)
./testing/test_1GB_file_upload.sh
```
### Development Workflow
1. Make changes to C++ source files in `/src`
2. Run `./build.sh` to compile and check for errors
3. Run `./test.sh` to ensure tests pass
4. Use `./publish.sh` only when ready to create multi-architecture releases
## Architecture and Code Structure
### Key Components
1. **HTTP Server (src/server.cpp/hpp)**
- Uses httplib for HTTP handling
- Implements all REST endpoints
- Handles authentication, CORS, and rate limiting
2. **Database Layer (src/database.cpp/hpp)**
- SQLite-based metadata storage
- Stores object hashes, label:tags, and custom metadata as JSON
- Manages label:tag uniqueness and versioning
3. **Request Handlers**
- `put_handler.cpp/hpp`: File upload logic with deduplication
- `update_handler.cpp/hpp`: Metadata update functionality
4. **Utilities**
- `compression.cpp/hpp`: GZIP compression support
- `hash.cpp/hpp`: SHA-256 hashing for content deduplication
- `string_trim.cpp/hpp`: String utility functions
### API Design Patterns
- Files are stored by content hash to enable deduplication
- Label:tag system allows human-friendly naming (e.g., "project:latest")
- When a new file is uploaded with an existing label:tag, the tag is moved to the new file
- All metadata is preserved as JSON, allowing custom fields beyond labeltags
### Build System
- Uses CMake with C++23 standard
- Docker-based build process for consistency across platforms
- Static linking for standalone executables
- Multi-architecture support (linux/amd64, linux/arm64, windows/amd64)
## Testing Approach
The test suite (`testing/test.sh`) covers:
1. File upload and retrieval by hash and label:tag
2. Metadata preservation including custom fields
3. Tag versioning behavior
4. File deletion
5. Rate limiting functionality
6. MD5 checksum verification
Tests use curl for API interactions and jq for JSON parsing.
## Configuration
The server uses JSON configuration (`sos_config.json`) with these key settings:
- `write_tokens`: Array of authentication tokens
- `storage_path`: Where files are stored
- `cors`: CORS policy configuration
- `rate_limiting`: Auth attempt limits
Default configuration is suitable for Docker deployment with storage at `/data/storage`.

View File

@@ -61,9 +61,15 @@ target_link_libraries(${PROJECT_NAME} PRIVATE
nlohmann_json::nlohmann_json
Drogon::Drogon
/usr/lib/libunwind.a
/usr/lib/libunwind-x86_64.a
/usr/local/lib/libpgcommon.a
/usr/local/lib/libpgport.a
lzma
dl
)
)
# Add architecture-specific libunwind
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")
target_link_libraries(${PROJECT_NAME} PRIVATE /usr/lib/libunwind-x86_64.a)
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
target_link_libraries(${PROJECT_NAME} PRIVATE /usr/lib/libunwind-aarch64.a)
endif()

View File

@@ -1,4 +1,4 @@
FROM --platform=$BUILDPLATFORM gitea.jde.nz/public/dropshell-build-base:latest AS builder
FROM gitea.jde.nz/public/dropshell-build-base:latest AS builder
ARG PROJECT
ARG CMAKE_BUILD_TYPE=Debug