Commit graph

23 commits

Author SHA1 Message Date
2df588b957 freshrss: Add deploy script, context & classifier examples
FreshRSS was the only service with just a config.yaml: no auto-update
script, no instance context, and no review examples. That left the
classifier with no few-shot context, so every release would fall back
to "manual", and the auto-updater had nothing to run. These files bring
it in line with the other services so patch & feature releases can be
applied automatically while real breaking changes (volume path moves,
new required env vars) still surface for manual review.
2026-09-14 07:25:31 +00:00
7e15e63dae classifier: Point at gemma4:26b and retry transient fetches
Every classification returned "HTTP Error 404" because the configured
model gemma4:26b-64k no longer exists on the Ollama host: the tag was
retired upstream and the local weights were deleted, so all pending
updates fell back to manual review. Switch to the current gemma4:26b
tag (25.2B, 262k context) and make it explicit in .env so the
classifier no longer depends on the code default matching reality.

PieFed intermittently returned an empty body, which surfaced as a
current version error in the digest. Retry version fetches with a
short backoff so one bad response no longer triggers an alert.

Leave-one-out validation for the new model: immich 6/7 (the miss is
the conditional-breaking example where the model follows the written
rule that thresholds below the running version do not apply),
freshrss 6/6, uptime-kuma 4/4.
2026-09-14 05:37:37 +00:00
f046ebf504 fix: use docker compose pull/up for paperless update
Paperless is a Docker Compose deployment (compose.yaml), not a scripted
install. The previous update.sh reference didn't exist, causing
'bash: update.sh: No such file or directory'. Match the convention used
by other Compose services (freshrss, uptime-kuma, grafana, jellyfin).
2026-08-25 19:34:01 +09:00
3e5c130d49 fix: cd into paperless directory before running update.sh
The upstream update.sh references docker-compose.yaml with a relative
path, so it must be run from the paperless directory.
2026-05-26 00:14:15 +00:00
52ec5b600f fix: Wait for network before running update checks
Catch-up runs triggered shortly after boot by Persistent=true were
failing with DNS resolution errors because NetworkManager had not yet
finished bringing up the network. Add network-online.target ordering
plus a DNS poll for api.github.com so the service starts once name
resolution actually works.
2026-05-17 06:13:35 +00:00
6b4b74fc01 feat: Add Mastodon auto-update with classifier examples 2026-05-02 08:42:23 +00:00
cf7f7a7b62 feat: Add Paperless auto-update with classifier examples 2026-05-02 08:41:58 +00:00
e56ef34a32 feat: Add Uptime Kuma auto-update
Docker compose update via SSH to abraham.jeena.net. Review examples
include real v2.x patches as auto and the v1→v2 migration as manual,
plus a synthetic v2→v3 breaking change example.

Also fix test_classifier.py version derivation for x.0.0 releases
where patch decrement would produce the same version, causing the
model to see a nonsensical "upgrading from 2.0.0 to 2.0.0" prompt.
2026-04-14 01:54:25 +00:00
7c2a7a98e7 feat: Add Open WebUI auto-update
Simple local Docker update via existing update.sh script. Context
file tells the classifier this is a single Docker instance, so
database migration warnings aimed at multi-worker deployments are
correctly classified as auto.
2026-04-13 10:35:11 +00:00
7c2bf2c23b feat: Add Jellyfin auto-update
Jellyfin runs in Docker locally, so the auto-update is a simple
docker compose pull and up. Review examples include real patch and
security releases as auto, and one real major release (v10.11.0
with DB refactor) plus a synthetic example of Docker-breaking
changes (volume path changes) as manual.
2026-04-13 10:12:34 +00:00
ea90b8569b feat: Add Grafana auto-update & improve classifier
Add auto-update for Grafana on Synology via SSH + docker compose,
with review examples and a context.txt describing the specific setup
(Prometheus + Node Exporter, no plugins) so the classifier can
ignore plugin-only breaking changes.

The classifier now loads an optional context.txt per service to
tailor decisions to the actual deployment. It also truncates large
release notes intelligently, keeping important sections (breaking
changes, deprecations, migration notes) while dropping long PR
lists that add no signal.

test_classifier.py now also loads context.txt and accepts any
service name as argument.
2026-04-13 03:57:22 +00:00
67a9509eaa feat: Add PeerTube & PieFed auto-update, improve classifier
Add auto-update scripts and review examples for PeerTube and PieFed,
bringing total auto-updating services to three.

The classifier now includes the current and target version in the
prompt so it can correctly evaluate conditional upgrade notes like
"follow v8.1.0 instructions if upgrading from <= v8.0.2". Without
this context the model would conservatively flag patch releases as
manual.

All auto-update wrappers now use `bash -euo pipefail` when calling
remote scripts so failures in upstream deploy/upgrade scripts
propagate correctly instead of silently succeeding.

test_classifier.py now accepts a service name argument and derives
realistic version numbers from the release notes for testing.
2026-04-12 23:13:26 +00:00
f55f3d8e91 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.
2026-04-09 12:49:57 +00:00
f52ff222f0 chore: Ignore all egg-info directories in .gitignore 2026-03-19 04:20:30 +00:00
cbb4b03d66 fix: Adapt FreshRSS login to reversed challenge order
FreshRSS upstream commit 476e57b reversed the concatenation order
of the bcrypt hash and nonce in the login challenge for safer
password evaluation. Update our challenge computation to match
the new hash+nonce order.
2026-03-19 04:17:42 +00:00
f34e2f2d08 feat: Add Uptime Kuma version check via Socket.IO
Retrieve the running Uptime Kuma version by authenticating over
Socket.IO and reading the info event. This adds a new login_socket
dataset field, the fetch_socket_info helper, and the python-socketio
and websocket-client dependencies.
2026-03-19 04:17:18 +00:00
501a84e0a9 chore: Rename project to service-update-alerts
Update project metadata, docs, and systemd unit names to match the new service-update-alerts naming.
2026-03-12 15:50:49 +00:00
413766ed2b feat: Add scheduled runs and Kuma ping
Add systemd user units for daily execution and send an Uptime Kuma push on each run.
2026-03-12 15:34:00 +00:00
4ab799c156 feat: Add Matrix notifications
Send Matrix alerts for updates and errors, and document the required bot credentials.
2026-03-12 15:23:45 +00:00
7c778e338c feat: Drop Radicale checks
Remove the Radicale service entry and related auth configuration now that updates are handled by the OS package manager.
2026-03-12 14:20:51 +00:00
7537de2f53 feat: Add authenticated service checks
Support FreshRSS login with challenge hashing, add GitHub token usage, and update service metadata for Immich and PeerTube.
2026-03-12 13:57:37 +00:00
95cd8e0906 feat: Add update checker tooling
Add the initial dataset, version checker, tests, and project setup files so the update checker can be run and validated.
2026-03-12 12:50:08 +00:00
1eddaca1ad docs: Add backlog
Document planned user stories to guide implementation of the update checker.
2026-03-12 11:39:53 +00:00