cgX13

Make: Ein Low-Tech Automatisierungstool

Eigentlich ist make ein ziemlich altes Werkzeug aus der Software-Entwicklung. Aber auch darüber hinaus kann man es zur Automatisierung und Standardisierung von Abläufen nutzen.

  • Automatisiertes Umwandeln von Markdown-Dateien in PDFs
  • Betriebssystem-Updates durchführen
  • Backups erstellen
  • Housekeeping und Maintenance auf dem Heimserver durchführen

Der Aufbau einer makefile ist relativ einfach:

ziel: (optionale Abhängigkeiten)
  Rezept

Achtung: Die Einrückung vor dem Rezept muss zwingend ein Tab-Zeichen sein, kein Leerzeichen.

Um beim Bearbeiten von makefile Tabs anstelle von Leerzeichen zu verwenden, habe ich folgende Konfiguration in meiner .vimrc

autocmd FileType make setlocal noexpandtab shiftwidth=8 tabstop=8

Beispiele

Backup des Home-Verzeichnis auf einen Server

backup-home:
  rsync -av /home/ remote-user@server:/backup/home/

Updates einspielen

update-system:
  sudo dnf update -y
  sudo dnf autoremove -y

Hugo Builds vereinfachen

HUGO = hugo
PUBLIC_DIR = public
CONTENT_DIR = content
DATE = $(shell date +%Y-%m-%d)
TIME = $(shell date +%H:%M:%S)

# Standard-Target
all: build

build:
  $(HUGO)

serve:
  $(HUGO) serve --drafts --buildDrafts

production:
  $(HUGO) --minify --gc

clean:
  rm -rf $(PUBLIC_DIR)

new-post:
  @read -p "Post title: " title; \
  slug=$$(echo "$$title" | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g' | sed 's/[,:!.]/-/g'); \
  $(HUGO) new posts/$(DATE)-$$slug.md; \
  echo "Created post: posts/$(DATE)-$$slug.md"

commit: 
  git add .
  git commit -m "Site update $(DATE) $(TIME)"
  git push origin main

.PHONY: all build serve production clean commit