- .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>
51 lines
1.6 KiB
YAML
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
|