91 lines
2.5 KiB
YAML
91 lines
2.5 KiB
YAML
when:
|
|
branch: [main, high-performance]
|
|
event: push
|
|
|
|
steps:
|
|
- name: detect-changes
|
|
image: alpine/git
|
|
commands:
|
|
- apk add --no-cache bash
|
|
- |
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
# Get changed files from last commit
|
|
CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD || echo "")
|
|
|
|
# Check if relevant files changed (src, package.json, Dockerfile, etc.)
|
|
RELEVANT_CHANGED=false
|
|
if echo "$CHANGED_FILES" | grep -qE "^(src/|package\.json|package-lock\.json|Dockerfile|vite\.config|tsconfig|public/)"; then
|
|
RELEVANT_CHANGED=true
|
|
echo "✅ Frontend code changed - will build"
|
|
fi
|
|
|
|
# Exit with code 78 to skip subsequent steps if no changes
|
|
if [ "$RELEVANT_CHANGED" = "true" ]; then
|
|
echo "🚀 Will build frontend"
|
|
exit 0
|
|
else
|
|
echo "⏭️ Skipping frontend - no relevant changes"
|
|
exit 78
|
|
fi
|
|
|
|
- name: build-and-push
|
|
image: woodpeckerci/plugin-docker-buildx:5.0.0
|
|
settings:
|
|
registry: ghcr.io
|
|
repo: ghcr.io/traceworks2023/nxtgauge-frontend-solid
|
|
dockerfile: Dockerfile
|
|
tags:
|
|
- ${CI_COMMIT_SHA}
|
|
- latest
|
|
- high-performance-latest
|
|
username:
|
|
from_secret: GHCR_USERNAME
|
|
password:
|
|
from_secret: GHCR_TOKEN
|
|
platforms: linux/amd64
|
|
|
|
- name: deploy
|
|
image: bitnami/kubectl:latest
|
|
environment:
|
|
KUBE_CONFIG:
|
|
from_secret: kube_config
|
|
commands:
|
|
- |
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
# Setup kubeconfig
|
|
mkdir -p ~/.kube
|
|
echo "$KUBE_CONFIG" | base64 -d > ~/.kube/config
|
|
chmod 600 ~/.kube/config
|
|
|
|
NAMESPACE="nxtgauge"
|
|
DEPLOYMENT_NAME="nxtgauge-frontend-solid"
|
|
|
|
echo "🚀 Deploying frontend..."
|
|
|
|
# Trigger rolling restart to pick up new image
|
|
kubectl rollout restart deployment/${DEPLOYMENT_NAME} -n ${NAMESPACE}
|
|
|
|
# Wait for rollout to complete
|
|
echo "⏳ Waiting for rollout to complete..."
|
|
kubectl rollout status deployment/${DEPLOYMENT_NAME} -n ${NAMESPACE} --timeout=300s
|
|
|
|
echo "✅ Frontend deployed successfully!"
|
|
|
|
# Show deployment status
|
|
kubectl get deployment/${DEPLOYMENT_NAME} -n ${NAMESPACE}
|
|
|
|
- name: notify
|
|
image: alpine:latest
|
|
commands:
|
|
- |
|
|
if [ "${CI_PIPELINE_STATUS}" = "success" ]; then
|
|
echo "✅ Frontend pipeline completed successfully"
|
|
else
|
|
echo "❌ Frontend pipeline failed"
|
|
fi
|
|
when:
|
|
status: [success, failure]
|