server-up/CHANGELOG.md
bes-r 0b8e3dffb8
Some checks failed
Deploy server-up / deploy (push) Has been cancelled
v0.3.01 — boilerplate fixes + git-driven versioning
2026-05-19 23:44:56 +02:00

108 lines
5 KiB
Markdown

# v0.3.01 — Boilerplates fixes + git-driven versioning
## Fixes bovenop v0.3.0
### 🔁 Auto-migratie van default-repos voor upgraders
Bestaande installaties (vanaf v0.2.x) hadden de Boilerplates-repo niet zichtbaar
in de App Store omdat hun `config.json` in de `su-data` volume al bestond en de
nieuwe `DEFAULTS["APP_REPOS"]` daardoor werd overschreven.
`core/__init__.py` `load()` doet nu een eenmalige migratie: ontbrekende
default-repos worden bij opstart aangevuld op basis van id, en gemarkeerd in
`MIGRATIONS_DONE: ["v0.3.0_default_repos"]`. Wordt direct gepersisteerd.
Verwijdert een gebruiker de Boilerplates-repo expliciet, dan komt-ie niet
automatisch terug.
### 🧹 YAML-poetsstap na boilerplate-render
Bij stacks waar de meeste optionele groepen uit staan (Authentik, Nextcloud,
etc.) liet de Jinja-render verlaten mapping-sleutels achter (`volumes:`,
`networks:`, etc. zonder kinderen). Docker-compose faalt daarop met *"block
sequence entries are not allowed in this context"*.
`core/boilerplates.py` `_tidy()` heeft nu een `_drop_empty_mappings()` substep
die in meerdere passes mapping-sleutels verwijdert die alleen worden gevolgd
door whitespace/commentaar of een sibling op gelijke/lagere indent. Werkt in
cascade.
### 🏷️ Versie komt nu uit git
`Dockerfile` accepteert `ARG SU_VERSION=dev` en bakt die in `ENV SU_VERSION` +
OCI image-label. Met `docker build --build-arg SU_VERSION=$(git describe ...)`
weet het image zijn eigen versie. De Server Up UI toont automatisch de juiste
waarde, ongeacht wat de productie-compose meegeeft.
Forgejo Actions kan een tag-push automatisch verwerken — zie
`server-up-deploy/README.md`.
## Migratie vanaf v0.3.0
```bash
docker compose build --no-cache
docker compose up -d
```
---
# v0.3.0 — UI rebuild + Boilerplates support
## Hoogtepunten
### 🎨 Nieuwe UI (Tailwind + Alpine + HTMX)
- `templates/index.html` is volledig herschreven. De handgeschreven CSS
(`--bg/--s1/...` variabelen, ad-hoc grid-classes) is vervangen door
Tailwind utility-classes met een gematchte donker/licht-palette.
- Statebeheer via Alpine.js: één `app()` component bovenop het hele document,
geen `$=document.getElementById`-spaghetti meer.
- HTMX is geladen voor toekomstige server-rendered partials. Het bestaande
fetch-RPC patroon blijft werken; HTMX kan progressief worden ingezet.
- Modals, toasts, terminal-overlay en first-run wizard zitten allemaal in
één Alpine-state — geen losse globale variabelen meer.
- Mobiele sidebar gedraagt zich nu correct (slide-in i.p.v. layout-flip).
### 🧩 ChristianLempa Boilerplates ondersteund
Server Up herkent nu twee stack-formaten naast elkaar:
| Formaat | Detectie | Bron |
|---|---|---|
| **Compose** (origineel) | `compose.yml` / `docker-compose.yml` (+ optioneel `stack.json`) | bes-r/server-up |
| **Boilerplate** (nieuw) | `template.json` + `files/` | ChristianLempa/boilerplates-library |
Nieuw bestand `app/core/boilerplates.py`:
- `is_boilerplate(d)` — detectie
- `metadata(d)` — converteert `template.json["metadata"]` (incl. selfhst-icons) naar Server-Up formaat
- `fields(d)` — flattened variable-schema voor de install-modal
- `render_to_dir(src, dest, values)` — rendert `files/*.yaml` met de Jinja-achtige
`<< var >>` + `<%- if expr %>` syntax die de boilerplates gebruiken (Jinja2 met
custom delimiters). Niet-tekst bestanden worden verbatim gekopieerd.
`app/core/git.py``_scan_compose_dirs` herkent beide formaten en zet
`format: "boilerplate"` in de stack-entry zodat de UI er een badge bij kan tonen.
`app/app.py`:
- `_find_stack_src` accepteert ook boilerplate-mappen.
- `POST /api/store/preview` retourneert voor boilerplates het variabelen-schema
(`fields`) plus een gerenderde preview met defaults.
- `POST /api/store/install` met body `{values: {...}}` rendert de templates
voor je voordat de stack gestart wordt.
### ⚙️ Default-repos
Een nieuwe Server Up komt nu uit de doos met twee app-repositories:
1. `bes-r/server-up` — eigen stacks, submap `apps`
2. `ChristianLempa/boilerplates-library` — community templates, submap `compose`
### 📦 Versie / Dockerfile
- `SU_VERSION` = `0.3.0` in `Dockerfile` en `docker-compose.yml`
- `requirements.txt`: Jinja2 expliciet toegevoegd (was al een Flask-dep)
## Migratie vanaf v0.2.29
- Build opnieuw: `docker compose up -d --build --no-cache`
- Bestaande stacks blijven werken (legacy formaat is intact).
- De Boilerplates-repo wordt automatisch toegevoegd voor verse installs.
Bestaande gebruikers kunnen de repo handmatig toevoegen via
Instellingen → Git Repositories met submap `compose`.
## Bekende beperkingen
- Boilerplate-templates met onbekende custom-filters of complexe Ansible-style
conditionals kunnen falen — de fout verschijnt in het terminal-paneel.
- `volumes:` blokken die conditioneel zijn (`<%- if volume_mode == 'local' %>`)
werken; complexere render-logica (loops over services) is nog niet getest.
- HTMX is geladen maar de meeste interacties draaien nog op fetch-RPC. Verdere
migratie naar server-rendered partials kan stapsgewijs in volgende releases.