Files
truecharts/charts
Brioche 90b8975464 feat(affine) add new chart (#48656)
**Description**

⚒️ Fixes  #

**⚙️ Type of change**

- [x] ⚙️ Feature/App addition
- [ ] 🪛 Bugfix
- [ ] ⚠️ Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] 🔃 Refactor of current code
- [ ] 📜 Documentation Changes

**🧪 How Has This Been Tested?**

Installed on a personal Talos/k8s cluster (k8s 1.33) with the local
chart path:
- `helm dependency update` and `helm lint` pass
- CNPG operator installed via the `cloudnative-pg` upstream chart
- `helm install` with single-node CNPG (`cluster.instances: 1`,
`cluster.singleNode: true`) and a generated `cnpg.main.password`
- Verified:
- migration init-container (`affine-install-affine-migration`) runs
`node ./scripts/self-host-predeploy.js` to completion
- CNPG `Cluster` reaches `Ready`, the `vectors` extension is enabled
(`SELECT extname FROM pg_extension;` lists `vectors`)
  - main `affine` pod reaches `Ready`, TCP probes on port 3010 succeed
- external HTTPS access works through nginx-ingress + cert-manager
(`affine.domain.com` returns the AFFiNE web UI)
- PVCs `affine-config` and `affine-storage` are bound and mounted on
both the main and init containers
- `affine-server-external-url` is correctly built as `<scheme>://<host>`
when `affine.serverHost` is set

The chart is published as OCI; no test cluster is required to pull
dependencies.

**📃 Notes:**

- New chart for **AFFiNE** (https://github.com/toeverything/AFFiNE) —
open-source, all-in-one workspace (docs, whiteboards, tasks).
- Image: `ghcr.io/toeverything/affine:stable` pinned by digest.
- Dependencies:
  - `common` 29.3.4 (shared library)
  - `valkey` 2.3.2 (aliased `redis`) — required by upstream
- CNPG with `type: vectors` and `pgVersion: 16` — required by upstream
(uses pgvector)
- The upstream image runs as root and writes under `/root/.affine/...`.
The chart's `securityContext` keeps root + capabilities, and the comment
in `values.yaml` tells users to set `pod-security.kubernetes.io/enforce:
baseline` (or `privileged`) on the namespace. `restricted` PSS is not
supported.
- Migration is handled as an `initContainer` with `type: install` (runs
only on install), executing `node ./scripts/self-host-predeploy.js` —
same script as the official `affine_migration` compose service. It
mounts the same `storage` and `config` PVCs as the main container.
- The `affine-server-external-url` env var is built from
`affine.serverHost` + `affine.useHttps` so the URL always carries a
scheme (upstream validates this).
- README links reference `stable/affine` (forward-looking) even though
the chart is currently in `incubator/affine`; the path will match once
promoted.
- Icon is in `.webp` (192px source converted with `cwebp`), no `.png` is
shipped because the `.helmignore` and the daily CI both expect
`icon.webp` / `icon-small.webp`.

**✔️ Checklist:**

- [x] ⚖️ My code follows the style guidelines of this project
- [x] 👀 I have performed a self-review of my own code
- [x] #️⃣ I have commented my code, particularly in hard-to-understand
areas (`values.yaml` has inline comments for the securityContext and the
external URL logic)
- [x] 📄 I have made changes to the documentation (`README.md` + comments
in `values.yaml`)
- [ ] 🧪 I have added tests to this description that prove my fix is
effective or that my feature works
- [ ] ⬆️ I increased versions for any altered app according to semantic
versioning
- [x] I made sure the title starts with `feat(chart-name):`,
`fix(chart-name):`, `chore(chart-name):`, `docs(chart-name):` or
`fix(docs):`

** App addition**

If this PR is an app addition please make sure you have done the
following.

- [x] 🖼️ I have added an icon in the Chart's root directory called
`icon.png`

---

---------

Signed-off-by: Alfred Göppel <43101280+alfi0812@users.noreply.github.com>
Co-authored-by: n0PainNoBrioche <22093195+n0PainNoBrioche@users.noreply.github.com>
Co-authored-by: Alfred Göppel <43101280+alfi0812@users.noreply.github.com>
2026-06-03 15:13:07 +02:00
..
2026-05-23 00:36:22 +00:00