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]