Files
everythingbutwork/.gitea/workflows/deploy.yml
T
Raffael SheikhandClaude Opus 4.8 3b928d0ad0
ci / quality (push) Failing after 35s
ci / build (push) Has been skipped
deploy / deploy (push) Successful in 53s
ci(deploy): Auto-Deploy-Runner für Push auf main + reproduzierbarer API-Build
- .gitea/workflows/deploy.yml: deployt bei Push auf main via Host-Runner
  (git reset --hard origin/main in /opt/build/cockpit, docker compose up
  -d --build in /opt/stacks/cockpit, Healthcheck auf cockpit-api).
- Auto-Migrate: runMigrations() (drizzle-orm Migrator) wird beim API-Start
  aufgerufen; Schema wird vor dem Listen idempotent aktualisiert.
- API-Dockerfile: Workspace-Libs (@cockpit/db, @cockpit/shared) werden jetzt
  mit Emit kompiliert und main/exports im Image auf dist gebogen. Vorher war
  das Prod-Image nicht reproduzierbar baubar (Node konnte die TS-Quelle der
  Libs nicht laden → ERR_MODULE_NOT_FOUND). Dev-Modus und Web-/Vite-Build
  bleiben unberührt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 18:51:17 +02:00

51 lines
1.6 KiB
YAML

# Gitea Actions Deploy für das Cockpit.
# Läuft NUR bei Push auf main und deployt auf dem Homeserver, auf dem auch
# Gitea und der act_runner laufen. Der Job läuft im Host-Executor (runs-on: host),
# damit er Zugriff auf den Docker-Daemon und die Host-Pfade hat:
# /opt/build/cockpit → Source-Checkout (Build-Context, gehört dem Runner-User)
# /opt/stacks/cockpit → docker-compose.yml + .env (root-owned → via sudo)
name: deploy
on:
push:
branches: [main]
concurrency:
group: deploy-cockpit
cancel-in-progress: false
jobs:
deploy:
runs-on: host
steps:
- name: Source-Checkout auf origin/main aktualisieren
run: |
set -euo pipefail
git -C /opt/build/cockpit fetch --prune origin
git -C /opt/build/cockpit reset --hard origin/main
echo "Deployed commit:"
git -C /opt/build/cockpit log --oneline -1
- name: Container bauen & neu starten
run: |
set -euo pipefail
cd /opt/stacks/cockpit
sudo docker compose up -d --build --remove-orphans
- name: Auf API-Health warten
run: |
set -euo pipefail
for i in $(seq 1 36); do
status=$(sudo docker inspect -f '{{.State.Health.Status}}' cockpit-api 2>/dev/null || echo "missing")
echo " api health: $status"
if [ "$status" = "healthy" ]; then
echo "✅ cockpit-api ist healthy."
exit 0
fi
sleep 5
done
echo "❌ cockpit-api wurde nicht rechtzeitig healthy." >&2
sudo docker logs --tail 80 cockpit-api || true
exit 1