# CI values for the garage install-test. # # WHY THIS CHART IS TESTED RATHER THAN EXCLUDED, and what the test is worth: # with garage.singleNode (the chart default) the server creates its own cluster # layout before it opens any listener, so the pod reaches Ready without an # operator. That is what makes an install-test possible here at all - without # the flag the readiness probe would honestly never go green (no layout, no # quorum, /health answers 503) and a green run would have required a probe that # lies. # # WHAT A GREEN RUN PROVES - the four measurement points the plan for Gitea #81 # left open, three of which this closes on every PR: # # 1. Garage accepts metadata_dir and data_dir as two SUBDIRECTORIES OF ONE # PVC and creates them itself. The image is FROM scratch and has no mkdir, # so if the assumption were wrong the pod could not start at all. # 2. readOnlyRootFilesystem: true holds with no emptyDir anywhere - the # container writes only into the two volumes. # 3. The layout is really applied in-process and the admin API answers 200 on # /health afterwards: Ready is exactly that HTTP 200, so the rollout # status IS the assertion. # Plus the mechanical half: the Secret key names match what the StatefulSet # references, the rendered garage.toml PARSES AS GARAGE READS IT (it opens # LMDB, validates replication_factor against --single-node and refuses # malformed keys), the access key and the bucket are imported from the vault # fields, the resource quantities are valid, and the schema accepts a # realistic non-default values file. # # WHAT IT DOES NOT PROVE, and no install-test here could: # - that the metadata auto-snapshot really lands in metadata_snapshots_dir. # The first snapshot is taken after interval/2, and the shortest interval # that is not absurd is still minutes - longer than the run. A snapshot # interval of seconds would test the timer, not the thing. # - anything about Longhorn: the snapshot semantics the chart's whole storage # layout is built on are a property of the storage layer, and the runner # has local-path. # - durability. metadata_fsync is set, and whether an fsync survives a power # cut is not observable in a container. secrets: # Materialized by ci/garage/fixtures.yaml as ci-garage-rpc-secret and # ci-garage-s3-secret (the OnePasswordItem stub CRD comes from ci/common/). rpcSecretRef: op://ci/garage-rpc s3SecretRef: op://ci/garage-s3 garage: # Both ON, i.e. the chart's defaults, and they are the reason the run means # something: the key and the bucket are imported FROM the fixture Secret, so # a wrong field name or a malformed value fails the start rather than passing # unnoticed. singleNode: true defaultAccessKey: true defaultBucket: true # ON against the chart's default of off, together with a root domain. It # renders a second listener, a second containerPort, a Service port and the # [s3_web] section of garage.toml - all of which Garage has to accept, and # none of which the default install exercises. web: enabled: true rootDomain: ".web.garage.ci.example.com" s3: region: garage-ci rootDomain: ".s3.garage.ci.example.com" # Shortened from the chart's "6h" so the snapshot WORKER is created and # scheduled during the run. It still does not take a snapshot - the first one # is due after interval/2, i.e. 15 minutes here - and that gap is named above # rather than papered over with a one-second interval that would only prove # the timer fires. metadataAutoSnapshotInterval: "30m" resources: # Small, to stay inside the runner's budget, while still exercising the # limit derivation: 256Mi x limitFactor 3 = 768Mi. requests: cpu: 100m memory: 256Mi ephemeral-storage: 32Mi storage: data: amount: 512Mi # k3d's dynamic provisioner. The intended production value, # longhorn-encrypted-ns, does not exist on the runner - and a pre-bound # hostPath PV would be worse than this one, because the kubelet does not # apply fsGroup to a hostPath volume at all, so the test would silently # stop exercising the ownership path that matters for a volume the # container did not create. storageClass: local-path snapshots: amount: 256Mi storageClass: local-path ingress: # Left ON although no ingress controller answers in CI: the point is that the # object is accepted and that the Service port it names by NAME ("s3") # actually exists - a typo there is otherwise invisible until someone opens # the URL. enabled: true domain: garage.ci.example.com clusterIssuer: ci-selfsigned