Commit Graph

753 Commits

Author SHA1 Message Date
admin da1e8045d0 feat(office): add BentoPDF (pdf.dooplex.hu)
Privacy-focused, client-side PDF toolkit deployed into the office-system
namespace alongside OnlyOffice. Stateless (no DB/PVC); nginx-internal
ingress with HU geo-restriction and letsencrypt-prod TLS. Auto-synced by
the existing `office` ArgoCD Application.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 12:36:33 +02:00
admin fd73c41152 Merge pull request 'renovate: move cron to Sat 02:00 Europe/Budapest' (#17) from feat/renovate-cron-saturday into main 2026-06-05 07:31:24 +00:00
admin b96703f2df renovate: move cron to Sat 02:00 Europe/Budapest
Was Sun 04:00; now Sat 02:00 so Renovate's wave lands at the start of
the weekend instead of the end. If an auto-merged update breaks
something, Viktor has the full weekend to troubleshoot.

`0 2 * * 6` = Saturday 02:00 in Europe/Budapest (the CronJob already
sets timeZone, so this is wall-clock local).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 09:30:58 +02:00
admin e147d829e7 Merge pull request 'renovate: default-allow + codify ArgoCD auto-sync' (#16) from feat/renovate-default-allow into main 2026-06-05 05:58:04 +00:00
admin 24be0b45fd renovate: termix uses github-releases datasource (restores 3-day gate)
Replaces the security-flagged `minimumReleaseAge: 0` bypass with a
proper datasource swap.

Why: ghcr.io OCI manifests for ghcr.io/lukegus/termix don't expose a
release timestamp, so Renovate's default `timestamp-required` mode
holds updates indefinitely. The previous fix (zeroing the gate) was
flagged as a supply-chain control regression -- correctly, since it
weakens the stability protection for that package.

Cleaner fix: point Renovate's version lookup at the upstream GitHub
Releases (Termix-SSH/Termix per the OCI source label) where timestamps
ARE published. The 3-day gate then works for termix the same way it
works for other packages with intact timestamps. Renovate still
updates the same image -- the manager extracts ghcr.io/lukegus/termix
from termix.yaml and writes the new tag back; only the version-source
lookup is redirected. The ghcr.io registry hosts every release-X.Y.Z
tag (verified release-2.3.2 present), so the writeback target stays
valid.

Major bumps (1.x -> 2.x) continue to queue for dashboard approval via
the global major rule.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 07:53:50 +02:00
admin 628a63da83 renovate: revert global timestamp-optional; narrowly bypass age gate for termix
Last commit's global `minimumReleaseAgeBehaviour: timestamp-optional` did
two unwanted things:

  1) Dry-run showed 0 "Would commit" branches (was 33 before). The flag
     appears to alter Renovate's filtering more broadly than expected and
     is not the right knob here.
  2) Automated security review correctly flagged the global form as
     fail-open: a missing timestamp on ANY package would bypass the
     stability gate, weakening supply-chain protection across the fleet.

Narrow fix instead:
  - Revert the global setting (back to default `timestamp-required`).
  - Add `minimumReleaseAge: "0 days"` ONLY to the termix packageRule.
    ghcr.io OCI manifests for ghcr.io/lukegus/termix don't expose a
    release timestamp Renovate can read, so the global 3-day gate would
    otherwise hold updates indefinitely (this is the same class of issue
    that's been keeping reloader/homepage/headlamp on "Pending Status
    Checks" for 8+ days). Major bumps still gated by the global major
    rule (`dependencyDashboardApproval: true`).

Other ghcr.io packages with the same issue (reloader, homepage, headlamp)
remain on the dashboard's "Pending Status Checks" list and can be
force-approved per-update via the checkbox UX. That's a slower but safer
manual-approval path that preserves the supply-chain gate's intent.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 07:43:37 +02:00
admin 6ee7d83f66 renovate: set minimumReleaseAgeBehaviour=timestamp-optional
Debug dry-run revealed why termix (and reloader/homepage/headlamp
8d ago) sit in "Pending Status Checks" indefinitely:

  Marking 2 release(s) as pending, as they do not have a
  releaseTimestamp and we're running with
  minimumReleaseAgeBehaviour=timestamp-required
  "depName": "ghcr.io/lukegus/termix"
  "versions": ["release-1.11.2", "release-1.11.1"]
  "check": "minimumReleaseAge"

ghcr.io OCI manifests for these images don't expose a release
timestamp Renovate can read, so the default `timestamp-required`
mode turns the 3-day stability gate into an INFINITE hold for
ghcr.io packages -- silently. PRs are never opened.

Switching to `timestamp-optional` (other supported value per Renovate
source: lib/config/options/index.ts) makes the gate best-effort: the
3-day window is still enforced for any package the datasource gives a
timestamp for; packages without a timestamp are allowed through.
Restores intended behavior.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 07:37:40 +02:00
admin 69db2c609f renovate: switch termix rule to regex versioning (loose+extractVersion silently skipped it)
Debug-level dry-run showed:
  Dependency ghcr.io/lukegus/termix has unsupported/unversioned value
  release-1.11.0 (versioning=loose)
  Skipping ghcr.io/lukegus/termix because no currentDigest or pinDigests

`versioning: loose + extractVersion` doesn't work as intended here:
Renovate evaluates the currentValue (`release-1.11.0`) against the loose
parser BEFORE extractVersion is applied. loose can't parse a prefixed
value, so Renovate falls back to digest-based comparison; we don't pin
digests, so it silently skips and no PRs are ever opened. (Upstream has
v1.11.1, v1.11.2, and a major bump to release-2.3.2 since we deployed.)

Fix: use `versioning: regex:^release-(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)$`
which parses the whole tag including the `release-` prefix. The named
major/minor/patch groups let Renovate categorize bumps correctly so
the existing minor/patch automerge and major dashboard-approval rules
apply normally.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 07:27:15 +02:00
admin c308c0a85e renovate: default-allow + codify ArgoCD auto-sync in git
Two coordinated changes — open PR only, do NOT merge until dry-run passes.

1) admin-system/renovate.yaml: flip packageRules from Tier 1 allowlist to
   default-allow with safety gates. Adds prHourlyLimit=8 + prConcurrentLimit=8
   to throttle the first wave. New rules (7 total, order-sensitive):
   - "*"                    : 3-day stability gate (minimumReleaseAge)
   - minor/patch            : automerge via platformAutomerge
   - major                  : dependencyDashboardApproval (manual gate)
   - k3s-bundled (3 images) : disabled (ride k3s upgrades)
   - critical-core (6 imgs) : automerge=false (Viktor merges manually)
     - gitea/gitea, ghcr.io/goauthentik/{server,ldap,proxy},
       ghcr.io/cloudnative-pg/cloudnative-pg, quay.io/argoproj/argocd
     - ArgoCD + authentik /ldap and /proxy are no-ops (not pinned in repo)
   - termix                 : versioning=loose, extractVersion for "release-X.Y.Z"
   - wanderer-db + -web     : groupName=wanderer (one PR, prevents file race)
   enabledManagers unchanged ([kubernetes, helm-values]) — keeps Helmfile-
   managed infra invisible.

2) argocd-apps/homelab.yaml: codify per-app auto-sync intent in git
   (currently lives only on live CRs via UI — DR risk).
   - 35 existing bare-AUTO apps: add `automated: {enabled: true}` (matches live).
   - jarr, version-checker: add `automated: {enabled: true, prune: true,
     selfHeal: true}` (flipping MANUAL -> AUTO so Renovate merges deploy).
   - Untouched: admin-tools, authentik, cnpg-operator, root-apps (already
     have strict automated in git); monitoring, infrastructure, felhom,
     gitea, pihole, database-system (explicitly kept MANUAL per Viktor).
   NOTE: root-apps does NOT enforce syncPolicy.automated drift between git
   and live, so jarr + version-checker will also need a one-off kubectl
   patch after merge to actually become AUTO live. Done in go-live step.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 07:07:39 +02:00
admin 0f592bc626 fixed dev.jarrs.eu ingress 2026-06-02 20:03:02 +02:00
admin b6180e8d79 added US to gitea 2026-06-01 08:41:32 +02:00
admin de593cfcc3 removed wger 2026-05-30 09:17:58 +02:00
admin 88ea6c93ad Merge pull request 'Update flomp/wanderer-db Docker tag to v0.19.1' (#12) from renovate/flomp-wanderer-db-0.x into main 2026-05-27 20:21:18 +00:00
admin d53d29aed2 Merge pull request 'Update arcadiatechnology/crafty-4 Docker tag to v4.10.4' (#10) from renovate/arcadiatechnology-crafty-4-4.x into main 2026-05-27 20:20:01 +00:00
admin d609bb4f1d Merge pull request 'Update rommapp/romm Docker tag to v4.8.1' (#15) from renovate/rommapp-romm-4.x into main 2026-05-27 20:08:00 +00:00
admin a91bb0bea6 Merge pull request 'Update prom/node-exporter Docker tag to v1.11.1' (#14) from renovate/prom-node-exporter-1.x into main 2026-05-27 20:07:52 +00:00
Renovate Bot 35692f58d5 Update rommapp/romm Docker tag to v4.8.1
renovate/stability-days Updates have met minimum release age requirement
2026-05-27 20:07:52 +00:00
admin dd68411eb2 Merge pull request 'Update flomp/wanderer-web Docker tag to v0.19.1' (#13) from renovate/flomp-wanderer-web-0.x into main 2026-05-27 20:07:47 +00:00
Renovate Bot 7f9601b1f0 Update prom/node-exporter Docker tag to v1.11.1
renovate/stability-days Updates have met minimum release age requirement
2026-05-27 20:07:46 +00:00
Renovate Bot 453035b698 Update flomp/wanderer-web Docker tag to v0.19.1
renovate/stability-days Updates have met minimum release age requirement
2026-05-27 20:07:44 +00:00
Renovate Bot 00c3223eea Update flomp/wanderer-db Docker tag to v0.19.1
renovate/stability-days Updates have met minimum release age requirement
2026-05-27 20:07:40 +00:00
admin 39872513f0 Merge pull request 'Update codercom/code-server Docker tag to v4.121.0' (#11) from renovate/codercom-code-server-4.x into main 2026-05-27 20:07:40 +00:00
Renovate Bot 1416b77c0b Update codercom/code-server Docker tag to v4.121.0
renovate/stability-days Updates have met minimum release age requirement
2026-05-27 20:07:37 +00:00
admin 2d64367b46 Merge pull request 'Update advplyr/audiobookshelf Docker tag to v2.35.0' (#9) from renovate/advplyr-audiobookshelf-2.x into main 2026-05-27 20:07:35 +00:00
Renovate Bot 37c9ee1a42 Update arcadiatechnology/crafty-4 Docker tag to v4.10.4
renovate/stability-days Updates have met minimum release age requirement
2026-05-27 20:07:33 +00:00
admin 236bb2e27e Merge pull request 'Update privatebin/nginx-fpm-alpine Docker tag to v2.0.4' (#8) from renovate/privatebin-nginx-fpm-alpine-2.x into main 2026-05-27 20:07:28 +00:00
Renovate Bot 97d307878e Update advplyr/audiobookshelf Docker tag to v2.35.0
renovate/stability-days Updates have met minimum release age requirement
2026-05-27 20:07:27 +00:00
Renovate Bot 115f4f10f2 Update privatebin/nginx-fpm-alpine Docker tag to v2.0.4
renovate/stability-days Updates have met minimum release age requirement
2026-05-27 20:07:22 +00:00
admin 8edb986a54 Merge pull request 'renovate: expand to Tier 1 allowlist + 3-day stability delay' (#7) from feat/renovate-tier1-expansion into main 2026-05-27 20:01:21 +00:00
admin 454cce9691 renovate: expand to Tier 1 allowlist + 3-day stability delay
Grows the Renovate pilot from 4 apps to a 16-app Tier 1 allowlist of
low-risk leaf apps (no DBs / schema migrations). packageRules keeps the
same 4-rule shape (default-deny, enable, automerge-minor/patch,
major-dashboard-approval) with the expanded package list in all three
Tier 1 rules.

Behavior changes:
- minimumReleaseAge "3 days" on the automerge rule: Renovate won't open
  a minor/patch PR until the tag has been published upstream for 3 days
  (stability gate; chosen over branch protection, which would disable
  automerge entirely).

Image-string corrections vs. the planned list (Renovate matches the
exact image as written in the manifest; verified against the YAML):
- homepage  -> ghcr.io/gethomepage/homepage   (had no registry)
- reloader  -> ghcr.io/stakater/reloader      (had no registry)
- termix    -> ghcr.io/lukegus/termix         (had no registry)

Notes:
- registry.k8s.io/kube-state-metrics/kube-state-metrics is kept in the
  list but currently matches nothing: ksm has no image in this repo
  (only a Prometheus scrape target), so it's a harmless no-op until ksm
  is ever deployed via a manifest here.
- ghcr.io/lukegus/termix uses a non-semver tag (release-1.11.0); watch
  whether Renovate categorizes its updates as minor/patch.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 22:00:49 +02:00
admin def9faa261 Merge pull request 'Update louislam/uptime-kuma Docker tag to v2.3.2' (#5) from renovate/louislam-uptime-kuma-2.x into main 2026-05-27 19:39:56 +00:00
admin a8864c8af5 Merge pull request 'Update docker.io/calcom/cal.com Docker tag to v6.2.0' (#4) from renovate/docker.io-calcom-cal.com-6.x into main 2026-05-27 19:39:52 +00:00
Renovate Bot 3a338598ed Update louislam/uptime-kuma Docker tag to v2.3.2 2026-05-27 19:39:51 +00:00
admin 6e291fb5d5 Merge pull request 'Update ghcr.io/thomiceli/opengist Docker tag to v1.12.2' (#3) from renovate/ghcr.io-thomiceli-opengist-1.x into main 2026-05-27 19:39:37 +00:00
Renovate Bot 2518a57cf1 Update docker.io/calcom/cal.com Docker tag to v6.2.0 2026-05-27 19:39:36 +00:00
admin b0cb757703 Merge pull request 'Update f0rc3/gokapi Docker tag to v2.2.4' (#2) from renovate/f0rc3-gokapi-2.x into main 2026-05-27 19:39:32 +00:00
Renovate Bot b438eeefec Update ghcr.io/thomiceli/opengist Docker tag to v1.12.2 2026-05-27 19:39:30 +00:00
Renovate Bot d352ebc843 Update f0rc3/gokapi Docker tag to v2.2.4 2026-05-27 19:39:28 +00:00
admin c1211b6211 Merge pull request 'admin-system: Renovate Bot pilot (CronJob + config)' (#1) from feat/renovate-bot into main
Reviewed-on: #1
2026-05-27 19:29:30 +00:00
admin 05de03d1d3 admin-system: add Renovate Bot pilot (CronJob + config)
Self-hosted Renovate as a weekly CronJob (Sun 04:00 Europe/Budapest)
opening dependency-update PRs against admin/homelab-manifests on Gitea.

Pilot is deliberately narrow:
- Only the kubernetes + helm-values managers are enabled.
- Default-deny packageRule; only four images may update:
  opengist, uptime-kuma, gokapi, cal.com.
- minor/patch -> PR with Gitea native auto-merge (platformAutomerge).
- major -> held for manual approval via Dependency Dashboard checkbox.

Image pinned to renovate/renovate:43.197.0 (the plain tag is the
minimal image; the -slim suffix was retired upstream after v37.440.x).
Stateless: no Service/Ingress/PVC. Read-only root FS with a 2Gi /tmp
emptyDir for git clones + cache. Secrets from existing renovate-secrets.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 21:27:35 +02:00
admin 6d21576e00 workout-system: SparkyFitness OIDC-only auth (email login+signup off, OIDC signup on)
Admin bootstrapped via Authentik OIDC. Finalize the intended auth posture:
- Remove SPARKY_FITNESS_FORCE_EMAIL_LOGIN fail-safe (OIDC confirmed working).
- Add SPARKY_FITNESS_DISABLE_EMAIL_LOGIN=true -> email/password login + registration off.
- Keep SPARKY_FITNESS_DISABLE_SIGNUP=false so OIDC auto-register keeps working
  (the global signup gate would otherwise block OIDC self-registration too).
Net: Authentik OIDC is the only login + signup path; emergency recovery documented
inline (set FORCE_EMAIL_LOGIN=true to re-enable email login).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 16:00:27 +02:00
admin a1e73466a6 workout-system: temporarily enable signup to bootstrap SparkyFitness admin
DISABLE_SIGNUP=true blocks OIDC auto-register too (callback returns 'Signups are
currently disabled by the administrator'), so the first admin account can't be
created. Set DISABLE_SIGNUP=false just long enough for the admin to log in via
Authentik once (auto-registers + admin via SPARKY_FITNESS_ADMIN_EMAIL); will be
reverted to true right after.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 15:51:15 +02:00
admin f09e76a4b3 workout-system: fix SparkyFitness OIDC issuer slug (sparkyfitness -> sparky-fitness)
The Authentik application was created with slug 'sparky-fitness' (hyphen), so the
OIDC discovery document lives at /application/o/sparky-fitness/.well-known/...
The previous value (no hyphen) 404'd. Align the issuer URL with the actual slug.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 15:37:05 +02:00
admin 7f3c06f16c workout-system: deploy SparkyFitness v0.16.6.3, park wger, take over workout.dooplex.hu
SparkyFitness (https://github.com/CodeWithCJ/SparkyFitness) replaces wger on
workout.dooplex.hu / workout.home with native Authentik OIDC.

Components (sparkyfitness.yaml): dedicated postgres:15-alpine, server (3010,
/api/health), frontend nginx (root image, listens :80). PVCs sparkyfitness-postgres
+ sparkyfitness-uploads (Longhorn, backup labels). In-app OIDC, no forward-auth.

Deviations from the deploy spec, following upstream ground truth:
- In-container mount path for uploads is /app/SparkyFitnessServer/uploads (per the
  upstream Helm chart values.yaml), not /app/uploads.
- Frontend root image (codewithcj/sparkyfitness) has 'listen 80;' hardcoded ->
  NGINX_LISTEN_PORT=80, containerPort/Service 80.
- Image names use the docker-compose variants (codewithcj/sparkyfitness_server,
  codewithcj/sparkyfitness); the upstream Helm chart uses -server/-frontend.
- All wger Deployments scaled to 0 (incl. celery worker/beat), not just
  wger + wger-redis, so celery doesn't crashloop against the downed redis.

Secrets (outside git): sparky-oauth (client-id/client-secret, pre-existing) +
sparky-app (db + app-db creds, api-encryption-key, better-auth-secret).

wger is parked, not deleted: Deployments at 0, both Ingresses removed (ArgoCD
prune frees the hostnames); Services/ConfigMap/PVCs/CNPG DB kept for rollback.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 15:21:21 +02:00
admin ef582cc869 added authentik and postgres alerts 2026-04-18 10:07:32 +02:00
admin 9e6d0bbefe added CNPG metrics 2026-04-18 09:46:29 +02:00
admin 8ee4dbb67b updated authentik outpost scraping 2026-04-18 09:39:46 +02:00
admin 176554fc04 updated authentik scraping 2026-04-18 09:30:30 +02:00
admin 2c5da02aef monitoring: add authentik server & worker scrape jobs 2026-04-18 09:09:18 +02:00
admin 7928992e2a Tuned authentik worker 2026-04-17 21:16:18 +02:00