Edelsteine und Schlangen...

Es ist ein bisschen her, dass wir beschrieben haben, wie wir unseren Podcast hosten. Das Ganze funktioniert mit Hilfe der Gitlab Continuous Integration Pipeline, einem Python-Script und einem Static-Site-Generator, der aus ein paar Markdown-Dateien eine Website macht. Hier findet ihr den alten Post.

Bisher haben wir als Static-Site-Generator das auf der Skriptsprache Ruby basierende Tool Jekyll verwendet. Unser Skript zum Erzeugen der MP3-Dateien mit Kapitelmarken, Metadaten, Thumbnail und Podcast-Feed ist in Python geschrieben. Das Problem, was wir nun mit Jekyll hatten ist, dass auf verschiedenen Linux-Distributionen verschiedene Ruby-Versionen verfügbar sind und Jekyll nicht zu allen davon kompatibel ist / war. Für mich war es oft ein Krampf, die Website lokal generieren zu lassen, weil nach einem Distro-Update der Ruby Package Manager Bundler immer wieder Probleme hatte, die richtigen Paketversionen aufzulösen. Außerdem waren wir der Meinung, dass es schön wäre, beide Tools (Podcast- und Website-Generierung) im gleichen Ökosystem anzusiedeln und etwas mehr Kontrolle darüber zu bekommen.

a sketched ruby and a sketched Python logo with a blue and a yellow snake

So schwer kann das ja nicht sein...

Daraufhin haben wir uns einige andere Static-Site-Generatoren angesehen, darunter auch das in Python geschriebene Jekyll-Pendant Hyde. Auch hier waren wir nirgendwo ganz zufrieden. In bester Kolja-und-Carsten-Manier habe ich dann gesagt: "So schwer kann das ja nicht sein..." und mir überlegt, was man braucht, um aus ein paar Markdown- und SCSS-Dateien eine Website zu generieren.

Dabei herausgekommen ist Rattlesnake. Im Endeffekt handelt es sich dabei nur um ein kleines Skript, das die Templating-Engine Jinja, den Markdown-Renderer Python-Markdown, pySCSS und pyYaml benutzt. Die Eingabe ist ein Verzeichnis, welches die Dateien enthält, aus denen die Website generiert werden sollen und eine YAML-Datei, in der Variablen für das Rendering festgelegt werden können.

a rattlesnake with the subtitle "based on Python"

Rattlesnake hat hier ein wenig Dokumentation. Zusätzlich kann es über das Python package repository PyPI installiert werden:

pip install cpfr-rattlesnake

Danach kann das Skript über den Kommandozeilenbefehl rattlesnake ausgeführt werden. Per Default werden als Quellverzeichnis src und als Config-File config.yml angenommen. Das Ausgabeverzeichnis heißt, sofern nicht anders spezifiziert, build. Für Gitlab Pages sollte man dies per Kommandozeilenargument auf public ändern:

usage: Rattlesnake Static Site Generator [-h] [-w] [-o OUTPUT_DIR] [-p PORT] [-c CONFIG_FILE] [source_dir]

positional arguments:
source_dir

optional arguments:
-h, --help            show this help message and exit
-w, --watch
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
-p PORT, --port PORT
-c CONFIG_FILE, --config-file CONFIG_FILE

Sobald dieser Post zu lesen ist, wird die Hobbyspieleentwicklerpodcast-Website nicht mehr über Jekyll, sondern über Rattlesnake generiert. Wir haben dafür Sorge getragen, dass das generierte Podcast-Feed noch genau so aussieht, wie das alte, damit eure Podcatcher alle bereits gehörten Episoden auch weiterhin als gehört markieren können. An anderer Stelle haben wir versucht, im Hintergrund ein paar Dinge zu vereinheitlichen und zu vereinfachen. Wenn alles gut läuft, bekommt davon aber niemand etwas mit.

Unser Template-Repository für das Hosten von Podcasts mit Hilfe von Gitlab Pages werden wir ebenfalls auf unseren aktuell genutzte Variante mit Rattlesnake updaten.

Wir hoffen, dass dieser kleine Einblick für die eine oder den anderen ein bisschen interessant war und wünschen euch eine gute Zeit, bis wir uns in der nächsten Folge hören ;-)