feat: implement hierarchical S3 keys and automated version management

This commit introduces two major improvements:

1. **Hierarchical S3 Key Structure**:
   - Replace URL-based hashing with remote-name/hash(directory_path)/filename format
   - Enables remote-specific cache operations and intuitive S3 organization
   - Cache keys now independent of mirror URL changes
   - Example: fedora/886d215f6d1a0108/eccodes-2.44.0-1.fc42.x86_64.rpm

2. **Automated Version Management**:
   - Add bumpver for semantic version bumping
   - Single source of truth in pyproject.toml
   - FastAPI dynamically reads version from package metadata
   - Eliminates manual version synchronization between files

Changes:
- storage.py: New get_object_key(remote_name, path) method with directory hashing
- main.py: Dynamic version import and updated cache key generation calls
- cache.py: Updated to use new hierarchical key structure
- pyproject.toml: Added bumpver config and dev dependency

Breaking change: S3 key format changed, existing cache will need regeneration
This commit is contained in:
2026-01-24 23:51:03 +11:00
parent 1a71a2c9fa
commit 5a0e8b4e0b
4 changed files with 49 additions and 33 deletions
+14
View File
@@ -40,4 +40,18 @@ dev = [
"isort>=5.12.0",
"mypy>=1.6.0",
"ruff>=0.1.0",
"bumpver>=2025.1131",
]
[tool.bumpver]
current_version = "2.0.2"
version_pattern = "MAJOR.MINOR.PATCH"
commit_message = "Bump version {old_version} → {new_version}"
commit = true
tag = true
push = false
[[tool.bumpver.files]]
filename = "pyproject.toml"
search = 'version = "{current_version}"'
replace = 'version = "{new_version}"'