Skip to content
57 changes: 54 additions & 3 deletions .github/workflows/deploy-to-k8s.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,7 @@ jobs:
BRANCH_SAFE=${BRANCH//\//-}
echo "tag=$BRANCH_SAFE" >> $GITHUB_OUTPUT
echo "api_url=https://$BRANCH_SAFE.api.whiteboard.student.k8s.aet.cit.tum.de" >> $GITHUB_OUTPUT
echo "base_url=https://$BRANCH_SAFE.whiteboard.student.k8s.aet.cit.tum.de" >> $GITHUB_OUTPUT

echo "base_url=https://$BRANCH_SAFE.whiteboard.student.k8s.aet.cit.tum.de" >> $GITHUB_OUTPUT
echo "genai_url=https://$BRANCH_SAFE.genai.whiteboard.student.k8s.aet.cit.tum.de" >> $GITHUB_OUTPUT
fi

Expand Down Expand Up @@ -141,15 +140,55 @@ jobs:
build-args: API_URL=${{ needs.setup.outputs.api_url }}
platforms: linux/amd64

build-genai:
needs: setup
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
ref: ${{ needs.setup.outputs.merge_commit || github.sha }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Log in to GHCR
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache-genai
key: ${{ runner.os }}-genai-${{ github.sha }}
restore-keys: |
${{ runner.os }}-genai-

- name: Build and push genai image
uses: docker/build-push-action@v3
with:
context: ./genai
file: ./genai/Dockerfile
push: true
tags: ghcr.io/${{ needs.setup.outputs.repo }}/genai:${{ needs.setup.outputs.tag }}
build-args: API_URL=${{ needs.setup.outputs.api_url }}
platforms: linux/amd64


deploy:
needs:
- build-client
- build-server
- build-genai
runs-on: ubuntu-latest
outputs:
client_url: ${{ steps.set-vars.outputs.CLIENT_URL }}
server_url: ${{ steps.set-vars.outputs.SERVER_URL }}
auth_url: ${{ steps.set-vars.outputs.AUTH_URL }}
genai_url: ${{ steps.set-vars.outputs.GENAI_URL }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
Expand All @@ -165,13 +204,15 @@ jobs:
CLIENT_URL=whiteboard.student.k8s.aet.cit.tum.de
SERVER_URL=api.whiteboard.student.k8s.aet.cit.tum.de
AUTH_URL=auth.whiteboard.student.k8s.aet.cit.tum.de
GENAI_URL=genai.whiteboard.student.k8s.aet.cit.tum.de
echo "NAMESPACE=production" >> $GITHUB_ENV
echo "IMAGE_TAG=latest" >> $GITHUB_ENV
echo "VALUES_FILE=./infrastructure/whiteboard-app/production.values.yaml" >> $GITHUB_ENV
elif [[ "$BRANCH" == "develop" ]]; then
CLIENT_URL=staging.whiteboard.student.k8s.aet.cit.tum.de
SERVER_URL=staging.api.whiteboard.student.k8s.aet.cit.tum.de
AUTH_URL=staging.auth.whiteboard.student.k8s.aet.cit.tum.de
GENAI_URL=staging.genai.whiteboard.student.k8s.aet.cit.tum.de
echo "NAMESPACE=staging" >> $GITHUB_ENV
echo "IMAGE_TAG=develop" >> $GITHUB_ENV
echo "VALUES_FILE=./infrastructure/whiteboard-app/staging.values.yaml" >> $GITHUB_ENV
Expand All @@ -180,6 +221,7 @@ jobs:
CLIENT_URL=$BRANCH_SAFE.whiteboard.student.k8s.aet.cit.tum.de
SERVER_URL=$BRANCH_SAFE.api.whiteboard.student.k8s.aet.cit.tum.de
AUTH_URL=$BRANCH_SAFE.auth.whiteboard.student.k8s.aet.cit.tum.de
GENAI_URL=$BRANCH_SAFE.genai.whiteboard.student.k8s.aet.cit.tum.de
echo "NAMESPACE=$BRANCH_SAFE" >> $GITHUB_ENV
echo "IMAGE_TAG=$BRANCH_SAFE" >> $GITHUB_ENV
echo "VALUES_FILE=./infrastructure/whiteboard-app/pullrequest.values.yaml" >> $GITHUB_ENV
Expand All @@ -188,10 +230,13 @@ jobs:
echo "CLIENT_URL=$CLIENT_URL" >> $GITHUB_ENV
echo "SERVER_URL=$SERVER_URL" >> $GITHUB_ENV
echo "AUTH_URL=$AUTH_URL" >> $GITHUB_ENV
echo "GENAI_URL=$GENAI_URL" >> $GITHUB_ENV
echo "OPEN_WEB_UI_API_KEY=${{ secrets.OPEN_WEB_UI_API_KEY }}" >> $GITHUB_ENV

echo "CLIENT_URL=$CLIENT_URL" >> $GITHUB_OUTPUT
echo "SERVER_URL=$SERVER_URL" >> $GITHUB_OUTPUT
echo "AUTH_URL=$AUTH_URL" >> $GITHUB_OUTPUT
echo "GENAI_URL=$GENAI_URL" >> $GITHUB_OUTPUT

- name: Set up Kubeconfig
run: |
Expand Down Expand Up @@ -230,9 +275,12 @@ jobs:
--set namespace="${{ env.NAMESPACE }}" \
--set server.image.tag="${{ env.IMAGE_TAG }}" \
--set client.image.tag="${{ env.IMAGE_TAG }}" \
--set genai.image.tag="${{ env.IMAGE_TAG }}" \
--set client.url="${{ env.CLIENT_URL }}" \
--set server.url="${{ env.SERVER_URL }}" \
--set auth.url="${{ env.AUTH_URL }}"
--set auth.url="${{ env.AUTH_URL }}" \
--set genai.url="${{ env.GENAI_URL }}" \
--set genai.apiKey="${{ env.OPEN_WEB_UI_API_KEY }}" \

comment-pr:
needs: deploy
Expand All @@ -242,6 +290,7 @@ jobs:
CLIENT_URL: ${{ needs.deploy.outputs.client_url }}
SERVER_URL: ${{ needs.deploy.outputs.server_url }}
AUTH_URL: ${{ needs.deploy.outputs.auth_url }}
GENAI_URL: ${{ needs.deploy.outputs.genai_url }}
steps:
- name: Comment on Pull Request with URLs
uses: actions/github-script@v6
Expand All @@ -252,6 +301,7 @@ jobs:
const clientUrl = `https://${process.env.CLIENT_URL}`;
const serverUrl = `https://${process.env.SERVER_URL}`;
const authUrl = `https://${process.env.AUTH_URL}`;
const genaiUrl = `https://${process.env.GENAI_URL}`;

// Check existing comments to avoid duplicates
const { data: comments } = await github.rest.issues.listComments({
Expand All @@ -269,6 +319,7 @@ jobs:
- **Client:** [${clientUrl}](${clientUrl})
- **Server:** [${serverUrl}/swagger-ui/index.html](${serverUrl}/swagger-ui/index.html)
- **Keycloak:** [${authUrl}](${authUrl})
- **GenAI:** [${genaiUrl}/docs](${genaiUrl}/docs)
`;

await github.rest.issues.createComment({
Expand Down
3 changes: 0 additions & 3 deletions compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,6 @@ services:
ports:
- "8000:8000"
environment:
DB_HOST: ${DB_HOST:-weaviate}
DB_PORT: ${DB_PORT:-9090}
DB_GRPC_PORT: ${DB_GRPC_PORT:-50051}
OPEN_WEB_UI_API_KEY: ${OPEN_WEB_UI_API_KEY}
SERVER_URL: ${SERVER_URL:-http://localhost:9091}
CLIENT_URL: ${CLIENT_URL:-http://localhost:3000}
Expand Down
33 changes: 32 additions & 1 deletion infrastructure/whiteboard-app/production.values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,28 @@ keycloak:
- name: realm-export
mountPath: /opt/bitnami/keycloak/data/import

genai:
image:
repository: ghcr.io/aet-devops25/team-server-down/genai
tag: latest
pullPolicy: Always
service:
type: ClusterIP
port: 8000
targetPort: 8000
replicaCount: 1
env:
- name: OPEN_WEB_UI_API_KEY
value: '{{ .Values.genai.apiKey }}'
- name: API_URL
value: https://gpu.aet.cit.tum.de/api/chat/completions
- name: SERVER_URL
value: https://api.whiteboard.student.k8s.aet.cit.tum.de
- name: CLIENT_URL
value: https://whiteboard.student.k8s.aet.cit.tum.de
- name: GENAI_URL
value: https://genai.whiteboard.student.k8s.aet.cit.tum

ingress:
enabled: true
className: "nginx"
Expand All @@ -113,6 +135,7 @@ ingress:
- "whiteboard.student.k8s.aet.cit.tum.de"
- "api.whiteboard.student.k8s.aet.cit.tum.de"
- "auth.whiteboard.student.k8s.aet.cit.tum.de"
- "genai.whiteboard.student.k8s.aet.cit.tum.de"
secretName: "whiteboard-devops25-tls"
rules:
- host: "whiteboard.student.k8s.aet.cit.tum.de"
Expand All @@ -138,4 +161,12 @@ ingress:
service:
name: '{{ printf "%s-keycloak" .Release.Name }}'
port:
number: 80
number: 80
- host: "genai.whiteboard.student.k8s.aet.cit.tum.de"
paths:
- path: /
pathType: Prefix
service:
name: '{{ printf "%s-genai" .Release.Name }}'
port:
number: 8000
32 changes: 31 additions & 1 deletion infrastructure/whiteboard-app/pullrequest.values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,27 @@ keycloak:
- name: realm-export
mountPath: /opt/bitnami/keycloak/data/import

genai:
image:
repository: ghcr.io/aet-devops25/team-server-down/genai
tag: ""
pullPolicy: Always
service:
type: ClusterIP
port: 8000
targetPort: 8000
env:
- name: OPEN_WEB_UI_API_KEY
value: '{{ .Values.genai.apiKey }}'
- name: SERVER_URL
value: 'https://{{ .Values.server.url }}'
- name: CLIENT_URL
value: 'https://{{ .Values.client.url }}'
- name: GENAI_URL
value: 'https://{{ .Values.genai.url }}'
- name: API_URL
value: 'https://gpu.aet.cit.tum.de/api/chat/completions'

ingress:
enabled: true
className: "nginx"
Expand All @@ -113,6 +134,7 @@ ingress:
- '{{ .Values.client.url }}'
- '{{ .Values.server.url }}'
- '{{ .Values.auth.url }}'
- '{{ .Values.genai.url }}'
secretName: '{{ .Values.namespace }}-whiteboard-devops25-tls'
rules:
- host: '{{ .Values.client.url }}'
Expand All @@ -138,4 +160,12 @@ ingress:
service:
name: '{{ printf "%s-keycloak" .Release.Name }}'
port:
number: 80
number: 80
- host: '{{ .Values.genai.url }}'
paths:
- path: /
pathType: Prefix
service:
name: '{{ printf "%s-genai" .Release.Name }}'
port:
number: 8000
34 changes: 33 additions & 1 deletion infrastructure/whiteboard-app/staging.values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,29 @@ keycloak:
- name: realm-export
mountPath: /opt/bitnami/keycloak/data/import

genai:
image:
repository: ghcr.io/aet-devops25/team-server-down/genai
tag: develop
pullPolicy: Always
service:
type: ClusterIP
port: 8000
targetPort: 8000
replicaCount: 1
env:
- name: OPEN_WEB_UI_API_KEY
value: '{{ .Values.genai.apiKey }}'
- name: API_URL
value: https://gpu.aet.cit.tum.de/api/chat/completions
- name: SERVER_URL
value: https://staging.api.whiteboard.student.k8s.aet.cit.tum.de
- name: CLIENT_URL
value: https://staging.whiteboard.student.k8s.aet.cit.tum
- name: GENAI_URL
value: https://staging.genai.whiteboard.student.k8s.aet.cit


ingress:
enabled: true
className: "nginx"
Expand All @@ -113,6 +136,7 @@ ingress:
- "staging.whiteboard.student.k8s.aet.cit.tum.de"
- "staging.api.whiteboard.student.k8s.aet.cit.tum.de"
- "staging.auth.whiteboard.student.k8s.aet.cit.tum.de"
- "staging.genai.whiteboard.student.k8s.aet.cit.tum.de"
secretName: "staging-whiteboard-devops25-tls"
rules:
- host: "staging.whiteboard.student.k8s.aet.cit.tum.de"
Expand All @@ -138,4 +162,12 @@ ingress:
service:
name: '{{ printf "%s-keycloak" .Release.Name }}'
port:
number: 80
number: 80
- host: "staging.genai.whiteboard.student.k8s.aet.cit.tum.de"
paths:
- path: /
pathType: Prefix
service:
name: '{{ printf "%s-genai" .Release.Name }}'
port:
number: 8000
32 changes: 32 additions & 0 deletions infrastructure/whiteboard-app/templates/genai-deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: whiteboard-genai
spec:
replicas: {{ .Values.genai.replicaCount }}
selector:
matchLabels:
app: whiteboard-genai-selector
template:
metadata:
labels:
app: whiteboard-genai-selector
spec:
containers:
- name: genai
image: "{{ .Values.genai.image.repository }}:{{ .Values.genai.image.tag }}"
imagePullPolicy: {{ .Values.genai.image.pullPolicy }}
resources:
limits:
cpu: "500m"
memory: "256Mi"
requests:
cpu: "50m"
memory: "50Mi"
ports:
- containerPort: {{ .Values.genai.service.targetPort }}
env:
{{- range .Values.genai.env }}
- name: {{ .name }}
value: {{ tpl .value $ | quote }}
{{- end }}
12 changes: 12 additions & 0 deletions infrastructure/whiteboard-app/templates/genai-service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-genai
spec:
type: {{ .Values.genai.service.type }}
selector:
app: whiteboard-genai-selector
ports:
- port: {{ .Values.genai.service.port }}
targetPort: {{ .Values.genai.service.targetPort }}
protocol: TCP
Loading