Files
busyfeed/.gitea/workflows/deploy.yml
Lucas Orth 2d024a7f54
All checks were successful
Build & Deploy / deploy (push) Successful in 2m38s
Deploy gegen fehlendes Secret und Crash-Schleife absichern
Zwei Faelle, in denen der Lauf gruen geworden waere, obwohl nichts laeuft:

- Ist das Secret DOTENV nicht gesetzt, entstand eine leere .env. Der
  Server wirft dann beim Start (requireEnv), der Container startet
  endlos neu - der Workflow haette das nicht gemerkt. Jetzt bricht der
  Schritt vorher ab.
- "docker compose up -d" kehrt zurueck, sobald der Container erzeugt ist,
  nicht wenn er laeuft. Mit --wait wird der vorhandene Healthcheck zum
  Gate; --wait-timeout 180, weil das erste Health-Ergebnis beim
  Intervall von 60s entsprechend spaet kommt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 18:58:45 +02:00

57 lines
1.7 KiB
YAML

name: Build & Deploy
on:
push:
tags:
- 'v*'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
# Intern klonen statt ueber die oeffentliche Domain: Gitea laeuft auf
# demselben Host, der Weg ueber die oeffentliche IP findet nicht
# zurueck (NAT-Hairpin). Der Job-Container erreicht Gitea ueber das
# Netz gitea-ci unter seinem Containernamen.
- uses: actions/checkout@v4
with:
github-server-url: http://gitea:3000
- uses: actions/setup-node@v4
with:
node-version: '24'
- run: npm ci
- run: npm run build
# Gate: rote Tests -> kein Deploy. Die Tests sichern die beiden
# nicht verhandelbaren Punkte ab (UTC statt TZID, kein RRULE).
- run: npm test
- name: Tag ermitteln
run: echo "IMAGE_TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
# Das Repo-Secret DOTENV enthaelt den kompletten .env-Inhalt (mehrzeilig).
# Ueber env: statt direkter Interpolation, damit Anfuehrungszeichen,
# Backticks und $ in den Werten nicht vom Shell-Parser angefasst werden.
- name: .env aus Secret erzeugen
env:
DOTENV: ${{ secrets.DOTENV }}
run: |
if [ -z "$DOTENV" ]; then
echo "Secret DOTENV ist leer oder nicht gesetzt."
exit 1
fi
umask 077
echo "$DOTENV" > .env
# --wait: bricht ab, wenn der Container nicht healthy wird. Ohne das
# waere der Lauf gruen, obwohl der Container in einer Crash-Schleife
# haengt - z. B. weil ein Wert in .env fehlt.
- name: Deployen
run: docker compose up -d --build --remove-orphans --wait --wait-timeout 180
- name: Alte Layer aufraeumen
run: docker image prune -f