feat(updater): P1b — CFG_<APP>_VERSION drives the anchor image tag
Add a `#LIBREPORTAL|<APP>_VERSION_TAG|<current-tag>` sentinel to each app's anchor (`<slug>-service`) image line, so a `CFG_<APP>_VERSION` config drives that tag through the existing tagging system — the config becomes the source, the compose tag is derived (like ports/IPs/domains already are). This is the "install/pin a specific version" knob. - Placeholder is the literal current tag (e.g. `31-fpm-alpine`), NOT a `*_DATA` token: an unset var leaves the line untouched (inert comment, keeps the real tag) and never trips the up_app stale-tag scanner. - Only the anchor line is tagged (sidecars mariadb/redis/nginx stay tracked-by-digest, not user-version-picked). ollama correctly targets `ollama/ollama`, not the companion open-webui. - Untagged anchors normalized to `:latest` (semantic no-op) so they're templatable too. The manager (libreportal) is skipped — it updates via its release channel, not a docker tag. 32 apps wired. Verified: CFG_NEXTCLOUD_VERSION=32 → `nextcloud:32` (prefix preserved, idempotent, sidecars untouched); all compose files still valid YAML. Inert until a version config is set, so no behaviour change on existing installs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: librelad <librelad@digitalangels.vip>
This commit is contained in:
parent
0f53fb0b47
commit
56102ac5c0
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
adguard-service: #LIBREPORTAL|SERVICE_TAG_1|adguard-service
|
||||
container_name: adguard-service
|
||||
image: adguard/adguardhome
|
||||
image: adguard/adguardhome:latest #LIBREPORTAL|ADGUARD_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: adguard
|
||||
# GLUETUN_OFF_BEGIN
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
authelia-service: #LIBREPORTAL|SERVICE_TAG_1|authelia-service
|
||||
container_name: authelia-service
|
||||
image: docker.io/authelia/authelia:latest
|
||||
image: docker.io/authelia/authelia:latest #LIBREPORTAL|AUTHELIA_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
# GLUETUN_OFF_BEGIN
|
||||
ports:
|
||||
|
||||
@ -4,7 +4,7 @@ networks:
|
||||
|
||||
services:
|
||||
bookstack-service: #LIBREPORTAL|SERVICE_TAG_1|bookstack-service
|
||||
image: lscr.io/linuxserver/bookstack
|
||||
image: lscr.io/linuxserver/bookstack:latest #LIBREPORTAL|BOOKSTACK_VERSION_TAG|latest
|
||||
container_name: bookstack
|
||||
environment:
|
||||
- PUID=1000
|
||||
|
||||
@ -4,7 +4,7 @@ networks:
|
||||
|
||||
services:
|
||||
dashy-service: #LIBREPORTAL|SERVICE_TAG_1|dashy-service
|
||||
image: lissy93/dashy
|
||||
image: lissy93/dashy:latest #LIBREPORTAL|DASHY_VERSION_TAG|latest
|
||||
container_name: dashy
|
||||
volumes:
|
||||
- SOCKET_DATA #LIBREPORTAL|SOCKET_TAG|SOCKET_DATA
|
||||
|
||||
@ -4,7 +4,7 @@ networks:
|
||||
|
||||
services:
|
||||
focalboard-service: #LIBREPORTAL|SERVICE_TAG_1|focalboard-service
|
||||
image: mattermost/focalboard
|
||||
image: mattermost/focalboard:latest #LIBREPORTAL|FOCALBOARD_VERSION_TAG|latest
|
||||
container_name: focalboard-service
|
||||
# GLUETUN_OFF_BEGIN
|
||||
ports:
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
gitea-service: #LIBREPORTAL|SERVICE_TAG_1|gitea-service
|
||||
container_name: gitea-service
|
||||
image: gitea/gitea:latest
|
||||
image: gitea/gitea:latest #LIBREPORTAL|GITEA_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
# GLUETUN_OFF_BEGIN
|
||||
depends_on:
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
gluetun-service: #LIBREPORTAL|SERVICE_TAG_1|gluetun-service
|
||||
container_name: gluetun-service
|
||||
image: qmcgaw/gluetun:latest
|
||||
image: qmcgaw/gluetun:latest #LIBREPORTAL|GLUETUN_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: gluetun
|
||||
cap_add:
|
||||
|
||||
@ -4,7 +4,7 @@ networks:
|
||||
|
||||
services:
|
||||
grafana-service: #LIBREPORTAL|SERVICE_TAG_1|grafana-service
|
||||
image: grafana/grafana-enterprise
|
||||
image: grafana/grafana-enterprise:latest #LIBREPORTAL|GRAFANA_VERSION_TAG|latest
|
||||
container_name: grafana-service
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
headscale-service: #LIBREPORTAL|SERVICE_TAG_1|headscale-service
|
||||
container_name: headscale-service
|
||||
image: headscale/headscale:latest
|
||||
image: headscale/headscale:latest #LIBREPORTAL|HEADSCALE_VERSION_TAG|latest
|
||||
volumes:
|
||||
- ./config:/etc/headscale/
|
||||
- ./data:/var/lib/headscale
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
invidious-service: #LIBREPORTAL|SERVICE_TAG_1|invidious-service
|
||||
container_name: invidious-service
|
||||
image: quay.io/invidious/invidious:latest
|
||||
image: quay.io/invidious/invidious:latest #LIBREPORTAL|INVIDIOUS_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- invidious-db
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
ipinfo-service: #LIBREPORTAL|SERVICE_TAG_1|ipinfo-service
|
||||
container_name: ipinfo-service
|
||||
image: peterdavehello/ipinfo.tw:latest
|
||||
image: peterdavehello/ipinfo.tw:latest #LIBREPORTAL|IPINFO_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
# GLUETUN_OFF_BEGIN
|
||||
ports:
|
||||
|
||||
@ -4,7 +4,7 @@ networks:
|
||||
|
||||
services:
|
||||
jellyfin-service: #LIBREPORTAL|SERVICE_TAG_1|jellyfin-service
|
||||
image: jellyfin/jellyfin
|
||||
image: jellyfin/jellyfin:latest #LIBREPORTAL|JELLYFIN_VERSION_TAG|latest
|
||||
container_name: jellyfin-service
|
||||
# GLUETUN_OFF_BEGIN
|
||||
ports:
|
||||
|
||||
@ -8,7 +8,7 @@ services:
|
||||
# Frontend
|
||||
jitsimeet-service: #LIBREPORTAL|SERVICE_TAG_1|jitsimeet-service
|
||||
container_name: jitsimeet-service
|
||||
image: jitsi/web:stable
|
||||
image: jitsi/web:stable #LIBREPORTAL|JITSIMEET_VERSION_TAG|stable
|
||||
volumes:
|
||||
- ${CONFIG}/web:/config
|
||||
- ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
libreportal-catalog-service: #LIBREPORTAL|SERVICE_TAG_1|libreportal-catalog-service
|
||||
container_name: libreportal-catalog-service
|
||||
image: nginx:alpine
|
||||
image: nginx:alpine #LIBREPORTAL|LIBREPORTAL_CATALOG_VERSION_TAG|alpine
|
||||
restart: unless-stopped
|
||||
hostname: libreportal-catalog
|
||||
# GLUETUN_OFF_BEGIN
|
||||
|
||||
@ -6,7 +6,7 @@ services:
|
||||
# Linkding Bookmark Manager
|
||||
linkding-service: #LIBREPORTAL|SERVICE_TAG_1|linkding-service
|
||||
container_name: linkding-service
|
||||
image: sissbruecker/linkding:latest
|
||||
image: sissbruecker/linkding:latest #LIBREPORTAL|LINKDING_VERSION_TAG|latest
|
||||
ports:
|
||||
- "PORTS_DATA_1" #LIBREPORTAL|PORTS_TAG_1|PORTS_DATA_1
|
||||
volumes:
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
mastodon-service: #LIBREPORTAL|SERVICE_TAG_1|mastodon-service
|
||||
container_name: mastodon-service
|
||||
image: tootsuite/mastodon:v4.2.0
|
||||
image: tootsuite/mastodon:v4.2.0 #LIBREPORTAL|MASTODON_VERSION_TAG|v4.2.0
|
||||
ports:
|
||||
- "PORTS_DATA_1" #LIBREPORTAL|PORTS_TAG_1|PORTS_DATA_1
|
||||
- "PORTS_DATA_2" #LIBREPORTAL|PORTS_TAG_2|PORTS_DATA_2
|
||||
|
||||
@ -6,7 +6,7 @@ services:
|
||||
moneyapp-service: #LIBREPORTAL|SERVICE_TAG_1|moneyapp-service
|
||||
container_name: moneyapp-service
|
||||
build: .
|
||||
image: moneyapp:latest
|
||||
image: moneyapp:latest #LIBREPORTAL|MONEYAPP_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: moneyapp
|
||||
# GLUETUN_OFF_BEGIN
|
||||
|
||||
@ -6,7 +6,7 @@ services:
|
||||
# Navidrome Music Server
|
||||
navidrome-service: #LIBREPORTAL|SERVICE_TAG_1|navidrome-service
|
||||
container_name: navidrome-service
|
||||
image: deluan/navidrome:latest
|
||||
image: deluan/navidrome:latest #LIBREPORTAL|NAVIDROME_VERSION_TAG|latest
|
||||
# GLUETUN_OFF_BEGIN
|
||||
ports:
|
||||
- "PORTS_DATA_1" #LIBREPORTAL|PORTS_TAG_1|PORTS_DATA_1
|
||||
|
||||
@ -9,7 +9,7 @@ services:
|
||||
# automatically on first boot when the NEXTCLOUD_ADMIN_USER + MYSQL_* env
|
||||
# vars are set, so no user wizard.
|
||||
nextcloud-service: #LIBREPORTAL|SERVICE_TAG_1|nextcloud-service
|
||||
image: nextcloud:31-fpm-alpine
|
||||
image: nextcloud:31-fpm-alpine #LIBREPORTAL|NEXTCLOUD_VERSION_TAG|31-fpm-alpine
|
||||
container_name: nextcloud-service
|
||||
environment:
|
||||
- TZ=TIMEZONE_DATA #LIBREPORTAL|TIMEZONE_TAG|TIMEZONE_DATA
|
||||
|
||||
@ -35,7 +35,7 @@ services:
|
||||
|
||||
ollama-service: #LIBREPORTAL|SERVICE_TAG_2|ollama-service
|
||||
container_name: ollama-service
|
||||
image: ollama/ollama:latest
|
||||
image: ollama/ollama:latest #LIBREPORTAL|OLLAMA_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: ollama
|
||||
# GLUETUN_OFF_BEGIN
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
onlyoffice-service: #LIBREPORTAL|SERVICE_TAG_1|onlyoffice-service
|
||||
container_name: onlyoffice-service
|
||||
image: onlyoffice/documentserver:latest
|
||||
image: onlyoffice/documentserver:latest #LIBREPORTAL|ONLYOFFICE_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: onlyoffice
|
||||
stdin_open: true
|
||||
|
||||
@ -6,7 +6,7 @@ networks:
|
||||
services:
|
||||
owncloud-service: #LIBREPORTAL|SERVICE_TAG_1|owncloud-service
|
||||
container_name: owncloud-service
|
||||
image: owncloud/server:latest
|
||||
image: owncloud/server:latest #LIBREPORTAL|OWNCLOUD_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: owncloud
|
||||
depends_on:
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
pihole-service: #LIBREPORTAL|SERVICE_TAG_1|pihole-service
|
||||
container_name: pihole-service
|
||||
image: cbcrowe/pihole-unbound:latest
|
||||
image: cbcrowe/pihole-unbound:latest #LIBREPORTAL|PIHOLE_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: pihole
|
||||
# GLUETUN_OFF_BEGIN
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
prometheus-service: #LIBREPORTAL|SERVICE_TAG_1|prometheus-service
|
||||
container_name: prometheus-service
|
||||
image: prom/prometheus
|
||||
image: prom/prometheus:latest #LIBREPORTAL|PROMETHEUS_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: prometheus
|
||||
extra_hosts:
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
searxng-service: #LIBREPORTAL|SERVICE_TAG_1|searxng-service
|
||||
container_name: searxng-service
|
||||
image: searxng/searxng:latest
|
||||
image: searxng/searxng:latest #LIBREPORTAL|SEARXNG_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: searxng
|
||||
# GLUETUN_OFF_BEGIN
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
speedtest-service: #LIBREPORTAL|SERVICE_TAG_1|speedtest-service
|
||||
container_name: speedtest-service
|
||||
image: adolfintel/speedtest
|
||||
image: adolfintel/speedtest:latest #LIBREPORTAL|SPEEDTEST_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: speedtest
|
||||
environment:
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
traefik-service: #LIBREPORTAL|SERVICE_TAG_1|traefik-service
|
||||
container_name: traefik-service
|
||||
image: traefik:latest
|
||||
image: traefik:latest #LIBREPORTAL|TRAEFIK_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: traefik
|
||||
ports:
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
trilium-service: #LIBREPORTAL|SERVICE_TAG_1|trilium-service
|
||||
container_name: trilium-service
|
||||
image: zadam/trilium:latest
|
||||
image: zadam/trilium:latest #LIBREPORTAL|TRILIUM_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: trilium
|
||||
# GLUETUN_OFF_BEGIN
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
trivy-service: #LIBREPORTAL|SERVICE_TAG_1|trivy-service
|
||||
container_name: trivy-service
|
||||
image: aquasec/trivy:latest
|
||||
image: aquasec/trivy:latest #LIBREPORTAL|TRIVY_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
# Keep the container process ALIVE even when the vuln DB can't be fetched.
|
||||
# `trivy server` FATAL-exits if it can't download the DB on first boot (no
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
unbound-service: #LIBREPORTAL|SERVICE_TAG_1|unbound-service
|
||||
container_name: unbound-service
|
||||
image: mvance/unbound:latest
|
||||
image: mvance/unbound:latest #LIBREPORTAL|UNBOUND_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: unbound
|
||||
# GLUETUN_OFF_BEGIN
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
vaultwarden-service: #LIBREPORTAL|SERVICE_TAG_1|vaultwarden-service
|
||||
container_name: vaultwarden-service
|
||||
image: vaultwarden/server:latest
|
||||
image: vaultwarden/server:latest #LIBREPORTAL|VAULTWARDEN_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: vaultwarden
|
||||
# GLUETUN_OFF_BEGIN
|
||||
|
||||
@ -5,7 +5,7 @@ networks:
|
||||
services:
|
||||
wireguard-service: #LIBREPORTAL|SERVICE_TAG_1|wireguard-service
|
||||
container_name: wireguard-service
|
||||
image: ghcr.io/wg-easy/wg-easy:latest
|
||||
image: ghcr.io/wg-easy/wg-easy:latest #LIBREPORTAL|WIREGUARD_VERSION_TAG|latest
|
||||
restart: unless-stopped
|
||||
hostname: wireguard
|
||||
environment:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user