Aktuelle Arbeiten an Pelican

Online seit 2023-08-08 in tech

Pelican Logo

Motivation

Dieses Blog verwendet ja Pelican als statischen Seitengenerator. Bisher habe ich das so gehandhabt, dass im Rootverzeichnis eine .gitmodules lag, die einfach alle verfügbaren Plugins und Themes referenziert hat - was das (rekursive) Klonen wirklich bös aufblähte.

Das ging so nicht weiter.

Referenzieren via pip

Pelican hat nun eine neue Org gegründet, pelican-plugins, deren explizites Ziel es ist, das gleichnamige statische Repository durch eine besser wartbare Infrastruktur zu ersetzen.

Das Problem ist nur – viele alte Plugins kommen damit (noch) nicht gut klar.

  • Es fängt schon damit an, dass die Projektstruktur eine ganz andere ist. Die klassischen Plugins legen meist alle Dateien flach in ein Verzeichnis - das kollidiert mit der Struktur, wie sie Pelican erwartet. Das war bislang kein Problem, weil die Pfade explizit über die pelicanconf.py referenziert wurden - genau das soll aber nun ja aufgebrochen werden.
  • Noch dazu geben viele Plugins ihre Abhängigkeiten nur via README.md preis:

    This plugin depends on python package gitpython, install [it via pip]

Ja, nein. Ich möchte die Plugins abstrakt (!) über eine requirements.txt et.al. beschreiben und gut. Da steht schon Pelican selbst, da gehört das mit dazu.

Aktuelle Arbeit

Ich bin also dran, das nach und nach aufzulösen und habe mal mit folgenden Plugins angefangen:

Mein Workflow sieht dafür wie folgt aus:

$ ( mkdir ${PLUGIN_NAME}-bare && \
    cd ${PLUGIN_NAME}-bare && \
    git init --bare )
$ ( cd pelican-plugins && \
    git subtree -b ${PLUGIN_NAME} --prefix ${PLUGIN_NAME} split && \
    git checkout ${PLUGIN_NAME} && \
    git remote add ${PLUGIN_NAME} ../${PLUGIN_NAME}-bare && \
    git push ${PLUGIN_NAME} ${PLUGIN_NAME}:master )

Daraufhin liegen die Plugins alle in separaten Bare-Repos, können von da geklont werden, oder was ihr sonst damit anstellen wollt. Ich habe sie lokal in ein normales Repo geklont, dort das entsprechende Github-Repo als zusätzlichen Remote eingetragen und anschließend dorthin gepusht.

Das reicht für einen ersten Versuch, der via pip install "representative_image @ https://github.com/schtobia/representative_image/archive/refs/heads/master.tar.gz" getestet werden kann.

Wie geht’s weiter?

Für mich reicht das erst mal, um dieses Blog hier wieder zum Laufen zu bekommen. Das mittelfristige Ziel ist natürlich, das in der obens erwähnten Org unterzubringen. Da bin ich dran, im Moment gerade an featured-image. Aber das dauert natürlich noch etwas, bis die alle sauber sind.