- Add deploy_feature job for ephemeral dev environments
- Use unique identifier (feat-{short_sha}) for K8s resource isolation
- Dynamic hostnames for ingress (orchard-{sha}.common.global.bsf.tools)
- Add cleanup_feature job with on_stop for automatic cleanup on merge
- Add values-dev.yaml with lighter resources for ephemeral deployments
- Refactor deploy_stage to use dynamic image tag from CI
6.1 KiB
6.1 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 GitLab CI pipeline for feature branch deployments to dev namespace (#51)
- Added
deploy_featurejob with dynamic hostnames and unique release names (#51) - Added
cleanup_featurejob withon_stopfor automatic cleanup on merge (#51) - Added
values-dev.yamlHelm values for lightweight ephemeral environments (#51) - 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)