Github Actions für org-publish
Di 17.06.2025

Nachdem in Bloggen mit org-mode das grundsätzliche Setup zu org-publish beschrieben ist, sind im folgenden noch ein paar Details zur Kombination mit Github Actions dokumentiert, welche aktuell verwendet werden, um aus den org-Dateien die finalen HTML-Seiten zu bauen.

Dadurch, dass der eigentliche Build-Prozess via make umgesetzt ist, braucht es eigentlich nicht mehr als make all, um die ganze Seite zu bauen. Allerdings müssen davor noch Abhängigkeiten installiert werden und danach müssen die Artefakte noch veröffentlicht werden. Die gesamte Konfiguration ist am Ende der Seite aufgeführt, davor werden noch einige der Punkte genauer erläutert.

Git Branch Setup

Mit on.push.branches: 'main' wird festgelegt, dass die Pipeline nur auf dem main Branch ausgeführt wird. Dadurch kann man in anderen Branches Einträge verfassen und committen oder andere Dinge ausprobieren, ohne diese zu deployen und hat trotzdem alles im Git festgehalten.

Sprache festlegen

Da die Seite auf deutsch ist, braucht es noch eine extra Einstellung mit env.LANG, da sonst Teile der Webseite auf Englisch dargestellt werden, da dies die Standardsprache in der Buildumgebung ist.

Actions Definition

Die eigentlichen Schritte sind unter jobs.steps eingetragen. Besonders ist dabei nur der erste Schritt, welcher die benötigten Abhängigkeiten installiert, welche da wären:

emacs
Aus offensichtlichen Gründen
imagemagick
Zur Bearbeitung der Bilder
language-pack-de
Zur korrekten Sprachunterstützung

Zusätzlich müssen dann noch die locales aktualisiert werden und als letztes muss noch der Ordner .emacs.d angelegt werden, da sonst der Aufruf von project-root später fehlschlägt.

Die restlichen Schritte basieren auf der Dokumentation von Github zum Deployment via Github Actions.

Einstellungen in der Weboberfläche

Unter https://github.com/<user>/<repository>/settings/pages muss dann noch als Quelle unter 'Build and deployment' Github Actions ausgewählt werden. Danach sollte die Build-Pipeline beim nächsten Commit automatisch ausgeführt werden.

Konfiguration

name: org-publish

on:
  push:
    branches:
      - "main"

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: "pages"
  cancel-in-progress: false

env:
  LANG: "de_DE.UTF-8"

jobs:
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    steps:
      - name: Install Dependencies
        run: |
          sudo apt update && \
          sudo apt install -y emacs-nox imagemagick language-pack-de && \
          sudo update-locale && \
          mkdir ~/.emacs.d
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup Pages
        uses: actions/configure-pages@v5
      - name: Build page
        run: make all
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: './publish'
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

Probleme

Das Setup funktioniert soweit gut, das einzige Problem ist aktuell, dass die Abhängigkeiten jedes mal neu installiert werden, da stets ein blankes ubuntu-latest Image gestartet wird. Hier wäre vermutlich der richtige Weg noch ein eigenes Docker-Image zu bauen, welches die benötigten Pakete bereits enthält und dieses zu verwenden. Solang die Seite jedoch nur gelegentlich aktualisiert wird, bin ich mit dem Workflow zufrieden.

Autor: Fabian Brosda

Erstellt: Di 17.06.2025

Dieses Werk ist lizensiert unter CC BY 4.0CCBY

Erstellt mit: Emacs 29.3 (Org mode 9.6.15)