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:
parent
f52ff222f0
commit
f55f3d8e91
36 changed files with 2612 additions and 821 deletions
|
|
@ -6,13 +6,13 @@ import pytest
|
|||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from check_updates import check_service, load_dotenv, load_services, load_yaml
|
||||
from update_monitor import check_service, load_dotenv, load_services_dir
|
||||
|
||||
|
||||
@pytest.mark.skipif(os.getenv("RUN_LIVE_TESTS") != "1", reason="Live tests disabled")
|
||||
def test_live_service_versions():
|
||||
load_dotenv()
|
||||
services = load_services(load_yaml("services.yaml"))
|
||||
services = load_services_dir("services")
|
||||
failures = []
|
||||
|
||||
for service in services.values():
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue