Commit Graph
100 Commits
Author SHA1 Message Date
jklein 87221abf29 Merge pull request #253 from jk-cluster/chore/gitea-migration-prep
Publish Helm Chart with patched Application Version / publish-helm-chart (push) Successful in 7s
Publish Gotenberg Helm Chart / Publish Gotenberg Helm Chart (push) Successful in 7s
Publish Helm Chart with patched Application Version / publish-helm-chart (push) Successful in 6s
Publish SearXNG Helm Chart / Publish SearXNG Helm Chart (push) Successful in 6s
Gitea-Umzug vorbereiten: gemessene CI-Abweichungen, Renovate im Eigenbetrieb, Issue-Migrationsskript
2026-09-17 07:47:21 +00:00
jklein fdd798e1d9 install-test: provide envsubst, and say why it is not pinned like kubectl
ci/run-install-test.sh renders ci/<chart>/fixtures.env.yaml with
envsubst. GitHub's hosted image ships gettext-base, the Gitea runner
image does not, and without it the fixtures collapse to 'error: no
objects passed to apply' - gluetun never gets its Wireguard key and
nothing behind its kill switch becomes Ready. The script is left
untouched; it does nothing wrong, a standard tool is simply absent.

Checked for rather than pinned, and the difference from kubectl is
written next to it: kubectl's version changes what the test MEANS,
because its distance to the API server is a real source of failure, so
it is pinned, tracked and guarded. envsubst substitutes text and the
release performing it does not change the result, so a pin would be
upkeep without value. Present means do nothing, which keeps the GitHub
path free of any package install; missing means fetch it, so the
difference between the two runners is stated instead of hidden behind
an unconditional apt-get.

Also rewrites the reachability comment into one block. It had grown into
two stacked halves whose first half still described the behaviour of the
version before last - both reasons (the loop against a discovery 503,
counting Ready nodes against an empty list that exits 0) now stand
together with the evidence that the second one is what made the inotify
failure visible at all.
2026-09-17 01:00:38 +02:00
jklein 417dff0f80 install-test: wait for a Ready node, not for an answer
Second defect in the same check, and the more serious one: kubectl get
nodes exits 0 on an EMPTY list. The cluster on Gitea answered while its
node had not registered, the step logged 'No resources found' and went
green, and the failure surfaced five minutes later as a pod stuck in
Pending with no node and no scheduling event - the cause nowhere near
the symptom. kubectl wait --for=condition=Ready nodes --all has the
same hole; with zero nodes it succeeds vacuously. It now counts Ready
nodes, and on timeout dumps the node conditions and the k3s server log
so the error picture is in the job that caused it.
2026-09-17 00:46:54 +02:00
jklein 4766126618 install-test: poll for the cluster instead of asking once
The reachability check added with the containerisation fix was itself
racy and went red on one of two legs of the same GitHub run: k3d's
--wait returns when the node container reports ready, but the API
server can still answer discovery with 503 for a moment after that, and
kubectl cluster-info asked exactly once. A check that produces sporadic
red is worse than no check - that is the one property #227 rules out
explicitly. It now polls kubectl get nodes, which is the thing that has
to work and exercises discovery on the way.
2026-09-17 00:38:41 +02:00
jklein 31e4260580 install-test: reach the k3d cluster when the job itself is a container
Closes the last gap from #227. k3d publishes the API server port on the
Docker HOST. On GitHub's hosted runners the job is that host, so the
https://0.0.0.0:<port> k3d writes into the kubeconfig works. Every Gitea
Actions job is itself a container, and there the host is the dind
container: 0.0.0.0 points at the job container, where nothing listens.
The cluster comes up cleanly and the first kubectl call is refused - as
measured, surfacing two steps later as a validation error on the
fixtures, which named nothing useful.

The case is decided on whether THIS job runs in a container, not on
which forge it runs on. github.server_url would pick the right branch
today and still be wrong: a self-hosted GitHub runner in a container has
the identical problem, and a condition that says GitHub while meaning
not-containerised is the kind of lie this repo exists to remove. The
detection is the same question the fix needs answered anyway - ask the
daemon about ourselves. In a container it returns our network, k3d joins
it, and Docker's DNS resolves the node names; on a host it returns
nothing and the previous path is taken unchanged.

kubectl cluster-info and get nodes now run inside the create step, so a
cluster that is up but unreachable fails where it is caused instead of
two steps downstream.
2026-09-17 00:29:08 +02:00
jklein 301fc0d4e5 install-test: one cluster per matrix leg, and a pinned kubectl
Two assumptions about the runner environment, both found by the Gitea
probe of #225 and both wrong on GitHub as well - they simply could not
show there.

CLUSTER NAME. Every leg created a cluster called "install-test". On
GitHub each matrix leg gets its own VM with its own Docker daemon, so
two legs never saw each other and the fixed name looked fine for two
years. Gitea runs all legs of a matrix CONCURRENTLY in ONE job on ONE
daemon, and there it collides immediately: one leg logs "Re-using
existing network 'k3d-install-test'", the other dies on "The container
name /k3d-install-test-server-0 is already in use", and then the first
leg's rollback deletes the shared network under the second. Two red
legs, and neither message names the cause. The cluster is now named
after the chart, in the create step and in the delete step - a blanket
cleanup would tear down the neighbour's cluster, which was the half of
the collision that turned one failure into two. ci/run-install-test.sh
never touches k3d, so nothing else had to move.

The bare chart name rather than a prefixed one, measured not assumed:
k3d v5.9.0 accepts a cluster name of 32 characters and rejects 33
("Cluster name must be <= 32 characters"), and the longest chart here is
calibre-web-automated at 21. "install-test-<chart>" would be 34 - it
would break that one chart and no other, which is worse than the fixed
name because it only sometimes breaks. A guard states the limit instead
of leaving it to be rediscovered.

KUBECTL. It was inherited from the runner image. The Gitea image has
none ("kubectl: command not found", 0 seconds into the chart install),
but that is how it was noticed, not why it is being changed: a client
version that arrives with the image drifts with every image rebuild, and
an install-test should run against a known one. GitHub's image carrying
one only makes the drift invisible there. Pinned to v1.35.5 to match the
K3S_IMAGE it talks to, tracked by Renovate the same way TRIVY_VERSION
is, and guarded against skew: kubectl supports one minor away from the
server, Renovate moves KUBECTL_VERSION on its own, and K3S_IMAGE is
tracked by nothing. Dry run proves both directions - the rule extracts
(kubernetes/kubernetes, github-releases) and it fires (from v1.34.0 the
lookup offers v1.37.0, minor). That same measurement shows the guard is
not theoretical: Renovate jumps several minors in one PR, so it will go
red on purpose, naming which pin to move.
2026-09-17 00:22:16 +02:00
jklein b9917505cd Drop the issue-migration script: a one-off job is not repo content
The migration from GitHub issues to Gitea runs exactly once, by hand over
the API. Checking a script in for it would leave permanently maintained
code behind for a task that stops existing after its single run - and
worse, it would read to every later visitor as a tool meant to be reused.
A one-off move is carried out once and is history afterwards; it is not a
part of the repository.

The one reference in CLAUDE.md is rewritten rather than deleted: that the
issue numbers do not survive the move is still true and still worth
knowing, so the bullet now says a `#n` in this repo means the GitHub
issue, and that what to do about the old references is open in #225.
2026-09-16 16:02:41 +02:00
jklein c3889a66b6 Drop the Renovate workflow: the Gitea side already has a shared instance
A measurement overtook this part of the change. A shared `jlab-renovate-bot`
instance already runs on the Gitea side and already has this repository
enrolled - its first run there opened PRs for searxng and gotenberg plus the
dependency dashboard. A second runner in this repo would produce duplicate
PRs and two schedulers rewriting each other's branches, so
.github/workflows/renovate.yml is removed again.

Two things fall out of that run, and both were open risks:

- The instance reads our renovate.json5. searxng and gotenberg are
  customManagers targets of ours - no built-in manager finds an appVersion
  in a Chart.yaml - so the config is demonstrably in effect.

- allowedCommands is already granted there. The searxng PR's diff carries
  `version: 1.0.4+up2026.9.11.ffe96f8a6 -> 1.0.5+up2026.9.13.96479fff6`
  next to the appVersion, and nothing but ci/renovate-bump-chart.sh writes
  `version:`. Had that allow-list been missing, postUpgradeTasks would have
  been skipped SILENTLY and every chart PR on Gitea would have been red on
  the version check with nothing naming the cause.

With the workflow gone there is no container image to pin either; verified
by dry run that the ghcr.io/renovatebot/renovate dependency is no longer
extracted, while TRIVY_VERSION still is - that one belongs to the Trivy
replacement and stays.

README and CLAUDE.md now say Renovate runs on Gitea as an existing shared
instance and that no workflow belongs here, so the next reader who finds
none knows why instead of building one.
2026-09-16 15:49:36 +02:00
jklein 241eda15a4 Merge pull request #252 from jk-cluster/renovate/gotenberg-gotenberg-8.x
Update gotenberg/gotenberg Docker tag to v8.37.0
2026-09-16 13:45:10 +00:00
jklein c1fddf1966 Merge pull request #254 from jk-cluster/renovate/docker.io-searxng-searxng-2026.x
Update docker.io/searxng/searxng Docker tag to v2026.9.13-3b8009065
2026-09-16 13:45:02 +00:00
jklein a6c27ebef3 Prepare the Gitea move: measured CI deviations, self-hosted Renovate, issue migration script
Groundwork for #225, built on a throwaway pull request against the Gitea
instance rather than on assumptions. The move itself is not part of this
change - no Actions are switched off, no mirror is enabled, no branch
protection is touched.

What the probe run measured, and what follows from it:

- Which jobs need a Docker socket: only the install-test. Measured per
  job - detect-changed-charts, build-chart, the quantity render and the
  Trivy config scan all pass on `ubuntu-latest`, which on that instance
  has no socket. The install-test dies there at "Create k3d cluster"
  with "Cannot connect to the Docker daemon", an error naming k3d and
  never the runner label. Its `runs-on` is now an expression: the label
  `ubuntu-docker` on Gitea, `ubuntu-latest` on GitHub, because the
  former does not exist there and a chart PR would otherwise queue
  forever during the handover. Gitea evaluates it - the probe job was
  taken by the docker runner.

- The install-test still cannot pass on Gitea. That daemon is rootless
  with "Cgroup Driver: none"; the k3s node restarts immediately with an
  empty log because k3s needs cgroup delegation. The label is necessary
  and not sufficient, and the fix is the maintainer's.

- aquasecurity/setup-trivy cannot be used on Gitea: it checks out
  aquasecurity/trivy from github.com with `github.token`, which there is
  a Gitea token, and ends on "could not read Username for
  https://github.com". Replaced by the release tarball - one request,
  same behaviour on both forges, green on the probe run.

Also in this change:

- .github/workflows/renovate.yml, Renovate in self-operation: a daily
  scheduled run in the official container, inert on github.com via a
  `github.server_url` guard. Every rule proved by dry run instead of
  assumed - the pinned Renovate image is tracked by the built-in
  github-actions manager (44.80.0 -> 44.87.1, minor), TRIVY_VERSION is
  still tracked after setup-trivy is gone (v0.72.0 -> v0.74.0, minor),
  and `ubuntu-docker` is not extracted by the github-runners manager at
  all, so nothing will quietly "correct" it.

- ci/migrate-issues-to-gitea.sh, runnable, with --dry-run, and NOT run.
  Its header names what it cannot do: comment authorship, the #<n>
  references between issues, and attachments.

- CLAUDE.md and README.md on the new flow: which forge and which tool,
  auto-merge on green checks in place of the merge queue Gitea does not
  have, and the measured differences of the two CIs.

Refs #225 - deliberately no "Fixes": the move is not finished with this.
2026-09-14 17:07:31 +02:00
jklein 055d9f6a31 Merge pull request #240 from jk-cluster/ci/exclude-charts-from-install-matrix
Publish Helm Chart with patched Application Version / publish-helm-chart (push) Failing after 6s
Publish Minecraft-Router Helm Chart / Publish Minecraft-Router Helm Chart (push) Failing after 6s
Publish Helm Chart with patched Application Version / publish-helm-chart (push) Failing after 5s
Publish Outline Helm Chart / Publish Outline Helm Chart (push) Failing after 5s
Publish Helm Chart with patched Application Version / publish-helm-chart (push) Failing after 5s
Publish Rallly Helm Chart / Publish Rallly Helm Chart (push) Failing after 5s
Publish Helm Chart with patched Application Version / publish-helm-chart (push) Failing after 5s
Publish Helm Chart with patched Application Version / publish-helm-chart (push) Failing after 5s
Publish SearXNG Helm Chart / Publish SearXNG Helm Chart (push) Failing after 5s
Publish Urlaubsverwaltung Helm Chart / Publish Urlaubsverwaltung Helm Chart (push) Failing after 5s
Publish Helm Chart with patched Application Version / publish-helm-chart (push) Successful in 6s
Publish VoucherVault Helm Chart / Publish VoucherVault Helm Chart (push) Successful in 7s
ci: ausgeschlossene Charts aus der Install-Test-Matrix filtern
2026-09-14 11:04:43 +00:00
jklein 1009738c15 Merge pull request #248 from jk-cluster/renovate/docker.io-searxng-searxng-2026.x
Update docker.io/searxng/searxng Docker tag to v2026.9.11-ffe96f8a6
2026-09-14 11:03:48 +00:00
jklein 9f8b421b64 Merge pull request #249 from jk-cluster/renovate/outlinewiki-outline-1.x
Update outlinewiki/outline Docker tag to v1.10.1
2026-09-14 11:03:30 +00:00
jklein 3def619306 Merge pull request #250 from jk-cluster/renovate/urlaubsverwaltung-urlaubsverwaltung-6.x
Update urlaubsverwaltung/urlaubsverwaltung Docker tag to v6.12.0
2026-09-14 11:03:17 +00:00
jklein b020532942 Merge pull request #251 from jk-cluster/renovate/lukevella-rallly-4.x
Update lukevella/rallly Docker tag to v4.15.0
2026-09-14 11:03:03 +00:00
jklein 49ebd4be3c Merge pull request #243 from jk-cluster/renovate/lukevella-rallly-4.x
Update lukevella/rallly Docker tag to v4.14.0
2026-09-08 21:40:47 +00:00
jklein be5ebdbe07 Merge pull request #244 from jk-cluster/renovate/itzg-mc-router-1.x
Update itzg/mc-router Docker tag to v1.46.5
2026-09-08 21:40:39 +00:00
jklein 7c31ab45c5 Merge pull request #234 from jk-cluster/renovate/urlaubsverwaltung-urlaubsverwaltung-6.x
Update urlaubsverwaltung/urlaubsverwaltung Docker tag to v6.10.0
2026-09-08 21:40:24 +00:00
jklein 63a4783d55 Merge pull request #242 from jk-cluster/renovate/outlinewiki-outline-1.x
Update outlinewiki/outline Docker tag to v1.10.0
2026-09-08 21:40:11 +00:00
jklein 2b7c24be09 Merge pull request #236 from jk-cluster/renovate/docker.io-searxng-searxng-2026.x
Update docker.io/searxng/searxng Docker tag to v2026.9.6-8b01679e8
2026-09-08 21:34:05 +00:00
jklein 024e4e9de1 Merge pull request #235 from jk-cluster/renovate/l4rm4nd-vouchervault-1.x
Update l4rm4nd/vouchervault Docker tag to v1.30.2
2026-09-08 21:32:27 +00:00
jklein 5a4eeefd0e docs: the excluded-chart signal, and minecraft-server's image-tag exception
Two documentation gaps, both about a reader drawing the wrong conclusion.

The install-test section said nothing about what an exclusion looks like in a PR's check list. It now says that an excluded chart gets no job at all rather than a green tick, that the detect job names it with its documented reason in the summary, that the mandatory justification is what makes a line an exclusion in the first place, and why the per-chart "if" that would produce a visible Skipped is not available (#231).

Section 3 of the style guidelines lists the charts that deviate from "the main image tag comes from appVersion" so that nobody mistakes a deviation for a mistake and tidies it away. minecraft-server has been the only chart with an overridable tag since #158 and was missing from that list: the line says that image.tagOverride exists, why (only the newest Java line is maintained, so the line becomes a decision at rollout time instead of a property of the chart), and that the chart checks the pairing of effective tag and minecraft.version itself and fails the render on a mismatch (#232).
2026-09-04 16:58:22 +02:00
jklein 622e4c3ff8 ci: drop excluded charts from the install-test matrix
A chart in ci/excluded-charts.txt got an install-test job that ran the script, printed SKIP and exited 0. GitHub knows only the exit code, so the check list showed "Install-test satisfactory OK" for a chart whose image was never pulled - indistinguishable from one that really came up in the cluster (#231). detect-changed-charts now removes those charts before the matrix is built, so no job exists for them and nothing claims they passed.

An absence says nothing by itself, so the detect job writes every excluded chart of the PR with its documented justification into the job summary. A "Skipped" would only say "not run"; the reason is the question a review actually asks.

The list is not parsed in YAML. The workflow calls ci/run-install-test.sh --list-excluded, the one parser, and compares whole strings with jq, so a chart name is never read as a pattern. The script's own exclusion branch now goes through the same excluded_reason() helper instead of a grep that used the chart name as a regex; it stays for local runs, where the CI filter does not apply.

Not viable, and recorded at the matrix as a comment: deciding per chart in an "if" on the install-test job, which would give a visible Skipped entry instead of an absent one. GitHub rejects it - jobs.<id>.if is evaluated before the matrix is expanded, so the matrix context does not exist there ("context \"matrix\" is not allowed here. available contexts are \"github\", \"inputs\", \"needs\", \"vars\"."). Run 33650724109 on the closed PR #233 ended in failure with zero jobs created.
2026-09-04 16:58:14 +02:00
jklein 7e168da492 ci: parse the exclusion list in exactly one place
Two consumers read ci/excluded-charts.txt: this script and the install-test matrix in validate-charts.yml, which has to drop excluded charts before the matrix is built (#231). Two parsers would be two chances to select different charts, and the disagreement would be silent in either direction. So the script grows a --list-excluded mode and the workflow will call it instead of re-implementing the parsing.

A line carrying only a chart name and no justification is deliberately not an exclusion: the README requires the reason, and a bare name would drop a chart out of CI with nothing to review. The reason lookup matches the name exactly instead of as a regex, so a chart name is never read as a pattern.

The workflow side is not part of this commit.
2026-09-04 16:52:08 +02:00
jklein f49bfa4af8 Merge pull request #229 from jk-cluster/feat/minecraft-server-tag-override
Publish Helm Chart with patched Application Version / publish-helm-chart (push) Failing after 12s
Publish Minecraft-Server Helm Chart / Publish Minecraft-Server Helm Chart (push) Failing after 13s
Publish Helm Chart with patched Application Version / publish-helm-chart (push) Failing after 4s
Publish Satisfactory Helm Chart / Publish Satisfactory Helm Chart (push) Failing after 5s
Publish Helm Chart with patched Application Version / publish-helm-chart (push) Failing after 4s
Publish Urlaubsverwaltung Helm Chart / Publish Urlaubsverwaltung Helm Chart (push) Failing after 4s
minecraft-server: an overridable image tag and a Java-line guard (5.0.0+up2026.8.2.java25)
2026-09-02 12:08:07 +00:00
jklein 9c0039685b minecraft-server: an overridable image tag and a Java-line guard (5.0.0+up2026.8.2.java25)
Only the newest Java line is maintained from now on. Publishing the chart once
per line out of one directory is what made the lines drift apart (#158): a
change reached whichever line happened to lie in the directory. java8 and java17
stay published as frozen artifacts at 4.0.0, java21 at 4.1.0, and none of them
gets another chart change.

Running an older JVM is now a decision at rollout time instead of a chart
version: image.tagOverride replaces the tag that otherwise comes from
appVersion. It is not called image.tag because it decouples the running image
from the chart version, and it is deliberately outside Renovate's reach -
renovate.json5 keeps tracking appVersion only.

The pairing of tag and minecraft.version is now checked at render time and fails
with both values named, the line each one belongs to, and where the tag came
from. Until now nothing checked it: a mismatch installed silently and only the
container failed afterwards. The boundaries are Mojang's, swept over all 102
releases of the piston-meta manifest (javaVersion.majorVersion): up to 1.16.5
Java 8, 1.17-1.17.1 Java 16, 1.18-1.20.4 Java 17, 1.20.5-1.21.11 Java 21, 26.1
and later Java 25. The 1.17 line was the one gap the chart's own notes did not
cover.

Two cases pass unchecked on purpose, documented in values.yaml and NOTES.txt: a
tag without a recognizable java<N> part, and a minecraft.version that is not a
plain numeric x[.y[.z]]. A guard that rejects what it does not understand gets
worked around instead of respected.

Major, because an installation that already runs a mismatched pair stops
rendering. It does not run today either - it now fails earlier and visibly.
2026-09-02 13:56:25 +02:00
jklein 63662c8ea8 Merge pull request #228 from jk-cluster/fix/satisfactory-seasonal-events
satisfactory: game.enableSeasonalEvents says what it does (7.0.0+upv1.9.10)
2026-09-02 11:53:53 +00:00
jklein 485f4fa52b satisfactory: game.enableSeasonalEvents says what it does (7.0.0+upv1.9.10)
game.seasonalEvents was handed to the container unchanged, into the image's
DISABLESEASONALEVENTS. Its default true therefore wrote
DISABLESEASONALEVENTS=true: the seasonal events were OFF in every install
this chart has ever produced, while values.schema.json described the very
same key as "true means events are enabled" (#215).

Of the two ways out, this is the loud one. Inverting the template under the
old key would have flipped the behaviour of every existing release in
silence - the same class of mistake that created the issue. Renaming the key
cannot be missed: game.seasonalEvents no longer exists, additionalProperties
is false on the game block, and a values file that still carries it fails
schema validation on upgrade instead of quietly meaning the opposite.

The new key is positive (enableSeasonalEvents) to avoid a double negative,
so the chart negates it on the way into the env var. Go's "not" cannot do
that: it reads every non-empty string as true, and the schema deliberately
accepts the string form of booleans, so "false" would have flipped the wrong
way. The helper compares explicitly and fails on anything that is neither
true nor false rather than filing it under "off".

The default is enableSeasonalEvents: false, which renders the
DISABLESEASONALEVENTS this chart has always rendered. At chart defaults the
6.1.0 and 7.0.0 manifests are identical, so upgrading alone moves no server;
switching the events on is now a deliberate act with a key that means it.

Separate finding from the same issue, fixed here because it lives in the
block being touched: "--set game=null" - or a leftover "game:" whose
sub-keys were deleted - aborted the render with a nil pointer at
.Values.game.maxPlayers. The game block never got the null-safe treatment of
#99 that probes, security contexts and resources have. It now falls back to
the documented defaults, and the schema accepts the null accordingly. The
same gap remains in the dev and server blocks; it is reported, not fixed
here.

Major bump: a values key is removed, and the schema rejects it.
2026-09-02 13:42:39 +02:00
jklein b1709e6336 Merge pull request #226 from jk-cluster/fix/urlaubsverwaltung-health-probes
urlaubsverwaltung: readiness must see the database, health must not lie (9.0.0+up6.7.0)
2026-09-02 11:28:16 +00:00
jklein f761767630 urlaubsverwaltung: correct the env-collision claim, answer the recovery question
The chart told operators that adding a duplicate env name to an installed
release makes the next upgrade fail in the API server, quoting "The order in
patch list ... doesn't match $setElementOrder list". Measured against helm
3.19.0 and Kubernetes 1.35, it does not fail: the upgrade succeeds, helm prints
"Release has been upgraded", and Kubernetes merges the env list by name, so the
duplicate pair collapses to the chart's own entry and the operator's override is
discarded without a word. At install time the same values behave differently -
both entries reach the pod, the later one wins, and the API server says so with
"hides previous definition of ..., which may be dropped when using apply".

The advice that followed from the old claim survives - such a switch only takes
at install time - but the stated reason was wrong in the dangerous direction. A
reader who expects a loud failure treats a green upgrade as proof the override
took effect, and green is exactly what a silently dropped override looks like.
The text now names the real failure mode and tells the reader to read the value
back off the Deployment. README carries the same correction, because every chart
in this repo offers the same additive env block.

Also records what the earlier measurement left open. With the database scaled
back up the pod returns to Ready on its own after about five seconds, restart
count still 0, so leaving the liveness group untouched costs no manual recovery.
And the limit of that signal belongs next to it: the db indicator validates a
connection, not the schema, so a database that came back empty still put the pod
back to Ready with /actuator/health at 200.
2026-09-02 13:22:58 +02:00
jklein f8acdfdfe1 urlaubsverwaltung: readiness must see the database, health must not lie (9.0.0+up6.7.0)
MANAGEMENT_ENDPOINT_HEALTH_GROUP_READINESS_INCLUDE=readinessState,db puts the datasource into Spring Boot's readiness group, which shipped with readinessState alone: a total database outage left the pod 1/1 Ready while every request failed. Naming the members replaces the default, so readinessState is repeated. The liveness group stays untouched on purpose, because an outage has to keep traffic away rather than add a crash loop to it.

MANAGEMENT_HEALTH_MAIL_ENABLED=false removes the mail indicator, which pinned the aggregate /actuator/health at 503 for the whole life of a healthy release, because the chart's mail wiring points at localhost:1025 where nothing listens. values.yaml and NOTES.txt document what that costs and when it has to be switched back on.
2026-09-02 13:01:54 +02:00
jklein 757e4bea6f Merge pull request #224 from jk-cluster/ci/gitea-helm-registry
ci: Charts per HTTP-POST in die klassische Helm-Registry veröffentlichen
2026-09-01 16:19:28 +00:00
jklein 487eb11b44 Merge pull request #220 from jk-cluster/renovate/docker.io-searxng-searxng-2026.x
Update docker.io/searxng/searxng Docker tag to v2026.8.29-d226b78bc
2026-09-01 15:34:44 +00:00
jklein d18d5710b5 Merge pull request #223 from jk-cluster/feat/minecraft-server-java25
minecraft-server: auf die java25-Linie (4.1.0+up2026.8.2.java25)
2026-09-01 15:34:23 +00:00
jklein a86eda2bbf Merge pull request #219 from jk-cluster/feat/ytdlp-web-player-chart
ytdlp-web-player: neuer Chart mit optionalem oauth2-proxy als Unterchart (1.0.0+upv1.2.0)
2026-08-30 15:59:09 +00:00
jklein 3e1088410e Merge pull request #208 from jk-cluster/renovate/docker.io-linuxserver-bazarr-1.x
Update docker.io/linuxserver/bazarr Docker tag to v1.6.0
2026-08-30 01:21:23 +00:00
jklein 56b9ce032e Merge pull request #209 from jk-cluster/renovate/docker.io-linuxserver-prowlarr-2.x
Update docker.io/linuxserver/prowlarr Docker tag to v2.5.2
2026-08-30 01:18:37 +00:00
jklein 4bc508db61 Merge pull request #206 from jk-cluster/renovate/docker.io-linuxserver-sonarr-4.x
Update docker.io/linuxserver/sonarr Docker tag to v4.0.19
2026-08-30 01:16:20 +00:00
jklein 3407890335 Merge pull request #210 from jk-cluster/renovate/docker.io-linuxserver-radarr-6.x
Update docker.io/linuxserver/radarr Docker tag to v6.3.0
2026-08-30 01:15:18 +00:00
jklein 746e44b365 Merge pull request #212 from jk-cluster/renovate/ghcr.io-recyclarr-recyclarr-8.x
Update ghcr.io/recyclarr/recyclarr Docker tag to v8.7.1
2026-08-30 01:14:39 +00:00
jklein 972a572460 Merge pull request #213 from jk-cluster/renovate/ghcr.io-seerr-team-seerr-3.x
Update ghcr.io/seerr-team/seerr Docker tag to v3.4.1
2026-08-30 01:14:13 +00:00
jklein a46734043b Merge pull request #211 from jk-cluster/renovate/ghcr.io-paperless-ngx-paperless-ngx-3.x
Update ghcr.io/paperless-ngx/paperless-ngx Docker tag to v3.1.0
2026-08-30 00:44:50 +00:00
jklein a4ef64637f Merge pull request #205 from jk-cluster/renovate/docker.io-linuxserver-qbittorrent-5.x
Update docker.io/linuxserver/qbittorrent Docker tag to v5.2.3
2026-08-30 00:44:25 +00:00
jklein 31d1c34250 Merge pull request #207 from jk-cluster/renovate/ghcr.io-alam00000-bentopdf-simple-2.x
Update ghcr.io/alam00000/bentopdf-simple Docker tag to v2.8.8
2026-08-30 00:07:47 +00:00
jklein 1ac4165c1c Merge pull request #176 from jk-cluster/renovate/lukevella-rallly-4.x
Update lukevella/rallly Docker tag to v4.13.1
2026-08-28 23:36:00 +00:00
jklein cf730affe4 Merge pull request #175 from jk-cluster/feat/bentopdf-chart
bentopdf: neuer Helm-Chart für den PDF-Werkzeugkasten (1.0.0+up2.8.7)
2026-08-28 16:40:26 +00:00
jklein 2b3ab7f8b7 Merge pull request #172 from jk-cluster/renovate/lukevella-rallly-4.x
Update lukevella/rallly Docker tag to v4.13.0
2026-08-28 16:38:00 +00:00
jklein ce5f654a8a Merge pull request #173 from jk-cluster/feat/searxng-chart
searxng: neues Chart (1.0.0+up2026.8.22.9fea41204)
2026-08-27 19:34:58 +00:00
jklein 71f5d2d450 Merge pull request #170 from jk-cluster/ci/freesailarr-install-test
ci: freesailarr wirklich installieren statt überspringen (Wireguard-Zugang aus 1Password)
2026-08-26 12:56:00 +00:00
jklein 5280554329 Merge pull request #168 from jk-cluster/feat/freesailarr-shared-domain-subpaths
freesailarr: gemeinsame Domain mit Unterpfaden und qBittorrent-Speicherpfad (3.0.0+up1.0.0)
2026-08-25 19:45:50 +00:00
jklein b2d74ca5fb Merge pull request #165 from jk-cluster/fix/freesailarr-shared-media-claim
freesailarr: one volume entry per media claim (2.0.2+up1.0.0)
2026-08-24 19:08:00 +00:00
jklein 6c3b6214ac Merge pull request #163 from jk-cluster/feat/minecraft-server-restore-java21
minecraft-server: Verzeichnis auf java21 zurückstellen (4.0.1+up2026.8.2.java21)
2026-08-24 15:30:00 +00:00
jklein 2b22ce5538 Merge pull request #162 from jk-cluster/feat/minecraft-server-java17-line
minecraft-server: java17-Linie nachziehen (4.0.0+up2026.8.2.java17)
2026-08-24 15:23:38 +00:00
jklein f7047b80f0 Merge pull request #159 from jk-cluster/feat/minecraft-server-java8-line
minecraft-server: java8-Linie nachziehen (4.0.0+up2026.8.2.java8)
2026-08-24 15:16:38 +00:00
jklein 86a6504159 Merge pull request #156 from jk-cluster/fix/minecraft-server-null-safe-hardening
minecraft-server: Null-Absicherung für Härtung, Probes und Resources
2026-08-24 15:07:08 +00:00
jklein 667cb55038 Merge pull request #151 from jk-cluster/renovate/docker.io-qmcgaw-gluetun-3.x
Update docker.io/qmcgaw/gluetun Docker tag to v3.41.3
2026-08-24 14:36:28 +00:00
jklein 14d22fcfe7 Merge pull request #155 from jk-cluster/feat/freesailarr-retrofit
freesailarr: Schema, Null-Absicherung, seccompProfile und NOTES.txt
2026-08-24 14:33:54 +00:00
jklein 5300d7628c Merge pull request #154 from jk-cluster/fix/renovate-qbittorrent-legacy-tags
renovate: Schranke gegen die zwei Alt-Tags von qbittorrent
2026-08-24 13:51:23 +00:00
jklein 9c81061f92 Merge pull request #59 from jk-cluster/feat/freesailarr-chart
Add freesailarr chart: gluetun-tunneled media automation stack
2026-08-24 13:38:58 +00:00
jklein 047c5070a0 Merge pull request #150 from jk-cluster/fix/publish-registry-login-hardening
publish: Zugangsdaten aus Step-Outputs lesen und prüfen
2026-08-24 12:06:45 +00:00
jklein 1bf381e4cb Merge pull request #149 from jk-cluster/fix/1Password-action
fix(publish-action): fixed 1Password secret access
2026-08-24 11:48:18 +00:00
jklein 178d4e9a6a Merge pull request #148 from jk-cluster/feat/seccomp-runtime-default-batch1
Acht Charts: seccompProfile RuntimeDefault im Pod-Context und qualifizierte Images
2026-08-24 11:31:33 +00:00
jklein d85ff72dad Merge pull request #147 from jk-cluster/feat/renovate-nginx-84-wording
renovate: name the nginx alpine check in #84 accurately
2026-08-24 10:52:35 +00:00
jklein 640c6e5726 Merge pull request #138 from jk-cluster/renovate/alpine-3.x
Update alpine Docker tag to v3.24
2026-08-24 10:52:12 +00:00
jklein 077030e61f Merge pull request #146 from jk-cluster/feat/renovate-nginx-stable-only
renovate: keep the delegation nginx on stable branches
2026-08-24 10:15:19 +00:00
jklein 372b5f691c Merge pull request #145 from jk-cluster/feat/renovate-automerge-minor
renovate: automerge minor updates, make the install-test blocking
2026-08-24 10:03:47 +00:00
jklein 35db2affea Merge pull request #143 from jk-cluster/feat/renovate-config
renovate: chart-aware config with an automatic version bump
2026-08-24 09:47:54 +00:00
jklein e730a81b17 Merge pull request #140 from jk-cluster/renovate/1password-load-secrets-action-5.x
Update 1password/load-secrets-action action to v5
2026-08-24 09:20:12 +00:00
jklein a176c7576c Merge pull request #142 from jk-cluster/renovate/azure-setup-helm-5.x
Update azure/setup-helm action to v5
2026-08-24 09:20:01 +00:00
jklein d010380701 Merge pull request #141 from jk-cluster/renovate/actions-checkout-7.x
Update actions/checkout action to v7
2026-08-24 09:19:52 +00:00
jklein 283c044fad Merge pull request #136 from jk-cluster/renovate/configure
Configure Renovate
2026-08-23 22:04:55 +00:00
jklein 942a1ce0b1 Merge pull request #137 from jk-cluster/feat/rss-bridge-2025-08-05
rss-bridge: app update 2025-06-03 -> 2025-08-05
2026-08-23 22:03:54 +00:00
jklein ed3bc2a48a Merge pull request #132 from jk-cluster/feat/rss-bridge-chart
rss-bridge: new chart
2026-08-23 21:42:31 +00:00
jklein 9259482b87 Merge pull request #134 from jk-cluster/feat/rallly-seccomp-runtimedefault
rallly: seccompProfile RuntimeDefault in the pod context
2026-08-23 21:40:11 +00:00
jklein 06a5a7d517 Merge pull request #133 from jk-cluster/feat/template-chart-hardening-fixes
template-chart: seccomp profile, unprivileged port, and placeholder fixes
2026-08-23 21:31:53 +00:00
jklein dd9d91442a Merge pull request #129 from jk-cluster/feat/trivy-config-ci
CI: report Trivy misconfiguration findings for changed charts
2026-08-23 21:17:52 +00:00
jklein e74c25b011 Merge pull request #131 from jk-cluster/feat/apache-tika-seccomp-runtimedefault
apache-tika: seccompProfile RuntimeDefault in the pod context
2026-08-23 21:17:18 +00:00
jklein 1d73beff4c Merge pull request #130 from jk-cluster/feat/gotenberg-seccomp-runtimedefault
gotenberg: seccompProfile RuntimeDefault in the pod context
2026-08-23 21:11:07 +00:00
jklein a039b873c9 Merge pull request #127 from jk-cluster/feat/cyberchef-seccomp-runtimedefault
cyberchef: seccompProfile RuntimeDefault in the pod context
2026-08-23 21:06:07 +00:00
jklein 69202d5e13 Merge pull request #126 from jk-cluster/feat/gotenberg-decoupled-limits
gotenberg: small requests, explicit higher limits
2026-08-23 20:47:51 +00:00
jklein 61bdc9de90 Merge pull request #125 from jk-cluster/feat/template-chart-schema-guidelines
template-chart + README: values.schema.json, Ingress-Gate und Null-Absicherung als Referenz (Abschluss #68/#93/#99)
2026-08-23 20:37:01 +00:00
jklein c2f12bec70 Merge pull request #124 from jk-cluster/fix/rallly-smtp-reject-unauthorized
rallly: default smtp.rejectUnauthorized to true
2026-08-23 20:31:41 +00:00
jklein d6de6de263 Merge pull request #123 from jk-cluster/feat/patchmon-notes-txt
Add NOTES.txt to the patchmon chart
2026-08-23 20:15:45 +00:00
jklein 5186d711a5 Merge pull request #122 from jk-cluster/feat/values-schema-matrix
matrix-synapse: strict values.schema.json + Ingress-Gate + Null-Absicherung (Welle 3, #68/#93/#99)
2026-08-23 20:15:43 +00:00
jklein 09fddb15f5 Merge pull request #120 from jk-cluster/fix/samba-remove-globalconfig
samba: remove the unimplemented globalConfig value
2026-08-23 20:05:04 +00:00
jklein b33f5cd8b3 Merge pull request #121 from jk-cluster/feat/values-schema-paperless
paperless-ngx: strict values.schema.json + Null-Absicherung (Welle 3, #68/#99)
2026-08-23 20:05:02 +00:00
jklein 1ef8c7d42e Merge pull request #119 from jk-cluster/feat/values-schema-mcrouter
minecraft-router: strict values.schema.json + Null-Absicherung (Welle 2, #68/#99)
2026-08-23 19:51:27 +00:00
jklein dbabd00676 Merge pull request #118 from jk-cluster/feat/values-schema-homeassistant
homeassistant: strict values.schema.json + Null-Absicherung (Welle 2, #68/#99)
2026-08-23 19:47:48 +00:00
jklein f0faf8c222 Merge pull request #116 from jk-cluster/feat/values-schema-samba
samba: strict values.schema.json + Null-Absicherung (Welle 2, #68/#99)
2026-08-23 19:42:30 +00:00
jklein 1b8087d77c Merge pull request #115 from jk-cluster/feat/values-schema-calibre
calibre-web-automated: strict values.schema.json + Ingress-Gate + Null-Absicherung (Welle 2, #68/#93/#99)
2026-08-23 19:37:24 +00:00
jklein 4e63e8c164 Merge pull request #114 from jk-cluster/feat/values-schema-satisfactory
satisfactory: strict values.schema.json + Null-Absicherung (Welle 2, #68/#99)
2026-08-23 19:31:07 +00:00
jklein 5b3524a354 Merge pull request #113 from jk-cluster/feat/values-schema-teamspeak
teamspeak-server: strict values.schema.json + Null-Absicherung (Welle 2, #68/#99)
2026-08-23 19:26:03 +00:00
jklein 24fb0d2d2b Merge pull request #112 from jk-cluster/feat/values-schema-outline
outline: strict values.schema.json + Null-Absicherung (Welle 2, #68/#99)
2026-08-23 19:21:58 +00:00
jklein 81549d6aab Merge pull request #111 from jk-cluster/feat/values-schema-voucher-vault
voucher-vault: strict values.schema.json + Null-Absicherung (Welle 2, #68/#99)
2026-08-23 19:17:14 +00:00
jklein e22e1235e6 Merge pull request #110 from jk-cluster/feat/values-schema-zipline
zipline: strict values.schema.json + Ingress-Gate + Null-Absicherung (Welle 2, #68/#93/#99)
2026-08-23 19:10:12 +00:00
jklein 4f5870db20 Merge pull request #108 from jk-cluster/feat/values-schema-rallly
rallly: strict values.schema.json + Ingress-Gate + Null-Absicherung (Welle 2, #68/#93/#99)
2026-08-23 19:02:37 +00:00
jklein a9992d356d Merge pull request #107 from jk-cluster/feat/apache-tika-notes-txt
Add NOTES.txt to the apache-tika chart
2026-08-23 18:52:48 +00:00
jklein 4b10870d59 Merge pull request #103 from jk-cluster/feat/gotenberg-null-safety
gotenberg: Null-Absicherung + Schema-Typen (Nachrüstung Welle 1, #99/#68)
2026-08-23 18:40:08 +00:00
jklein 392fc6c36a Merge pull request #105 from jk-cluster/feat/apache-tika-null-safety
apache-tika: Null-Absicherung + Schema-Typen (Nachrüstung Welle 1, #99/#68)
2026-08-23 18:38:48 +00:00