Releases: dr8co/doppel
Releases · dr8co/doppel
v1.0.0
Release Notes - Version 1.0.0
Overview
This major release represents a complete rewrite and modernization of the duplicate file finder, introducing a robust configuration system, enhanced performance through multi-stage hashing, and a comprehensive logging framework.
🎯 Major Features
Configuration Management System
- Multi-source configuration support: Load settings from TOML, YAML, and JSON files, environment variables, and command-line flags with proper precedence
- Validation and merging: Automatic validation of configuration options with intelligent deep-merging capabilities
- Extensible providers: FileProvider and EnvProvider for flexible configuration sourcing
Advanced Hashing Strategy
- Multi-stage hashing optimization: Implements quick hash (XXH3) for initial filtering followed by full hash (BLAKE3) for verification
- Configurable hash algorithms: Support for XXH3 and BLAKE3 with reusable buffer pools
- Performance improvements: Candidate filtration reduces unnecessary full hashing operations
Professional Logging Framework
- Multiple output formats: Support for text, JSON, pretty (colored), and discard formats
- Thread-safe implementation: Atomic operations and proper synchronization throughout
- Flexible configuration: Adjustable log levels, output destinations (file/stdout/stderr), and formatting options
- Source position tracking: Accurate caller reporting for debugging
Enhanced User Experience
- Loading spinners: Visual feedback for long-running operations
- Human-readable file sizes: Input and output support for KB, MB, GB units
- Improved error messages: Context-rich error reporting throughout the application
- Terminal theme adaptation: Color schemes automatically adapt to light/dark terminal themes
🚀 Performance Enhancements
- Worker pool optimization: Limits workers to task count with proper context cancellation
- Memory efficiency: Strategic slice clipping and buffer reuse patterns
- Optimized I/O: Uses
io.CopyBufferandReadAtfor efficient file operations - Reduced allocations: Builder pools and style caching in formatters
🛠️ Technical Improvements
Code Quality
- Comprehensive test coverage: Unit tests for all core packages (config, logger, finder, output, pathutil)
- Race condition detection: GitHub Actions CI includes race detector
- Linting configuration: golangci-lint integration for code quality enforcement
- Package documentation: Complete package-level documentation for maintainability
Architecture Refactoring
- Module separation: Clean separation of concerns (finder, filter, output, logger, config, pathutil)
- Type safety: Introduction of
FileInfostruct for improved data handling - Context propagation: Proper context handling throughout for cancellation and timeouts
- Error handling: Uses
errors.Isfor robust error checking
Developer Experience
- Modern Go practices: Range-over-func loops, pointer types in pools
- Standardized naming: Consistent naming conventions across the codebase
- Improved readability: Extracted helper functions and simplified complex logic
📝 Command-Line Interface
New Flags
--min-size,--max-size: Human-readable file size filters (e.g., "10MB", "1.5GB")--output-format: Choose between pretty, json, yaml output formats--output-file: Write results to file instead of stdout--log-format: Configure logging output format--log-level: Set logging verbosity- Exclusion flag aliases for improved usability
Enhanced Commands
find: Improved directory scanning with deduplication and subdirectory handlingpreset: Configuration preset management with suggestions- Better command descriptions and help text
🔧 Configuration
Supported Formats
- TOML: Primary configuration format
- YAML config files
- JSON config files
- Environment variables: PREFIX-based environment variable support
- Command-line flags: Override any configuration option
🎨 Output Formatting
Pretty Formatter
- Color-coded output with lipgloss styling
- Detailed statistics: file count, duplicate groups, wasted space, scan duration
- Adaptive color schemes for terminal themes
- Improved pluralization and formatting
JSON/YAML Formatters
- Structured output for programmatic consumption
- Complete duplicate group information
- Metadata and statistics included
🔒 Security Improvements
- Updated file/directory permissions (0o600 for files, 0o700 for directories)
- Proper path validation and normalization
- Safe handling of symbolic links and special files
📦 Dependencies
Updated
- Go toolchain to stable version
- Various GitHub Actions to latest versions
- Core dependencies updated for security and performance
Added
github.com/pelletier/go-toml/v2: TOML configuration supportgithub.com/charmbracelet/lipgloss: Terminal stylinggithub.com/zeebo/xxh3: Fast hashinggithub.com/zeebo/blake3: Secure hashing
🐛 Bug Fixes
- Fixed source position handling in text and JSON log handlers
- Corrected byte conversion unit (changed from 1024 to 1000 for human-readable output)
- Improved numeric parsing error messages
- Fixed frame caching in logging for accurate caller reporting
🗑️ Removed Features
--exclude-emptyflag (empty files now always excluded for clarity)- Placeholder/unused code removed throughout
📚 Documentation
- Comprehensive README updates with examples
- Package-level documentation for all modules
- Improved contribution guidelines
- Terminal preview image added
- Fixed table of contents links
🔄 Breaking Changes
- Logger API completely redesigned
- Output format structure changed
- Some command-line flags renamed or removed
🙏 Acknowledgments
- ImgBot for image optimization
- Dependabot for automated dependency updates
- GitHub Actions for CI/CD infrastructure
New Contributors
- @imgbot[bot] made their first contribution in #5
- @dependabot[bot] made their first contribution in #4
Full Changelog: v0.1.2...v1.0.0
Installation: Download the latest release for your platform or build from source
Upgrade Notes: This is a major version with breaking changes. Review the configuration format and CLI flag changes before upgrading.
v0.1.2
Pre-release 2
Full Changelog: v0.1.1...v0.1.2
v0.1.0
Pre-release 1
Full Changelog: https://github.com/dr8co/doppel/commits/v0.1.0