DeutschLernen/.woodpecker.yml
Lasse Rune Hansen 614682b422 chore(ci): add Woodpecker secrets for Mistral API and JWT configuration
- Update .woodpecker.yml to inject Mistral and JWT secrets as environment variables
- Update docker-compose.yml to pass secrets to backend container
- Secrets are loaded from Woodpecker and passed via environment variables:
  - MISTRAL_APIKEY, MISTRAL_BASEURL, MISTRAL_DEFAULTMODEL, etc.
  - JWT_KEY, JWT_ISSUER, JWT_AUDIENCE, JWT_EXPIREHOURS
- Production deployment will use Woodpecker secrets instead of appsettings files

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-06-10 17:24:03 +02:00

121 lines
No EOL
4 KiB
YAML

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