Move Hugo Web-presence to GH-Pages

Hallo, vor ein paar Monaten habe ich beschlossen, dass ich zu einer Form von Webspace wechseln möchte, für die ich kein Geld ausgeben muss. Obwohl es nur ein paar Dollar kostet, dachte ich, es wäre an der Zeit, weiterzuziehen…​ dies ist im Grunde ein Tutorial, um auf github-Seiten umzusteigen…​

Edit vom 20-04-2025: Zuvor hatte ich einen Makefile-basierten Ansatz, aber das war nicht der ideale Weg, also habe ich es jetzt geändert, um stattdessen github actiosn zu verwenden

Wir beginnen mit der Workflow-Datei deploy.yml . Mein neues Setup sieht wie folgt aus:

name: Build and Deploy Hugo Site

on:
  push:
    branches:
      - main
  workflow_dispatch:

permissions:
  contents: write

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    env:
      HUGO_VERSION: 0.146.6
      TZ: Europe/Berlin

    steps:
      - name: Checkout repository (with submodules)
        uses: actions/checkout@v4
        with:
          submodules: recursive
          fetch-depth: 3

      - name: Install Hugo
        run: |
          wget -O hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb
          sudo dpkg -i hugo.deb

      - name: Install Asciidoctor
        run: |
          sudo apt update
          sudo apt install -y ruby
          sudo gem install asciidoctor

      - name: Build Hugo site
        run: |
          hugo --gc --minify --cleanDestinationDir --config content/config.toml
          echo "--- Built site files ---"
          find public -type f | sort

      - name: Deploy to gh_pages branch
        uses: peaceiris/actions-gh-pages@v4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_branch: gh_pages
          publish_dir: public
          force_orphan: true
          user_name: wehrend
          user_email: sven.wehrend@gmail.com

und hier der Vollständigkeit halber die config.toml, die im content-Verzeichnis liegt…​

baseURL = "http://wehrend.uber.space/"
languageCode = "en-us"
title = "Bits & pieces - Sven Wehrend"

[module]
  [[module.imports]]
    path = "github.com/alex-shpak/hugo-book"


[languages.en]
  languageName = "English"
  contentDir = "content/en"
  weight = 1

[languages.de]
  languageName = "Deutsch"
  contentDir = "content/de"
  weight = 2


[[languages.en.menu.before]]
  name = "Web-Blog"
  url = "/posts/web/"
  weight = 10

[[languages.en.menu.before]]
  name = "Synth-Blog"
  url = "/tags/synth/"
  weight = 20


[[languages.en.menu.before]]
  name = ""
  url = "/docs/"
  weight = 10


[[languages.en.menu.before]]
  name = "Electronics 101"
  url = "/pages/prequel-short-introduction-to-electronics"
  weight = 26

[[languages.en.menu.before]]
  name = "Electronics 102"
  url = "/pages/short-introduction-to-electronics-102"
  weight = 27


[[languages.en.menu.after]]
  name = "Digital Logic 1 (Overview)"
  url = "/pages/overview/"
  weight = 20

[[languages.en.menu.before]]
  name = "Digital Logic 2 (Overview)"
  url = "/pages/overview2/"
  weight = 25

[[languages.en.menu.before]]
  name = "Synthesizer-DIY"
  url = "/posts/synth/25_build_your_own_modules/"
  weight = 26


[[languages.de.menu.before]]
  name = "Web-Blog"
  url = "/posts/web/"
  weight = 10

[[languages.de.menu.before]]
  name = "Synth-Blog"
  url = "/tags/synth/"
  weight = 20


[[languages.de.menu.before]]
  name = ""
  url = "/docs/"
  weight = 10


[[languages.de.menu.before]]
  name = "Elektronik 101"
  url = "/de/pages/prequel-short-introduction-to-electronics"
  weight = 26

[[languages.de.menu.before]]
  name = "Elektronik 102"
  url = "/de/pages/short-introduction-to-electronics-102"
  weight = 27


[[languages.de.menu.after]]
  name = "Digitale Logik 1 (Übersicht)"
  url = "/de/pages/overview/"
  weight = 20

[[languages.de.menu.before]]
  name = "Digitale Logik 2 (Übersicht)"
  url = "/de/pages/overview2/"
  weight = 25


[[languages.de.menu.before]]
  name = "Synthesizer-DIY"
  url = "/de/posts/synth/25_build_your_own_modules/"
  weight = 26

[params]
  date_format = "2006-01-02"
  # (Optional, default light) Sets color theme: light, dark or auto.
  # Theme 'auto' switches between dark and light modes based on browser/os preferences
  BookTheme = 'light'

  # (Optional, default true) Controls table of contents visibility on right side of pages.
  # Start and end levels can be controlled with markup.tableOfContents setting.
  # You can also specify this parameter per page in front matter.
  BookToC = false


[security]
  enableInlineShortcodes = false
  [security.exec]
    allow = ['^dart-sass-embedded$', '^go$', '^npx$', '^postcss$', '^asciidoctor$']
    osEnv = ['(?i)^(PATH|PATHEXT|APPDATA|TMP|TEMP|TERM)$']

[markup.asciidocext]
    extensions = ["asciidoctor"]
    workingFolderCurrent = true
    trace = true
    verbose = true

[languages.en.markup]
  [languages.en.markup.goldmark]
    [languages.en.markup.goldmark.renderer]
      unsafe = true

[languages.de.markup]
  [languages.de.markup.goldmark]
    [languages.de.markup.goldmark.renderer]
      unsafe = true

  [frontmatter.handlers]
    adoc = "yaml"

Dank des github-token dokumentiert hier müssen wir nicht einmal einen Schlüssel oder Token einrichten. Dies, indem wir den Standard github_token verwenden, der keine Konfiguration benötigt, falls die github-Seiten aus dem gleichen Repository stammen. Also habe ich mich entschlossen, mein Setup zu vereinfachen und das übergeordnete Verzeichnis wegzuwerfen bzw. dem Repository 'content' 'hinzuzufügen. Mit diesem Setup sollte es möglich sein, hugo das publishDir <user>.github.io AKA public folder erstellen zu lassen, das in den Branch gh-pages auffüllt.

Wenn wir unsere Änderungen committen und pushen, beginnt die Build-and-Deploy-Pipeline sofort mit der Arbeit und erstellt im Hintergrund die Website für Sie …​

Herzlichen Glückwunsch, Sie haben soeben gelernt, wie Sie einen Beitrag zur Community leisten und einen Eckpfeiler auf den Schultern von Giganten errichten können.

Übersetzt mit DeepL.com (kostenlose Version)

Last update: May 8, 2025