2026-04-09 00:09:04 +02:00
|
|
|
when:
|
2026-04-10 05:17:56 +02:00
|
|
|
branch: [main, high-performance]
|
2026-04-09 00:09:04 +02:00
|
|
|
event: push
|
|
|
|
|
|
|
|
|
|
matrix:
|
|
|
|
|
SERVICE:
|
|
|
|
|
- gateway
|
|
|
|
|
- users
|
|
|
|
|
- companies
|
|
|
|
|
- job_seekers
|
|
|
|
|
- customers
|
|
|
|
|
- payments
|
|
|
|
|
- employees
|
|
|
|
|
- photographers
|
|
|
|
|
- makeup_artists
|
|
|
|
|
- tutors
|
|
|
|
|
- developers
|
|
|
|
|
- video_editors
|
|
|
|
|
- graphic_designers
|
|
|
|
|
- social_media_managers
|
|
|
|
|
- fitness_trainers
|
|
|
|
|
- catering_services
|
|
|
|
|
- ugc_content_creators
|
|
|
|
|
- cron
|
|
|
|
|
|
|
|
|
|
steps:
|
2026-04-10 05:17:56 +02:00
|
|
|
- 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 "")
|
|
|
|
|
|
|
|
|
|
# Convert matrix SERVICE to path format
|
|
|
|
|
SERVICE_PATH=$(echo "${SERVICE}" | tr '_' '-')
|
|
|
|
|
|
|
|
|
|
# Check if shared crates changed (triggers all services)
|
|
|
|
|
SHARED_CHANGED=false
|
|
|
|
|
if echo "$CHANGED_FILES" | grep -q "^crates/"; then
|
|
|
|
|
SHARED_CHANGED=true
|
|
|
|
|
echo "⚠️ Shared crates changed - will build all services"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Check if this specific service changed
|
|
|
|
|
SERVICE_CHANGED=false
|
|
|
|
|
if echo "$CHANGED_FILES" | grep -q "^apps/${SERVICE_PATH}/"; then
|
|
|
|
|
SERVICE_CHANGED=true
|
|
|
|
|
echo "✅ Service ${SERVICE} has code changes"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Create marker file
|
|
|
|
|
if [ "$SHARED_CHANGED" = "true" ] || [ "$SERVICE_CHANGED" = "true" ]; then
|
|
|
|
|
echo "SHOULD_BUILD=true" > .build-${SERVICE}
|
|
|
|
|
echo "🚀 Will build ${SERVICE}"
|
|
|
|
|
else
|
|
|
|
|
echo "SHOULD_BUILD=false" > .build-${SERVICE}
|
|
|
|
|
echo "⏭️ Skipping ${SERVICE} - no changes detected"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Export for other steps
|
|
|
|
|
cat .build-${SERVICE} >> ${CI_ENV}
|
|
|
|
|
|
|
|
|
|
- name: build
|
2026-04-09 01:11:18 +02:00
|
|
|
image: woodpeckerci/plugin-docker-buildx:5.0.0
|
2026-04-09 00:09:04 +02:00
|
|
|
settings:
|
|
|
|
|
registry: ghcr.io
|
|
|
|
|
repo: ghcr.io/traceworks2023/nxtgauge-rust-${SERVICE}
|
|
|
|
|
context: .
|
2026-04-10 05:17:56 +02:00
|
|
|
dockerfile: Dockerfile.optimized
|
|
|
|
|
build_args:
|
|
|
|
|
- SERVICE_NAME=${SERVICE}
|
2026-04-09 00:09:04 +02:00
|
|
|
tags:
|
2026-04-10 05:17:56 +02:00
|
|
|
- ${CI_COMMIT_SHA}
|
|
|
|
|
- latest
|
2026-04-09 00:09:04 +02:00
|
|
|
- high-performance-latest
|
2026-04-10 05:24:30 +02:00
|
|
|
username:
|
|
|
|
|
from_secret: GHCR_USERNAME
|
|
|
|
|
password:
|
|
|
|
|
from_secret: GHCR_TOKEN
|
2026-04-09 00:09:04 +02:00
|
|
|
platforms: linux/amd64
|
2026-04-10 05:17:56 +02:00
|
|
|
when:
|
|
|
|
|
- evaluate: 'env.SHOULD_BUILD == "true"'
|
|
|
|
|
|
|
|
|
|
- name: deploy
|
|
|
|
|
image: bitnami/kubectl:latest
|
2026-04-10 05:24:30 +02:00
|
|
|
environment:
|
|
|
|
|
KUBE_CONFIG:
|
|
|
|
|
from_secret: kube_config
|
2026-04-10 05:17:56 +02:00
|
|
|
commands:
|
|
|
|
|
- |
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
# Check if we should deploy
|
|
|
|
|
if [ "${SHOULD_BUILD}" != "true" ]; then
|
|
|
|
|
echo "⏭️ Skipping deployment for ${SERVICE} - no changes"
|
|
|
|
|
exit 0
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Setup kubeconfig
|
|
|
|
|
mkdir -p ~/.kube
|
|
|
|
|
echo "$KUBE_CONFIG" | base64 -d > ~/.kube/config
|
|
|
|
|
chmod 600 ~/.kube/config
|
|
|
|
|
|
|
|
|
|
# Convert service name to Kubernetes deployment name
|
|
|
|
|
DEPLOYMENT_NAME=$(echo "${SERVICE}" | tr '_' '-')
|
|
|
|
|
NAMESPACE="nxtgauge"
|
|
|
|
|
|
|
|
|
|
echo "🚀 Deploying ${SERVICE} (deployment: nxtgauge-rust-${DEPLOYMENT_NAME})..."
|
|
|
|
|
|
|
|
|
|
# Trigger rolling restart to pick up new image
|
|
|
|
|
kubectl rollout restart deployment/nxtgauge-rust-${DEPLOYMENT_NAME} -n ${NAMESPACE}
|
|
|
|
|
|
|
|
|
|
# Wait for rollout to complete (with timeout)
|
|
|
|
|
echo "⏳ Waiting for rollout to complete..."
|
|
|
|
|
kubectl rollout status deployment/nxtgauge-rust-${DEPLOYMENT_NAME} -n ${NAMESPACE} --timeout=300s
|
|
|
|
|
|
|
|
|
|
echo "✅ ${SERVICE} deployed successfully!"
|
|
|
|
|
|
|
|
|
|
# Show deployment status
|
|
|
|
|
kubectl get deployment/nxtgauge-rust-${DEPLOYMENT_NAME} -n ${NAMESPACE}
|
|
|
|
|
when:
|
|
|
|
|
- evaluate: 'env.SHOULD_BUILD == "true"'
|
|
|
|
|
|
|
|
|
|
- name: notify-success
|
|
|
|
|
image: alpine:latest
|
|
|
|
|
commands:
|
|
|
|
|
- echo "✅ Pipeline completed successfully for ${SERVICE}"
|
|
|
|
|
when:
|
|
|
|
|
- evaluate: 'env.SHOULD_BUILD == "true"'
|
|
|
|
|
- status: success
|
|
|
|
|
|
|
|
|
|
- name: notify-failure
|
|
|
|
|
image: alpine:latest
|
|
|
|
|
commands:
|
|
|
|
|
- echo "❌ Pipeline failed for ${SERVICE}"
|
|
|
|
|
- echo "Check logs for details"
|
|
|
|
|
when:
|
|
|
|
|
- evaluate: 'env.SHOULD_BUILD == "true"'
|
|
|
|
|
- status: failure
|