when: - branch: main event: push steps: - name: build-and-test image: mcr.microsoft.com/dotnet/sdk:9.0 commands: - dotnet restore GermanApp/GermanApp.csproj - dotnet build GermanApp/GermanApp.csproj --no-restore --configuration Release when: - branch: - main - feature/* - bugfix/* - refactor/* - name: build-backend image: woodpeckerci/plugin-docker-buildx privileged: true settings: dockerfile: GermanApp/Dockerfile context: GermanApp registry: registry.lrhdev.dk repo: registry.lrhdev.dk/lasserh/deutschlernen-backend username: from_secret: REGISTRY_USERNAME password: from_secret: REGISTRY_PASSWORD tags: - latest - ${CI_COMMIT_SHA} when: - branch: main - name: build-frontend image: woodpeckerci/plugin-docker-buildx privileged: true settings: dockerfile: german-app-frontend/Dockerfile context: german-app-frontend registry: registry.lrhdev.dk repo: registry.lrhdev.dk/lasserh/deutschlernen-frontend username: from_secret: REGISTRY_USERNAME password: from_secret: REGISTRY_PASSWORD tags: - latest - ${CI_COMMIT_SHA} when: - branch: main - name: deploy image: appleboy/drone-ssh settings: host: from_secret: SSH_HOST username: root key: from_secret: SSH_PRIVATE_KEY script: - docker login registry.lrhdev.dk -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD - docker pull registry.lrhdev.dk/lasserh/deutschlernen-backend:latest - docker pull registry.lrhdev.dk/lasserh/deutschlernen-frontend:latest - cd /opt/deutschlernen - docker compose down # Pass JWT and Mistral configuration as environment variables to docker compose - export Jwt__Key=$JWT_KEY - export Jwt__Issuer=$JWT_ISSUER - export Jwt__Audience=$JWT_AUDIENCE - export Jwt__ExpireHours=$JWT_EXPIREHOURS - export Mistral__ApiKey=$MISTRAL_APIKEY - export Mistral__BaseUrl=$MISTRAL_BASEURL - export Mistral__DefaultModel=$MISTRAL_DEFAULTMODEL - export Mistral__TimeoutSeconds=$MISTRAL_TIMEOUTSECONDS - export Mistral__MaxRetries=$MISTRAL_MAXRETRIES - export Mistral__RateLimitPerMinute=$MISTRAL_RATELIMITPERMINUTE - export Mistral__EnableCaching=$MISTRAL_ENABLECACHING - export Mistral__CacheTTLMinutes=$MISTRAL_CACHETTLMINUTES - export Mistral__CircuitBreakerFailureThreshold=$MISTRAL_CIRCUITBREAKERFAILURETHRESHOLD - export Mistral__CircuitBreakerResetMinutes=$MISTRAL_CIRCUITBREAKERRESETMINUTES - docker compose up -d - docker image prune -f environment: REGISTRY_USERNAME: from_secret: REGISTRY_USERNAME REGISTRY_PASSWORD: from_secret: REGISTRY_PASSWORD # JWT Configuration - Woodpecker secrets for production JWT_KEY: from_secret: JWT_KEY JWT_ISSUER: from_secret: JWT_ISSUER JWT_AUDIENCE: from_secret: JWT_AUDIENCE JWT_EXPIREHOURS: from_secret: JWT_EXPIREHOURS # Mistral API Configuration - Woodpecker secrets for production MISTRAL_APIKEY: from_secret: MISTRAL_APIKEY MISTRAL_BASEURL: from_secret: MISTRAL_BASEURL MISTRAL_DEFAULTMODEL: from_secret: MISTRAL_DEFAULTMODEL MISTRAL_TIMEOUTSECONDS: from_secret: MISTRAL_TIMEOUTSECONDS MISTRAL_MAXRETRIES: from_secret: MISTRAL_MAXRETRIES MISTRAL_RATELIMITPERMINUTE: from_secret: MISTRAL_RATELIMITPERMINUTE MISTRAL_ENABLECACHING: from_secret: MISTRAL_ENABLECACHING MISTRAL_CACHETTLMINUTES: from_secret: MISTRAL_CACHETTLMINUTES MISTRAL_CIRCUITBREAKERFAILURETHRESHOLD: from_secret: MISTRAL_CIRCUITBREAKERFAILURETHRESHOLD MISTRAL_CIRCUITBREAKERRESETMINUTES: from_secret: MISTRAL_CIRCUITBREAKERRESETMINUTES when: - branch: main