[![Build Status](https://drone.wtf-eg.de/api/badges/ag_kommunikation/webseite/status.svg)](https://drone.wtf-eg.de/ag_kommunikation/webseite)
# Öffentliche Seite der WTF Kooperative eG
Öffentliche Website der Genossenschaft auf Basis des Static-Site-Generators [Lektor](https://www.getlektor.com/).
Das Git Repository zur Webseite ist auf [git.wtf-eg.de/ag_kommunikation/webseite](https://git.wtf-eg.de/ag_kommunikation/webseite.git).
## Lokales entwickeln
### Vorbereitung
Installation von Lektor, siehe offizielle [Doku](https://www.getlektor.com/docs/installation/).
```
# install git requirements
sudo apt install git-lfs
# install lektor requirements
sudo apt install python3-pip imagemagick
# install lektor
pip3 install --user lektor
# clone git repo to folder wtf-webseite
git clone https://git.wtf-eg.de/ag_kommunikation/webseite.git wtf-webseite
# change to repo
cd wtf-webseite
# install lfs
git lfs install
# omit downloading multiple gigabytes of podcasts
git config lfs.fetchexclude "content/podcast/*.ogg,content/podcast/*.mp3"
# download all LFS files
git lfs fetch
# run lektor
lektor server
```
### Server starten
Der Server kann nun per `lektor server` gestartet werden und sollte unter http://127.0.0.1:5000/ erreichbar sein.
### Git Magie
Bevor du die Änderungen an der Webseite commitest, möchtest du dir vielleicht anschauen, welche Dateien sich geändert haben. Der Befehl ``git status`` ist hier dein Freund.
Da wir das direkte pushen auf den ``main`` Branch verbieten, möchtest du vermutlich einen neuen Branch erstellen. Das geht über ``git checkout -b ``. Mit ``git status`` siehst du auch, auf welchem branch du bist. Den kannst du per ``git push origin `` dann auch auf den Webserver pushen.
Pushen kannst du, was du commitest hast. ``git commit`` Eine aussagekräftige commit-beschreibung wird gerne gesehen.
### LFS
Wir verwenden LFS zum Speichern von großen Dateien wie den Podcast, Bilder und so weiter. Somit liegen nach `git clone` statt der Mediendateien nur Textdateien mit einem passenden Hashwert auf der Platte. So weit, so sparsam – Lektor benötigt aber die Bilder zum rendern der Seite. Die Podcasts (aktuell mehr als 3GB) jedoch nicht. Via Konfiguration kannst du die Audiodateien vom Download mit git lfs ausschließen.
git config lfs.fetchexclude "content/podcast/*.ogg,content/podcast/*.mp3"
Hat man die Dateien schon auf der Platte kann man versuchen sie zu löschen, dann die Änderungen zu verwerfen und im Anschluss sowohl bei git lfs, als auch bei Lektor aufzuräumen. Also irgendwas in Richtung:
rm content/podcast/wtf*/*.mp3
rm content/podcast/wtf*/*.ogg
git reset --hard
git lfs prune
lektor clean
Damit hatte ich teilweise Erfolg, teilweise schien `git lfs prune` keine Wirkung zu haben und Teilweise wurde mir einfach die Audiodateien wieder hergestellt, obwohl es eigentlich nur die Dateien mit den Hashes sein sollten. Im Zweifel bleibt immer das Repo einmal neu zu klonen.
#### LFS Überspringen.
Wenn du ganz genau weißt, was du machen willst und in Kauf nimmst, dass nicht alle Elemente der Webseite bei dir lokal laden, kannst du das auch überspringen. Der Trick ist folgende Option:
```bash
export GIT_LFS_SKIP_SMUDGE=1
git clone
```
*(Da das Rendern der Startseite die Bilder benötigt, willst du dann im lektor direkt auf eine andere Unterseite wechseln. Die Seite [http://localhost:5000/admin/](http://localhost:5000/admin/) sollte nützlich sein!)*
## Deployment
### Per Drone
Drone testet bereits automatisch den eingecheckten Code im `main`-Branch und für Pull Requests.
Deployments finden nicht automatisch statt, sondern müssen angestoßen werden.
Wähle dazu den erfolgreichen Build, den du deployen möchtest unter https://drone.wtf-eg.de/ag_kommunikation/webseite aus.
Rechts oben findest du dann einen Knopf zum Deployment (Wolke mit Pfeil).
Als Environment kannst du _spielwiese_ oder _www_ verwenden.
### Per Hand
Das Deployment sollte für maximale Reproduzierbarkeit und Nachvollziehbarkeit immer über Drone stattfinden.
In Ausnahmesituationen kann jedoch ein manuelles Deployment nötig sein.
```bash
lektor build
lektor deploy dev # Deployment auf die Spielwiese
lektor deploy live # Deployment auf die Live-Seite
```