64 lines
2.1 KiB
YAML
64 lines
2.1 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
|
|
spec:
|
|
workspaces:
|
|
- name: source
|
|
results:
|
|
- name: changed-services
|
|
description: Comma-separated list of changed services
|
|
steps:
|
|
- name: detect
|
|
image: alpine/git
|
|
script: |
|
|
#!/bin/sh
|
|
set -e
|
|
cd $(workspaces.source.path)
|
|
|
|
echo "Detecting changed files..."
|
|
# Get list of changed files compared to previous commit
|
|
CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD 2>/dev/null || git diff --name-only HEAD)
|
|
|
|
echo "Changed files: $CHANGED_FILES"
|
|
|
|
# Map files to services
|
|
CHANGED_SERVICES=()
|
|
for file in $CHANGED_FILES; do
|
|
if [[ $file == services/* ]]; then
|
|
SERVICE=$(echo $file | cut -d'/' -f2)
|
|
# Only add unique service names
|
|
if [[ ! " ${CHANGED_SERVICES[@]} " =~ " ${SERVICE} " ]]; then
|
|
CHANGED_SERVICES+=("$SERVICE")
|
|
fi
|
|
elif [[ $file == frontend/* ]]; then
|
|
CHANGED_SERVICES+=("frontend")
|
|
break
|
|
elif [[ $file == gateway/* ]]; then
|
|
CHANGED_SERVICES+=("gateway")
|
|
break
|
|
fi
|
|
done
|
|
|
|
# If no specific services changed, check for infrastructure changes
|
|
if [ ${#CHANGED_SERVICES[@]} -eq 0 ]; then
|
|
for file in $CHANGED_FILES; do
|
|
if [[ $file == infrastructure/* ]]; then
|
|
CHANGED_SERVICES+=("infrastructure")
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Output result
|
|
if [ ${#CHANGED_SERVICES[@]} -eq 0 ]; then
|
|
echo "No service changes detected"
|
|
echo "none" | tee $(results.changed-services.path)
|
|
else
|
|
echo "Detected changes in services: ${CHANGED_SERVICES[@]}"
|
|
echo $(printf "%s," "${CHANGED_SERVICES[@]}" | sed 's/,$//') | tee $(results.changed-services.path)
|
|
fi |