meldestelle/.github/workflows/deploy-proxmox.yml

56 lines
2.6 KiB
YAML

# Name des Workflows (erscheint im Actions-Tab auf GitHub)
name: Build and Deploy Ktor Server to Proxmox
# Trigger: Wann soll der Workflow starten?
on:
# Bei jedem Push auf den 'main' Branch
push:
branches: [ main ]
# Erlaubt auch das manuelle Starten über den Actions-Tab
workflow_dispatch:
# Definition der auszuführenden Jobs
jobs:
# Ein Job namens 'build-and-deploy' (Name ist frei wählbar)
build-and-deploy:
# Angezeigter Name für den Job auf GitHub
name: Build and Deploy Ktor Server
# WICHTIG: Dieser Job MUSS auf deinem selbst gehosteten Runner laufen!
# Stelle sicher, dass die Labels hier (mindestens 'self-hosted')
# mit den Labels deines Runners übereinstimmen.
runs-on: self-hosted
# Die Schritte, die in diesem Job ausgeführt werden
steps:
# Schritt 1: Code aus dem Repository holen
# verwendet die Standard-Action von GitHub dafür
- name: Check out repository code
uses: actions/checkout@v4
# Schritt 2: Docker Image für den Ktor-Server bauen
# verwendet die 'Dockerfile' im Hauptverzeichnis des Projekts.
# Taggt das Image als 'meldestelle/server: latest' (muss zum Compose-File passen)
- name: Build Docker image
# Führt 'docker build' im Root-Verzeichnis des ausgecheckten Codes aus
run: docker build -t meldestelle/server:latest .
# Schritt 3: Anwendung via Docker Compose starten/aktualisieren
# stellt alle in docker-compose.yml definierten Services bereit
- name: Deploy application via Docker Compose
# Macht die GitHub Secrets als Umgebungsvariablen NUR für diesen Schritt verfügbar
env:
POSTGRES_USER: ${{ secrets.POSTGRES_USER }}
POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }}
POSTGRES_DB: ${{ secrets.POSTGRES_DB }}
# Füge hier optional weitere Secrets hinzu, die deine Compose-Datei braucht
# z.B. PGADMIN_DEFAULT_PASSWORD: ${{ secrets.PGADMIN_PASSWORD }}
# Führt 'docker compose up' aus.
# Docker Compose liest die oben gesetzten ENV-Variablen und verwendet sie für die
# Ersetzung von ${...} in der docker-compose.yml (z.B. für den 'db' Service).
# Der 'server' Service bekommt seine DB-Variablen auch über die 'environment'-Sektion
# in der docker-compose.yml, die ebenfalls diese ENV-Variablen nutzt.
# --build: Baut Images neu, falls nötig (besonders wichtig für den 'server'-Service)
# -d: Startet Container im Hintergrund
# --force-recreate: Erzwingt Neuerstellung, kann helfen, alte Zustände zu vermeiden
run: docker compose up --build -d --force-recreate