fix(updates): scan all filesystem stacks for image updates (#514)

ImageUpdateService previously discovered stacks by iterating Docker
containers, which meant stacks without containers (e.g. after
docker compose down) were silently excluded from update checks.

Switch to a hybrid discovery approach: enumerate stacks from the
filesystem via FileSystemService.getStacks(), parse compose files
for image refs with .env variable resolution, then augment with
container-based image discovery for running stacks.

Also cleans up stale stack_update_status entries when stacks are
deleted or no longer exist on disk, and replaces the plain
update-available tooltip with an animated cursor follow pattern.
This commit is contained in:
Anso
2026-04-12 03:17:37 -04:00
committed by GitHub
parent f26ac16bc0
commit 4950cd0bd0
5 changed files with 151 additions and 22 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

+12
View File
@@ -509,6 +509,18 @@ docker compose pull && docker compose up -d
---
## Image update checks skip some stacks
**Symptom:** Some stacks in the sidebar never show the "Update available" badge, even though newer images exist on the registry.
**Possible causes:**
- **Build-only services:** Services in your compose file that use `build:` without an `image:` key are skipped. Only services with a remote image reference are checked.
- **Unresolvable variables:** If a service's image uses `${VAR}` interpolation and the variable has no default value and is not defined in the stack's `.env` file, the image reference cannot be resolved and is skipped. Add a default value (e.g., `${TAG:-latest}`) or define the variable in the stack's `.env` file.
- **Image not pulled locally:** Stacks that have never been deployed (no local image on disk) will not show update badges because there is no local digest to compare against the registry. Deploy the stack at least once to enable update detection.
---
## "Check for updates" shows rate-limit error
**Symptom:** Clicking "Check for updates" shows a toast error about waiting before checking again.