154 lines
4.9 KiB
YAML
154 lines
4.9 KiB
YAML
# Tekton Detect Changed Services Task for Bakery-IA CI/CD
|
|
# This task identifies which services have changed in the repository
|
|
|
|
apiVersion: tekton.dev/v1beta1
|
|
kind: Task
|
|
metadata:
|
|
name: detect-changed-services
|
|
namespace: tekton-pipelines
|
|
labels:
|
|
app.kubernetes.io/name: bakery-ia-cicd
|
|
app.kubernetes.io/component: detect
|
|
spec:
|
|
workspaces:
|
|
- name: source
|
|
description: Source code workspace
|
|
params:
|
|
- name: base-ref
|
|
type: string
|
|
description: Base reference for comparison (default HEAD~1)
|
|
default: "HEAD~1"
|
|
results:
|
|
- name: changed-services
|
|
description: Comma-separated list of changed services
|
|
- name: changed-files-count
|
|
description: Number of files changed
|
|
steps:
|
|
- name: detect
|
|
image: alpine/git:2.43.0
|
|
script: |
|
|
#!/bin/sh
|
|
set -e
|
|
|
|
SOURCE_PATH="$(workspaces.source.path)"
|
|
BASE_REF="$(params.base-ref)"
|
|
|
|
cd "$SOURCE_PATH"
|
|
|
|
echo "============================================"
|
|
echo "Detect Changed Services"
|
|
echo "============================================"
|
|
echo "Base ref: $BASE_REF"
|
|
echo "============================================"
|
|
|
|
# Get list of changed files compared to base reference
|
|
echo ""
|
|
echo "Detecting changed files..."
|
|
|
|
# Try to get diff, fall back to listing all files if this is the first commit
|
|
CHANGED_FILES=$(git diff --name-only "$BASE_REF" HEAD 2>/dev/null || git ls-tree -r HEAD --name-only)
|
|
|
|
FILE_COUNT=$(echo "$CHANGED_FILES" | grep -c "." || echo "0")
|
|
echo "Found $FILE_COUNT changed files"
|
|
echo "$FILE_COUNT" > $(results.changed-files-count.path)
|
|
|
|
if [ "$FILE_COUNT" = "0" ]; then
|
|
echo "No files changed"
|
|
echo "none" > $(results.changed-services.path)
|
|
exit 0
|
|
fi
|
|
|
|
echo ""
|
|
echo "Changed files:"
|
|
echo "$CHANGED_FILES" | head -20
|
|
if [ "$FILE_COUNT" -gt 20 ]; then
|
|
echo "... and $((FILE_COUNT - 20)) more files"
|
|
fi
|
|
|
|
# Map files to services using simple shell (no bash arrays)
|
|
echo ""
|
|
echo "Mapping files to services..."
|
|
|
|
CHANGED_SERVICES=""
|
|
|
|
# Process each file
|
|
echo "$CHANGED_FILES" | while read -r file; do
|
|
if [ -z "$file" ]; then
|
|
continue
|
|
fi
|
|
|
|
# Check services directory
|
|
if echo "$file" | grep -q "^services/"; then
|
|
SERVICE=$(echo "$file" | cut -d'/' -f2)
|
|
if [ -n "$SERVICE" ] && ! echo "$CHANGED_SERVICES" | grep -q "$SERVICE"; then
|
|
if [ -z "$CHANGED_SERVICES" ]; then
|
|
CHANGED_SERVICES="$SERVICE"
|
|
else
|
|
CHANGED_SERVICES="$CHANGED_SERVICES,$SERVICE"
|
|
fi
|
|
echo "$CHANGED_SERVICES" > /tmp/services.txt
|
|
fi
|
|
fi
|
|
|
|
# Check frontend
|
|
if echo "$file" | grep -q "^frontend/"; then
|
|
if ! echo "$CHANGED_SERVICES" | grep -q "frontend"; then
|
|
if [ -z "$CHANGED_SERVICES" ]; then
|
|
CHANGED_SERVICES="frontend"
|
|
else
|
|
CHANGED_SERVICES="$CHANGED_SERVICES,frontend"
|
|
fi
|
|
echo "$CHANGED_SERVICES" > /tmp/services.txt
|
|
fi
|
|
fi
|
|
|
|
# Check gateway
|
|
if echo "$file" | grep -q "^gateway/"; then
|
|
if ! echo "$CHANGED_SERVICES" | grep -q "gateway"; then
|
|
if [ -z "$CHANGED_SERVICES" ]; then
|
|
CHANGED_SERVICES="gateway"
|
|
else
|
|
CHANGED_SERVICES="$CHANGED_SERVICES,gateway"
|
|
fi
|
|
echo "$CHANGED_SERVICES" > /tmp/services.txt
|
|
fi
|
|
fi
|
|
|
|
# Check infrastructure
|
|
if echo "$file" | grep -q "^infrastructure/"; then
|
|
if ! echo "$CHANGED_SERVICES" | grep -q "infrastructure"; then
|
|
if [ -z "$CHANGED_SERVICES" ]; then
|
|
CHANGED_SERVICES="infrastructure"
|
|
else
|
|
CHANGED_SERVICES="$CHANGED_SERVICES,infrastructure"
|
|
fi
|
|
echo "$CHANGED_SERVICES" > /tmp/services.txt
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Read the accumulated services
|
|
if [ -f /tmp/services.txt ]; then
|
|
CHANGED_SERVICES=$(cat /tmp/services.txt)
|
|
fi
|
|
|
|
echo ""
|
|
echo "============================================"
|
|
|
|
# Output result
|
|
if [ -z "$CHANGED_SERVICES" ]; then
|
|
echo "No service changes detected"
|
|
echo "none" > $(results.changed-services.path)
|
|
else
|
|
echo "Detected changes in services: $CHANGED_SERVICES"
|
|
echo "$CHANGED_SERVICES" > $(results.changed-services.path)
|
|
fi
|
|
|
|
echo "============================================"
|
|
resources:
|
|
limits:
|
|
cpu: 200m
|
|
memory: 128Mi
|
|
requests:
|
|
cpu: 50m
|
|
memory: 64Mi |