5.8 KiB
5.8 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Added
- Added
StorageBackendprotocol/interface for backend-agnostic storage (#33) - Added
health_check()method to storage backend with/healthendpoint integration (#33) - Added
verify_integrity()method for post-upload hash validation (#33) - Added S3 configuration options:
s3_verify_ssl,s3_connect_timeout,s3_read_timeout,s3_max_retries(#33) - Added
S3StorageUnavailableErrorandHashCollisionErrorexception types (#33) - Added hash collision detection by comparing file sizes during deduplication (#33)
- Added garbage collection endpoint
POST /api/v1/admin/garbage-collectfor orphaned artifacts (#36) - Added orphaned artifacts listing endpoint
GET /api/v1/admin/orphaned-artifacts(#36) - Added global storage statistics endpoint
GET /api/v1/stats(#34) - Added storage breakdown endpoint
GET /api/v1/stats/storage(#34) - Added deduplication metrics endpoint
GET /api/v1/stats/deduplication(#34) - Added per-project statistics endpoint
GET /api/v1/projects/{project}/stats(#34) - Added per-package statistics endpoint
GET /api/v1/project/{project}/packages/{package}/stats(#34) - Added per-artifact statistics endpoint
GET /api/v1/artifact/{id}/stats(#34) - Added cross-project deduplication endpoint
GET /api/v1/stats/cross-project(#34) - Added timeline statistics endpoint
GET /api/v1/stats/timelinewith daily/weekly/monthly periods (#34) - Added stats export endpoint
GET /api/v1/stats/exportwith JSON/CSV formats (#34) - Added summary report endpoint
GET /api/v1/stats/reportwith markdown/JSON formats (#34) - Added Dashboard page at
/dashboardwith storage and deduplication visualizations (#34) - Added pytest infrastructure with mock S3 client for unit testing (#35)
- Added unit tests for SHA256 hash calculation (#35)
- Added unit tests for duplicate detection and deduplication behavior (#35)
- Added integration tests for upload scenarios and ref_count management (#35)
- Added integration tests for S3 verification and failure cleanup (#35)
- Added integration tests for all stats endpoints (#35)
- Added integration tests for cascade deletion ref_count behavior (package/project delete) (#35)
- Added integration tests for tag update ref_count adjustments (#35)
- Added integration tests for garbage collection endpoints (#35)
- Added integration tests for file size validation (#35)
- Added test dependencies to requirements.txt (pytest, pytest-asyncio, pytest-cov, httpx, moto) (#35)
- Added
ORCHARD_MAX_FILE_SIZEconfig option (default: 10GB) for upload size limits (#37) - Added
ORCHARD_MIN_FILE_SIZEconfig option (default: 1 byte, rejects empty files) (#37) - Added file size validation to upload and resumable upload endpoints (#37)
- Added comprehensive deduplication design document (
docs/design/deduplication-design.md) (#37)
Fixed
- Fixed Helm chart
minio.ingressconflicting with Bitnami MinIO subchart by renaming tominioIngress(#48) - Fixed JSON report serialization error for Decimal types in
GET /api/v1/stats/report(#34) - Fixed resumable upload double-counting ref_count when tag provided (removed manual increment, SQL triggers handle it) (#35)
[0.3.0] - 2025-12-15
Changed
- Changed default download mode from
proxytopresignedfor better performance (#48)
Added
- Added presigned URL support for direct S3 downloads (#48)
- Added
ORCHARD_DOWNLOAD_MODEconfig option (presigned,redirect,proxy) (#48) - Added
ORCHARD_PRESIGNED_URL_EXPIRYconfig option (default: 3600 seconds) (#48) - Added
?mode=query parameter to override download mode per-request (#48) - Added
/api/v1/project/{project}/{package}/+/{ref}/urlendpoint for getting presigned URLs (#48) - Added
PresignedUrlResponseschema with URL, expiry, checksums, and artifact metadata (#48) - Added MinIO ingress support in Helm chart for presigned URL access (#48)
- Added
orchard.download.modeandorchard.download.presignedUrlExpiryHelm values (#48) - Added integrity verification workflow design document (#24)
- Added
sha256field to API responses for clarity (alias ofid) (#25) - Added
checksum_sha1field to artifacts table for compatibility (#25) - Added
s3_etagfield to artifacts table for S3 verification (#25) - Compute and store MD5, SHA1, and S3 ETag alongside SHA256 during upload (#25)
- Added
Dockerfile.localanddocker-compose.local.ymlfor local development (#25) - Added migration script
003_checksum_fields.sqlfor existing databases (#25)
[0.2.0] - 2025-12-15
Added
- Added
formatandplatformfields to packages table (#16) - Added
checksum_md5andmetadataJSONB fields to artifacts table (#16) - Added
updated_atfield to tags table (#16) - Added
tag_name,user_agent,duration_ms,deduplicated,checksum_verifiedfields to uploads table (#16) - Added
change_typefield to tag_history table (#16) - Added composite indexes for common query patterns (#16)
- Added GIN indexes on JSONB fields for efficient JSON queries (#16)
- Added partial index for public projects (#16)
- Added database triggers for
updated_attimestamps (#16) - Added database triggers for maintaining artifact
ref_countaccuracy (#16) - Added CHECK constraints for data integrity (
size > 0,ref_count >= 0) (#16) - Added migration script
002_schema_enhancements.sqlfor existing databases (#16)
Changed
- Updated images to use internal container BSF proxy (#46)
[0.1.0] - 2025-12-12
Added
- Added Prosper docker template config (#45)
Changed
- Changed the Dockerfile npm build arg to use the deps.global.bsf.tools URL as the default registry (#45)