Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
141 changes: 141 additions & 0 deletions .github/workflows/k8s-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
name: Kubernetes Deploy

on:
push:
branches:
- 'master'
- 'cma/k8s-deployment'
paths:
- 'client_web/**'
- 'client_mobile/**'
- 'server/**'
- 'config/**'
- 'docker-compose.prod.yml'
- '.github/workflows/k8s-deploy.yml'

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install doctl
uses: digitalocean/action-doctl@v2
with:
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}

# Build server images
- name: Build server image
run: |
echo "Building server image..."
docker build -t server:latest -f ./server/Dockerfile.prod ./server
docker tag server:latest registry.digitalocean.com/area/server
echo "Server image built successfully"

- name: Build server action consumer image
run: |
echo "Building server action consumer image..."
docker build -t server-action-consumer:latest -f ./server/Dockerfile_action_consumer.prod ./server
docker tag server-action-consumer:latest registry.digitalocean.com/area/server-action-consumer
echo "Server action consumer image built successfully"

- name: Build server reaction consumer image
run: |
echo "Building server reaction consumer image..."
docker build -t server-reaction-consumer:latest -f ./server/Dockerfile_reaction_consumer.prod ./server
docker tag server-reaction-consumer:latest registry.digitalocean.com/area/server-reaction-consumer
echo "Server reaction consumer image built successfully"

# Build client images
- name: Build client web image
run: |
echo "Building client web image..."
docker build -t client-web:latest -f ./client_web/Dockerfile.prod ./client_web
docker tag client-web:latest registry.digitalocean.com/area/client-web
echo "Client web image built successfully"

- name: Build client mobile builder image
run: |
echo "Building client mobile builder image..."
docker build -t client-mobile-builder:latest -f ./client_mobile/Dockerfile.prod ./client_mobile
docker tag client-mobile-builder:latest registry.digitalocean.com/area/client-mobile-builder
echo "Client mobile builder image built successfully"

# Log in to DigitalOcean Container Registry
- name: Log in to DigitalOcean Container Registry
run: doctl registry login --expiry-seconds 1200

# Push all images
- name: Push images to registry
run: |
echo "Pushing images to registry..."

echo "Pushing server images..."
docker push registry.digitalocean.com/area/server

echo "Pushing server action consumer image..."
docker push registry.digitalocean.com/area/server-action-consumer

echo "Pushing server reaction consumer image..."
docker push registry.digitalocean.com/area/server-reaction-consumer

echo "Pushing client web image..."
docker push registry.digitalocean.com/area/client-web

echo "Pushing client mobile builder image..."
docker push registry.digitalocean.com/area/client-mobile-builder

echo "All images pushed successfully"

- name: Save DigitalOcean kubeconfig
run: |
echo "Saving DigitalOcean kubeconfig..."
doctl kubernetes cluster kubeconfig save --expiry-seconds 600 area-k8s
echo "Kubeconfig saved successfully"

- name: Deploy to DigitalOcean Kubernetes
run: |
echo "Deploying to Kubernetes cluster..."

# Delete the existing job if it exists
echo "Cleaning up previous mobile builder job..."
kubectl delete job client-mobile-builder --ignore-not-found=true

# Wait a moment to ensure cleanup
sleep 5

# Apply the new configuration
echo "Applying new configuration..."
kubectl apply -f $GITHUB_WORKSPACE/config/deployment.yml
echo "Deployment initiated successfully"

- name: Verify deployments
run: |
echo "Starting deployment verification..."

echo "Checking pod status..."
kubectl get pods

echo "Verifying server deployment..."
kubectl describe deployment/server
kubectl rollout status deployment/server --timeout=600s

echo "Checking server logs..."
SERVER_POD=$(kubectl get pods -l app=server -o jsonpath="{.items[0].metadata.name}")
kubectl logs $SERVER_POD

echo "Verifying server action consumer deployment..."
kubectl rollout status deployment/server-action-consumer

echo "Verifying server reaction consumer deployment..."
kubectl rollout status deployment/server-reaction-consumer

echo "Verifying client web deployment..."
kubectl rollout status deployment/client-web

echo "Verifying client mobile builder job..."
kubectl wait --for=condition=complete job/client-mobile-builder --timeout=500s

echo "All deployments verified successfully"

Loading