Development

Layout

Project Role
DuplicateAssistant The Avalonia desktop app, its view models and business services.
Cli The command-line front end (JSON output, dry runs).
FileCompare Hashing, content comparison, scanning, grouping, trash, caches, audit log.
ImageCompare Perceptual hashing, embedding and quality-scorer seams, the similar-image finder.
ImageCompare.Onnx ONNX Runtime adapters and the model catalogue.
FileCompare.Tests NUnit tests for the engine, CLI, caches and trash.
Benchmarks BenchmarkDotNet projects for the comparison and hashing paths.
Playground Scratch console project.

The single-file utilities that predate the app (FindDuplicate, FindDupByHash, EliminateRenamed, DeleteIfAtOtherPlace, MergeToADirectory, FlattenDirectory) are still in the solution. They are independent console front ends; new work goes through FileCompare.

Build, test, format

dotnet restore
dotnet build --no-restore
dotnet test --no-build
dotnet format FindDuplicate.sln --verify-no-changes --no-restore

CI runs on Ubuntu, Windows and macOS with the .NET 10 SDK, verifies formatting on Ubuntu, and uploads coverage. The publish job is gated on the tests and runs only for pushes to main; it produces self-contained archives for win-x64, linux-x64 and osx-arm64 as workflow artifacts.

Warnings are errors (Directory.Build.props sets TreatWarningsAsErrors), and nullable reference types are enabled. global.json pins .NET 10 and refuses prereleases.

Guidelines

  • Destructive operations are dry runs by default in the CLI, and confirmed in the app.
  • A new cache belongs in CachePaths, with a key that includes everything that can change the value.
  • A new image model is a catalogue entry (URL, SHA-256, preprocessing, output tensor, pooling) in ImageCompare.Onnx, not a branch in the finder.
  • The trash manifest and the audit log are formats, not implementation details. See Safety and trash; tests for the failure paths live in FileCompare.Tests.

License

GPL-3.0. The project was created in 2022 and is developed in the open on GitHub.


This site uses Just the Docs, a documentation theme for Jekyll.