- Rust 93.5%
- Nix 2.8%
- HTML 2.6%
- Dockerfile 1.1%
| .forgejo/workflows | ||
| .idea | ||
| .vscode | ||
| containers | ||
| src | ||
| test_out | ||
| .env.template | ||
| .gitignore | ||
| .mise.toml | ||
| .onedev-buildspec.yml | ||
| api_notes.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| flake.lock | ||
| flake.nix | ||
| laenderapi.txt | ||
| README.md | ||
| renovate.json | ||
syapi – School Year Plan API
Erzeugt aus Schuljahr, Bundesland, eigenen Ferien und Stundenverteilung einen
Stoffverteilungsplan als Excel-Datei (POST /). Schul- und Feiertage kommen von
der OpenHolidays API.
Entwicklung
Entwickelt wird in der MicroVM (flake.nix, nix run --impure), bedient wird
alles über mise:
cp .env.template .env # einmalig, dann anpassen
mise run # listet alle Tasks
mise run dev # Server auf APP_ADDR (in der VM 0.0.0.0:3000)
mise run request # Beispielanfrage, Ergebnis nach test_out/
mise run check # Formatierung, Clippy, Tests
| Variable | Bedeutung |
|---|---|
APP_ADDR |
Adresse des Servers, Vorgabe 127.0.0.1:3000 |
APP_DATA |
Ablage der erzeugten Pläne (zugleich Cache), Pflicht |
RUST_LOG |
Log-Filter für tracing |
Betrieb
Läuft auf dem Server d0b als rootless Podman-Pod syapi (Nummer 06), hinter
dem zentralen Caddy unter https://syapi.d0b.de.
| Rolle | app – Container syapi-app, Port 8080 im Pod, 127.0.0.1:10680 auf d0b |
| Daten | /srv/syapi/data → /data (erzeugte Pläne) |
| Umgebung | /etc/apps/syapi/app.env, Vorlage containers/env/app.env.example |
| Health | GET /health → 200 |
Die Dateien für d0b liegen unter containers/ (Containerfile, Quadlets,
site.caddy, smoke.txt).
Release
mise run build:deploy v2026.10.26-1 # deploy/ und dist/syapi-<tag>.tar.zst (+ .sha256)
mise run test:containers # baut und startet jede Rolle wie auf d0b
git tag v2026.10.26-1 && git push --tags
Ein Tag v* baut das Bündel per Forgejo-Workflow (.forgejo/workflows/release.yml)
und hängt es an das Release. build:deploy packt nur versionierte Dateien aus
HEAD ein: vorher committen.
Einrichtung auf d0b (einmalig, als root)
app add syapi 06
editor /etc/apps/syapi/app.conf # DOMAIN=syapi.d0b.de REPO=https://zumcode.de/<besitzer>/syapi
install -m 0640 -o root -g syapi /dev/null /etc/apps/syapi/app.env # Werte aus containers/env/app.env.example
app deploy syapi <tag>
Die Releases müssen ohne Anmeldung ladbar sein (öffentliches Repo), sonst das
Bündel vorher holen und app deploy syapi <ordner>.