# Tekton Task to Detect Changed Services # This task analyzes git changes to determine which services need to be built apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: detect-changed-services namespace: {{ .Values.namespace }} labels: app.kubernetes.io/name: {{ .Values.labels.app.name }} app.kubernetes.io/component: detection spec: workspaces: - name: source description: Workspace containing the source code results: - name: changed-services description: Comma-separated list of changed services steps: - name: detect-changes image: alpine/git script: | #!/bin/bash set -e cd $(workspaces.source.path) # Get the list of changed files CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD 2>/dev/null || git diff --name-only $(git rev-parse --abbrev-ref HEAD)@{upstream} HEAD 2>/dev/null || echo "") if [ -z "$CHANGED_FILES" ]; then # No changes detected, assume all services need building echo "No git changes detected, building all services" echo "all" > $(results.changed-services.path) exit 0 fi # Extract service names from changed file paths CHANGED_SERVICES=$(echo "$CHANGED_FILES" | grep -o 'services/[^/]*' | sed 's/services\/\//' | sort -u | tr '\n' ',' | sed 's/,$//') if [ -z "$CHANGED_SERVICES" ]; then # Changes are in infrastructure or other non-service files echo "infrastructure" > $(results.changed-services.path) else echo "$CHANGED_SERVICES" > $(results.changed-services.path) fi