Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
All notable changes are documented here. Releases follow [SemVer](https://semver.org).
Image tags published to Docker Hub (`krippler52/starr`) and GHCR (`ghcr.io/krippler/starr`).

## [Unreleased]
## [1.2.10] — 2026-07-16

### Fixed
- **Docker client socket/fd leak** — every Docker operation (`docker stop`/`start` around a repair, and each auto-discovery scan) opened a docker-py client but never closed it, leaking a `requests` session + a socket to `/var/run/docker.sock` each time. Discovery now runs on every scheduled-repair preflight, so on a long-lived container these accumulated until the process could hit its open-file limit. All clients are now closed after use (repair shutdown/restart, `discover()`, `_self_appdata_root()`, and the container-lookup failure path).
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ docker run -d \
-v /mnt/user/appdata:/appdata:rw \
-v /mnt/user/appdata/starr/backups:/backups \
-v /var/run/docker.sock:/var/run/docker.sock \
krippler52/starr:1.2.9
krippler52/starr:1.2.10
```

**That's it for the host side.** Open the dashboard, paste each app's API key, click **Save Credentials**, and Starr remembers it for scheduled runs and reloads. URLs / DB paths / container names are auto-discovered from Docker.
Expand All @@ -72,7 +72,7 @@ docker run -d \

| Tag | Use |
|---|---|
| `1.2.9` | exact version — recommended pin for production |
| `1.2.10` | exact version — recommended pin for production |
| `1.2` / `1` | floating minor / major |
| `latest` | newest **released version** (updated on every version tag) |
| `edge` | tip of `main` — newest merged code, for testing ahead of a release |
Expand Down
2 changes: 1 addition & 1 deletion app/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -879,7 +879,7 @@ def _repair_worker(cfg: dict) -> None:
_job.history = []
_job.result = None

emit("SYS", f"Starr DB Repair v1.2.9 – job started for {cfg['app'].upper()}", "sys")
emit("SYS", f"Starr DB Repair v1.2.10 – job started for {cfg['app'].upper()}", "sys")
emit("SYS", f"Dry run: {cfg.get('dry_run', False)}", "sys")

db_path = None
Expand Down
4 changes: 2 additions & 2 deletions app/templates/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,7 @@ <h2 class="gate-title">STARR DB REPAIR</h2>
</div>
<div>
<h1 id="appTitle">STARR DB REPAIR</h1>
<p id="appSub">Database Diagnostic &amp; Recovery — v1.2.9</p>
<p id="appSub">Database Diagnostic &amp; Recovery — v1.2.10</p>
</div>
</div>
<div class="header-right">
Expand Down Expand Up @@ -1428,7 +1428,7 @@ <h1 id="appTitle">STARR DB REPAIR</h1>

// Header text
document.getElementById('appTitle').textContent = cfg.name + ' DB REPAIR';
document.getElementById('appSub').textContent = cfg.sub + ' — v1.2.9';
document.getElementById('appSub').textContent = cfg.sub + ' — v1.2.10';
document.getElementById('logoSvg').innerHTML = cfg.icon;
document.getElementById('termTitle').textContent = cfg.name + ' REPAIR LOG';

Expand Down
Loading