Monitors upstream container repositories, detects changes, and automatically rebuilds images to your private registry.
Intelligent change detection: uses build context hashing to avoid unnecessary builds.
# Continuous monitoring (default: check every hour)
ditto --config config.yaml
# Single run
ditto --config config.yaml --single-run
# Local-only mode (build without pushing)
ditto --config config.yaml --local-only| Flag | Short | Default | Description |
|---|---|---|---|
--config |
-c |
config.yaml |
Path to configuration file |
--log-level |
-L |
INFO |
Log level (DEBUG, INFO, WARN, ERROR) |
--log-format |
-F |
text |
Log format (text, json) |
--single-run |
-s |
false |
Execute a single cycle instead of continuous monitoring |
--local-only |
-l |
false |
Build images locally without pushing to registry |
Copy config.example.yaml to config.yaml and customize:
cp config.example.yaml config.yaml
# Edit config.yaml with your registry and imagesSee config.example.yaml for full documentation of all available options.
Endpoints available on configured port (default: 8080):
/health- Liveness probe (healthy if no critical errors)/ready- Readiness probe (ready if BuildKit + git available)/metrics- Prometheus metrics
ditto_builds_total- Total number of buildsditto_build_duration_seconds- Build durationditto_builds_skipped_total- Builds skipped (no changes)ditto_monitoring_cycles_total- Monitoring cyclesditto_images_configured- Number of configured imagesditto_git_operation_duration_seconds- Git operations durationditto_crane_operations_total- Crane operations (image copy)ditto_errors_total- Errors by component
- Clone upstream repo (sparse checkout)
- Detect available versions and OS
- Calculate build context hash
- Check if image already exists (via labels)
- Build only if changes detected
- Push to your registry with multiple tags
A pre-built Docker image is provided for easy deployment.