10 KiB
v0.4.5 — Releases & in-app update-check
Nieuw in v0.4.5
🏷️ Automatische releases bij een tag
Push je een v*-tag, dan maakt de nieuwe release.yml-workflow automatisch een
Forgejo-Release aan met notes uit de bijbehorende CHANGELOG.md-sectie plus
een commit-overzicht sinds de vorige tag. Pre-release tags (bv. v0.8.4-beta1)
worden als pre-release gemarkeerd. Zo krijg je een Releases-pagina met duidelijke
changelog per versie, vergelijkbaar met GitHub Releases.
🔔 In-app "update beschikbaar"
Server Up vergelijkt de draaiende versie met de laatste release via de Forgejo/
GitHub Releases-API (semver-vergelijking, pre-releases optioneel). Is er een
nieuwere versie, dan verschijnt een melding in de topbar en een blok in
Instellingen → Updates met versie, release-notes en een link. Instelbaar via
UPDATE_API_URL (of env SU_UPDATE_API) en de optie "pre-releases meenemen".
🔖 Versiebeleid
Bump bij elke wijziging het centrale VERSION-bestand; tags zijn de bron voor
release-versies (vX.Y.Z, of -beta/-rc voor pre-releases).
v0.4.4 — Nette versienummers op alle builds
Nieuw in v0.4.4
Centraal VERSION-bestand (semver) is nu de bron voor het versienummer. De
deploy-workflows lezen het en bouwen:
- tag
v0.4.4→0.4.4(productie, toontv0.4.4) - push naar
main→0.4.4-rc.<sha> - push naar
dev→0.4.4-dev.<sha>
Zo zie je voortaan het échte versienummer in de topbar i.p.v. alleen de
git-SHA (vdev-1eab7c07). Bump bij elke wijziging alleen nog VERSION (en voor
de zekerheid de fallback in app.py/index.html voor lokale runs).
v0.4.3 — Auto-logo's legacy-apps + fix lege Docker Images
Nieuw / fixes in v0.4.3
🖼️ Automatische logo's voor legacy-apps
Legacy-apps (eigen app.json/stack.json-stacks) krijgen nu automatisch een
logo via de dashboard-icons CDN, afgeleid uit de app-naam (bv. "Nextcloud" →
nextcloud.png). Een expliciete logo-URL in de metadata wint; bestaat het
geraden icoon niet, dan valt de UI terug op het emoji-icoon. Geldt voor zowel
de App Store als geïnstalleerde stacks.
🐛 Fix: Docker Images-pagina was leeg
De afbeeldingenlijst gebruikte :key="img.id", maar meerdere tags kunnen
dezelfde image-ID delen → dubbele Alpine-keys waardoor de tabel niet rendert
(en de "geen images"-melding ook niet, want er waren wél images). De x-for
gebruikt nu de index als key.
v0.4.2 — App-logo's bij stacks
Nieuw in v0.4.2
Geïnstalleerde stacks tonen nu het app-logo (of een emoji-icoon als fallback),
zowel op het dashboard als op de Stacks-pagina. Bij installatie wordt het
logo/icoon van de bron-app opgeslagen in .serverup.json in de stack-map.
Bestaande installaties krijgen hun logo via een naam-match met de App Store,
dus ze hoeven niet opnieuw geïnstalleerd te worden. De store toonde al logo's
voor boilerplate-apps (via de selfhst/dashboard-icons CDN).
v0.4.1 — Fix: styling werd niet toegepast
Fix bovenop v0.4.0
De volledige Tailwind-stylesheet faalde stil omdat .modal via @apply de
eigen CSS-animatieklasse anim toepaste. Tailwind's @apply accepteert alleen
Tailwind-utilities, geen losse CSS-klassen, waardoor de hele Play-CDN-compilatie
afbrak en de pagina ongestyled (kaal HTML) werd geladen. De animatie staat nu
als gewone CSS-regel (.anim, .modal { animation: … }) los van @apply.
v0.4.0 — Volledig nieuw UI-ontwerp (Modern SaaS)
Nieuw in v0.4.0
🎨 Compleet herontworpen interface
Volledig nieuw, licht en ruim "Modern SaaS"-ontwerp (Inter-font, indigo accent, zachte schaduwen, ronde 2xl-kaarten). Nieuwe app-shell: verticale sidebar met merk-header, gegroepeerde navigatie met actieve indicator en live status-footer; slanke sticky topbar met dynamische paginatitel en status-chips. Dashboard, stacks, app store, images-/audittabellen, instellingen, modals, wizard, toasts en het log-paneel zijn allemaal opnieuw vormgegeven. Inklapbaar menu en grote touch-targets blijven behouden; volledig mobielvriendelijk.
🌗 Thema volgt systeemvoorkeur
Standaard volgt het thema de OS-voorkeur (licht/donker) en reageert live op wijzigingen. Handmatige override via Auto / Light / Dark in Instellingen.
v0.3.1 — UI-restyle + taalmodule (add-on)
Nieuw in v0.3.1
🎨 Grondige UI-restyle
Grotere, touch-vriendelijke knoppen (min. 44px), ruimere spacing, grotere typografie en kaarten. Layout gecentreerd met max-breedte voor meer lucht op grote schermen. Volledig mobielvriendelijk.
📐 Inklapbaar menu (ook op desktop)
De hamburger klapt de sidebar nu ook op desktop in/uit; voorkeur wordt onthouden
(localStorage), hoofdinhoud en log-paneel schuiven mee. Op mobiel een
tap-to-close overlay.
🌐 Taalmodule als add-on
Nieuwe sectie in Instellingen → "Taalmodule": talen toevoegen, bewerken,
verwijderen en ingebouwde talen (NL/EN) dupliceren als startpunt. Editor toont
per sleutel de Engelse referentie met zoekfilter. Backend-endpoints:
POST/DELETE /api/i18n, GET /api/i18n/keys, GET /api/i18n/<code>/raw.
Toegevoegde talen komen als JSON in translations/ en zijn direct beschikbaar.
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
docker compose build --no-cache
docker compose up -d
v0.3.0 — UI rebuild + Boilerplates support
Hoogtepunten
🎨 Nieuwe UI (Tailwind + Alpine + HTMX)
templates/index.htmlis 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)— detectiemetadata(d)— converteerttemplate.json["metadata"](incl. selfhst-icons) naar Server-Up formaatfields(d)— flattened variable-schema voor de install-modalrender_to_dir(src, dest, values)— rendertfiles/*.yamlmet 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_srcaccepteert ook boilerplate-mappen.POST /api/store/previewretourneert voor boilerplates het variabelen-schema (fields) plus een gerenderde preview met defaults.POST /api/store/installmet 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:
bes-r/server-up— eigen stacks, submapappsChristianLempa/boilerplates-library— community templates, submapcompose
📦 Versie / Dockerfile
SU_VERSION=0.3.0inDockerfileendocker-compose.ymlrequirements.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.