diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 00e4ec0..41c9b4c 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -1,7 +1,7 @@ name: Build & Deploy Website -# Hugo-Projekt (kein Node!). Baut das Image via Dockerfile (Hugo-Build im Container) -# und startet den nginx-Container (Port 8066) neu. Runner + nginx laufen auf 10.161.30.38. +# Hugo-Projekt. Baut die statische Seite und legt sie in den Webroot +# /var/www/sites/website/ auf 10.161.30.38 (Runner läuft dort). Davor: Nginx Proxy Manager. on: push: @@ -12,37 +12,46 @@ concurrency: group: deploy-main cancel-in-progress: true +env: + HUGO_VERSION: "0.148.2" + WEBROOT: /var/www/sites/website + jobs: deploy: - # WICHTIG: Muss zu einem Label deines Gitea-Runners passen (Gitea → Admin/Repo → Runners). - # Der Runner braucht Zugriff auf Docker (Host-Runner ODER Container-Runner mit - # gemountetem /var/run/docker.sock). Ohne Docker-Zugriff schlägt der Deploy fehl. + # Muss zu einem Label deines Gitea-Runners passen. Der Runner MUSS auf dem Host + # laufen (Host-Modus) und Schreibrechte auf ${WEBROOT} haben – sonst kommt er + # nicht an den Webroot (Container-Runner sieht das Host-Dateisystem nicht). runs-on: ubuntu-latest steps: - name: Checkout inkl. Git LFS uses: actions/checkout@v4 with: - lfs: true # ZWINGEND – sonst kommen LFS-Pointer statt Bilder/Fonts an + lfs: true # ZWINGEND – sonst LFS-Pointer statt Bilder/Fonts fetch-depth: 1 - name: LFS-Dateien holen run: git lfs pull - - name: Container bauen & neu starten - run: docker compose up -d --build --remove-orphans - - - name: Alte Images aufräumen - run: docker image prune -f - - - name: Healthcheck (:8066) + - name: Werkzeuge sicherstellen (Hugo extended, rsync) run: | - for i in $(seq 1 20); do - if wget -qO- http://localhost:8066/ >/dev/null 2>&1; then - echo "OK: Seite antwortet auf :8066"; exit 0 - fi - echo "warte auf Container … ($i/20)"; sleep 3 - done - echo "FEHLER: Seite antwortet nicht auf :8066" - docker compose logs --tail=50 || true - exit 1 + set -e + command -v rsync >/dev/null || (apt-get update -qq && apt-get install -yqq rsync ca-certificates curl) + if ! command -v hugo >/dev/null 2>&1 || ! hugo version | grep -q "v${HUGO_VERSION}"; then + curl -fsSL "https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.tar.gz" -o /tmp/hugo.tgz + tar -xzf /tmp/hugo.tgz -C /usr/local/bin hugo + fi + hugo version + + - name: Seite bauen + run: hugo --gc --minify + + - name: In den Webroot deployen + run: | + set -e + mkdir -p "${WEBROOT}" + rsync -a --delete public/ "${WEBROOT}/" + echo "Deployt nach ${WEBROOT} ($(find "${WEBROOT}" -type f | wc -l) Dateien)" + + - name: Prüfen + run: test -f "${WEBROOT}/index.html" && echo "OK: index.html im Webroot vorhanden"