feat(woodpecker): add change detection and selective builds
- Add detect-changes step to check for code changes - Add multiple tags (commit SHA, latest, branch-latest) - Add Kubernetes deployment step - Skip build/deploy if no relevant file changes - Consistent with backend CI pipeline
This commit is contained in:
parent
f32cefeab9
commit
f47c681073
2 changed files with 96 additions and 6 deletions
|
|
@ -1,8 +1,40 @@
|
|||
when:
|
||||
branch: high-performance
|
||||
branch: [main, high-performance]
|
||||
event: push
|
||||
|
||||
steps:
|
||||
# Step 1: Detect if changes exist
|
||||
- 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
|
||||
|
||||
# Create marker file
|
||||
if [ "$RELEVANT_CHANGED" = "true" ]; then
|
||||
echo "SHOULD_BUILD=true" > .build-marker
|
||||
echo "🚀 Will build frontend"
|
||||
else
|
||||
echo "SHOULD_BUILD=false" > .build-marker
|
||||
echo "⏭️ Skipping frontend - no relevant changes"
|
||||
fi
|
||||
|
||||
# Export for other steps
|
||||
cat .build-marker >> ${CI_ENV}
|
||||
|
||||
# Step 2: Build and push Docker image (only if changed)
|
||||
- name: build-and-push
|
||||
image: woodpeckerci/plugin-docker-buildx:5.0.0
|
||||
settings:
|
||||
|
|
@ -10,14 +42,70 @@ steps:
|
|||
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
|
||||
when:
|
||||
- evaluate: 'env.SHOULD_BUILD == "true"'
|
||||
|
||||
# Step 3: Deploy to Kubernetes (only if changed)
|
||||
- name: deploy
|
||||
image: bitnami/kubectl:latest
|
||||
secrets: [kube_config]
|
||||
commands:
|
||||
- |
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
|
||||
|
||||
|
||||
# Check if we should deploy
|
||||
if [ "${SHOULD_BUILD}" != "true" ]; then
|
||||
echo "⏭️ Skipping deployment - no changes"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 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}
|
||||
when:
|
||||
- evaluate: 'env.SHOULD_BUILD == "true"'
|
||||
- branch: [main, high-performance]
|
||||
|
||||
# Step 4: Notify status
|
||||
- name: notify
|
||||
image: alpine:latest
|
||||
commands:
|
||||
- |
|
||||
if [ "${SHOULD_BUILD}" = "true" ]; then
|
||||
if [ "${CI_PIPELINE_STATUS}" = "success" ]; then
|
||||
echo "✅ Frontend pipeline completed successfully"
|
||||
else
|
||||
echo "❌ Frontend pipeline failed"
|
||||
fi
|
||||
else
|
||||
echo "⏭️ Frontend was skipped (no changes)"
|
||||
fi
|
||||
when:
|
||||
- status: [success, failure]
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ vinxi starting dev server
|
|||
3:28:19 AM [vite] (ssr) page reload vinxi/routes
|
||||
3:30:32 AM [vite] (ssr) page reload vinxi/routes
|
||||
3:31:20 AM [vite] (ssr) page reload vinxi/routes
|
||||
y-verification-flow.spec.ts
|
||||
3:26:54 AM [vite] (client) hmr update /src/app.tsx, /src/app.css
|
||||
5:20:52 AM [vite] (ssr) page reload .woodpecker.yml
|
||||
t) hmr update /src/app.tsx, /src/app.css
|
||||
3:26:54 AM [vite] (ssr) page reload vinxi/routes
|
||||
3:26:54 AM [vite] (client) hmr update /src/app.tsx, /src/app.css
|
||||
3:26:54 AM [vite] (ssr) page reload vinxi/routes
|
||||
|
|
@ -23,3 +23,5 @@ y-verification-flow.spec.ts
|
|||
3:30:32 AM [vite] (ssr) page reload vinxi/routes
|
||||
3:31:20 AM [vite] (client) hmr update /src/app.tsx, /src/app.css
|
||||
3:31:20 AM [vite] (ssr) page reload vinxi/routes
|
||||
5:20:52 AM [vite] (ssr) page reload .woodpecker.yml
|
||||
5:20:53 AM [vite] (client) page reload .woodpecker.yml
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue