busyfeed: Initial commit mit Tag-Deployment

Bestehende App plus Gitea-Actions-Pipeline: Tag v* loest Build, Tests
und Container-Neustart auf dem VPS aus.

- .gitea/workflows/deploy.yml: npm ci/build/test als Gate, danach
  docker compose up -d --build. Die .env wird aus dem Repo-Secret DOTENV
  erzeugt, damit auf dem Host keine Secret-Datei gepflegt werden muss.
- docker-compose.yml: fester Projektname (der CI-Job hat ein anderes
  Arbeitsverzeichnis als der Host), Image mit Versionstag fuer Rollback,
  fester Volume-Name.
- README: Deployment- und Rollback-Abschnitt, Token-Rotation angepasst.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-19 19:56:54 +02:00
commit 45d881f9a9
14 changed files with 1401 additions and 0 deletions

View File

@@ -0,0 +1,43 @@
name: Build & Deploy
on:
push:
tags:
- 'v*'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- 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: |
umask 077
echo "$DOTENV" > .env
- name: Deployen
run: docker compose up -d --build --remove-orphans
- name: Alte Layer aufraeumen
run: docker image prune -f