Files
turbovault-app/.gitea/workflows/build-and-deploy.yml
2026-03-29 05:34:40 -04:00

93 lines
2.9 KiB
YAML

name: Build and Deploy
on:
push:
tags:
- 'v*.*.*'
workflow_dispatch:
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Extract version from tag
id: version
run: |
if [[ "${{ github.ref }}" =~ ^refs/tags/v(.*)$ ]]; then
echo "version=${BASH_REMATCH[1]}" >> $GITHUB_OUTPUT
echo "tag=${BASH_REMATCH[0]#refs/tags/}" >> $GITHUB_OUTPUT
else
echo "version=latest" >> $GITHUB_OUTPUT
echo "tag=latest" >> $GITHUB_OUTPUT
fi
- name: Log in to Gitea Container Registry
uses: docker/login-action@v3
with:
registry: gitea.kazcloud.dev
username: ${{ github.actor }}
password: ${{ secrets.GITEA_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
gitea.kazcloud.dev/ryankazokas/turbovault-app:${{ steps.version.outputs.tag }}
gitea.kazcloud.dev/ryankazokas/turbovault-app:latest
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Deploy to Kubernetes
env:
KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }}
run: |
# Setup kubectl
mkdir -p ~/.kube
echo "$KUBECONFIG_CONTENT" | base64 -d > ~/.kube/config
chmod 600 ~/.kube/config
# Deploy
echo "🚀 Deploying version ${{ steps.version.outputs.tag }} to Kubernetes..."
kubectl set image deployment/turbovault \
turbovault=gitea.kazcloud.dev/ryankazokas/turbovault-app:${{ steps.version.outputs.tag }} \
-n turbovault
# Wait for rollout
kubectl rollout status deployment/turbovault -n turbovault --timeout=5m
echo "✅ Deployment complete!"
# Show current pods
kubectl get pods -n turbovault -l app=turbovault
- name: Deployment summary
if: success()
run: |
echo "✅ Build and deployment successful!"
echo ""
echo "📦 Image: gitea.kazcloud.dev/ryankazokas/turbovault-app:${{ steps.version.outputs.tag }}"
echo "🚀 Deployed to: turbovault namespace"
echo ""
echo "View logs:"
echo "kubectl logs -f -l app=turbovault -n turbovault"
- name: Rollback on failure
if: failure()
env:
KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }}
run: |
echo "❌ Deployment failed! Rolling back..."
mkdir -p ~/.kube
echo "$KUBECONFIG_CONTENT" | base64 -d > ~/.kube/config
kubectl rollout undo deployment/turbovault -n turbovault || true
echo "⚠️ Attempted rollback. Check cluster status manually."