Add CLAUDE.md
This commit is contained in:
1 parent
123705aa53
commit
9e399df8e4
2 files changed
+103
No files matched your search
@@ -0,0 +1,102 @@
|
||||
# Agent Instructions - docker-seafile-client
|
||||
|
||||
Docker container for Seafile CLI client with automatic retry logic for server outages.
|
||||
|
||||
## Quick Commands
|
||||
|
||||
### Build & Test Locally
|
||||
```bash
|
||||
# Build image
|
||||
docker build -t snegov/seafile-client:test .
|
||||
|
||||
# Test locally with docker-compose
|
||||
docker compose build
|
||||
docker compose up
|
||||
|
||||
# Check logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
### Build & Deploy Test Image to Docker Hub
|
||||
```bash
|
||||
# Build fresh image without cache
|
||||
docker build --no-cache -t snegov/seafile-client:test .
|
||||
|
||||
# Push to Docker Hub (requires login)
|
||||
docker push snegov/seafile-client:test
|
||||
```
|
||||
|
||||
Deploying to hosts is documented in `CLAUDE.local.md` (private, not in the
|
||||
repo).
|
||||
|
||||
### Release New Version
|
||||
```bash
|
||||
# Create tag; pushing it to GitHub runs the Docker Hub publish workflow
|
||||
git tag 0.0.X
|
||||
git push gh 0.0.X
|
||||
|
||||
# Docker Hub will automatically build snegov/seafile-client:latest and snegov/seafile-client:0.0.X
|
||||
```
|
||||
|
||||
### Syntax Check
|
||||
```bash
|
||||
python3 -m py_compile dsc/client.py
|
||||
python3 -m py_compile start.py
|
||||
```
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
dsc/
|
||||
client.py - Main SeafileClient class
|
||||
const.py - Constants
|
||||
misc.py - Helper functions
|
||||
__init__.py - Package init
|
||||
start.py - Container entrypoint
|
||||
Dockerfile - Image definition
|
||||
docker-compose.yml - Local testing setup
|
||||
requirements.txt - Python dependencies
|
||||
```
|
||||
|
||||
## Architecture Notes
|
||||
|
||||
### HTTP Retry Strategy
|
||||
- 30 retry attempts with exponential backoff (2s base, 60s max)
|
||||
- Retries on 500, 502, 503, 504 status codes
|
||||
- Prevents container crash-loop during server outages
|
||||
- urllib3 debug logging shows retry attempts
|
||||
|
||||
### Session Management
|
||||
- Single `requests.Session` per client instance
|
||||
- Retry logic configured via `HTTPAdapter` + `Retry`
|
||||
- Token cached in `self.__token` (fetched on first use)
|
||||
|
||||
### Server URL Handling
|
||||
- Assumes HTTPS unless `http://` explicitly specified
|
||||
- No initial connection test (fails fast on first API call)
|
||||
|
||||
### Library Status Monitoring
|
||||
- Dynamic column width (max 30 chars) for clean output
|
||||
- Only logs status changes (not every poll)
|
||||
- Handles long library names without breaking alignment
|
||||
|
||||
## Testing
|
||||
|
||||
No formal test suite yet. Manual testing via:
|
||||
1. Build image
|
||||
2. Run with docker-compose
|
||||
3. Monitor logs for expected behavior
|
||||
4. Test with server down (should retry, not crash)
|
||||
|
||||
## Deployment
|
||||
|
||||
- Production: `snegov/seafile-client:latest` (auto-built from tags)
|
||||
- Testing: `snegov/seafile-client:test` (manual push)
|
||||
|
||||
## Common Issues
|
||||
|
||||
**Container crash-loops on 502**: Retry logic should handle this (check urllib3 logs).
|
||||
|
||||
**No retry logs visible**: Ensure urllib3 logger is set to DEBUG and propagate=True.
|
||||
|
||||
**Wrong image deployed**: Clear old image with `docker rmi` before pulling fresh one.
|
||||
Reference in new issue
Block a user