Group 3 of the #114 sweep. One route, one rule, at the root - and THREE EXPECTATIONS ABOUT THIS CHART DID NOT SURVIVE CONTACT WITH IT: - #114 says bulwark has TWO Ingress objects. It has ONE. keycloak has two. - #114's measured table lists bulwark under rewrite-target. It has no rewrite-target annotation and CANNOT have one: NEXT_PUBLIC_BASE_PATH is compiled into the bundle, so the application cannot be served under a sub-path, and stripping a prefix at the proxy would yield a page that loads and then fetches everything from the wrong place. Every occurrence of the string "rewrite-target" in this chart - values.yaml, the schema, the Ingress template - is an explanation of exactly that. A grep for the string finds the refutations and counts them as occurrences. - ci/run-httproute-match-test.sh said in its header that bulwark was the second rewrite-target chart and would meet the #118 prefix/redirect assurance when group 3 landed. Group 3 landed and it does not: with no URLRewrite on a prefix other than "/", the assurance's precondition is never met here. The header is corrected rather than left standing, and it now says freesailarr is the only chart the pairing applies to. So no redirect rule is added, and none is needed. WHAT THIS MODE DROPS, MEASURED ON THE LIVE OBJECT rather than inferred. On 2026-10-12 the live Ingress on webmail.bekemeyer-klein.de carried nginx.ingress.kubernetes.io/proxy-body-size: 25m supplied by the OPERATOR through ingress.annotations - values.yaml recommends exactly that value and explains why the chart cannot pick it, so the chart sets nothing and a reader of this repository alone would not find it. It is the single annotation this installation depends on, and the Gateway API has no body-size counterpart: implementation policy, not routing. Per decisions 1 and 2 of #114 it is NAMED, not rebuilt - in values.yaml, in the schema and in the Gateway branch of NOTES.txt, in this application's own terms: an attachment above the Gateway's default is rejected before Bulwark sees a byte, the 413 comes from the proxy, and it arrives after the user has written the mail and attached the file. CORRECTED CLAIM, the same one garage and calibre-web-automated needed: the Ingress template, the bulwark.publicUrl helper and the schema all stated that nothing outside the Ingress template FUNCTIONALLY reads ingress.domain. The HTTPRoute reads it, so the claim held only while both modes were off. All three now say so, and the route carries a required() of its own. bulwark.publicUrl follows the ACTIVE mode instead of always printing ingress.domain. The two differ exactly when httpRoute.hostnames is set, which is how a migration off the Ingress runs - and printing the old host there would hand the operator an OIDC redirect URI for the hostname being migrated away from, a failure that surfaces as a rejected login at the identity provider and says nothing about this chart. Minor: additive, defaults unchanged. Empty helm template diff against origin/main with ci/bulwark/test-values.yaml. Part of #114
37 lines
1.8 KiB
YAML
37 lines
1.8 KiB
YAML
apiVersion: v2
|
|
name: bulwark
|
|
description: A Helm chart to deploy Bulwark Webmail, a JMAP webmail client (mail, calendar, contacts, files) for a Stalwart mail server
|
|
icon: https://avatars.githubusercontent.com/u/266882946
|
|
|
|
type: application
|
|
|
|
# appVersion is the exact image tag of ghcr.io/bulwarkmail/webmail.
|
|
#
|
|
# THE SUFFIX-FREE FORM, AND THAT IS A CHOICE RATHER THAN THE ONLY OPTION. This
|
|
# registry publishes every release TWICE - 1.12.0 and v1.12.0 are the same image
|
|
# under two names (counted 2026-10-05 against the ghcr.io tags API: 315 tags, and
|
|
# both families run the whole way back to 1.3.9). So unlike stalwart, garage,
|
|
# matrix-synapse and calibre-web-automated, where the "v" IS the tag and
|
|
# therefore part of appVersion and of the "+up" suffix, here it is optional and
|
|
# this chart pins the form without it. Do not "normalize" it to v1.12.0 later:
|
|
# that would rewrite appVersion and the chart version for an identical image.
|
|
#
|
|
# The tag census, Renovate's handling of each shape and the three dry-run
|
|
# fixtures that prove it are in renovate.json5's bulwark block rather than
|
|
# duplicated here. The short version: eight tag shapes, six of them things
|
|
# nobody should pin, and plain `docker` versioning excludes all six - so that
|
|
# block deliberately carries NO versioningTemplate.
|
|
version: 1.1.0+up1.12.0
|
|
appVersion: "1.12.0"
|
|
|
|
maintainers:
|
|
- name: jklein
|
|
|
|
# NO DEPENDENCIES, and nothing here wants one. Bulwark is a client: it holds no
|
|
# mail, has no database, no cache and no broker. The mail server it talks to is
|
|
# the `stalwart` chart (Gitea #65), a SEPARATE RELEASE reached over the network
|
|
# by the URL in bulwark.jmapServerUrl - not a subchart, because the two are
|
|
# installed, scaled, upgraded and backed up independently and a JMAP endpoint is
|
|
# an address rather than a bundled component. README, "Chart dependencies", for
|
|
# the bar a dependency has to clear.
|