feat: Add AI-driven auto-update & restructure into package

The monolithic check_updates.py has been split into the update_monitor/
package with separate modules for fetching, extraction, comparison,
classification, and notification. This makes the codebase easier to
navigate and test.

The flat services.yaml is replaced by per-service directories under
services/<name>/config.yaml, co-locating config with update scripts
and AI review examples.

When --auto-update is enabled, services with an auto-update.sh script
get their release notes classified by a local Ollama model (using
few-shot examples from review-examples/) to decide whether the update
can be applied automatically or needs manual admin intervention. Results
are reported in a single consolidated Matrix message.

Immich is the first service with auto-update configured, using 7
real release note examples to train the classifier.
This commit is contained in:
Jeena 2026-04-09 12:49:57 +00:00
parent f52ff222f0
commit f55f3d8e91
36 changed files with 2612 additions and 821 deletions

View file

@ -4,7 +4,7 @@ from unittest.mock import patch
sys.path.append(str(Path(__file__).resolve().parents[1]))
from check_updates import check_service, load_services
from update_monitor import check_service, load_services
def test_services_extract_current_and_latest():
@ -32,7 +32,7 @@ def test_services_extract_current_and_latest():
return responses[url], {}
service = list(services.values())[0]
with patch("check_updates.fetch_response", side_effect=fake_fetch):
with patch("update_monitor.checker.fetch_response", side_effect=fake_fetch):
result = check_service(service, timeout=5, user_agent="test")
assert result["current"] == "1.2.3"