mirror of
https://github.com/taylanbakircioglu/flowfish.git
synced 2026-09-17 16:15:19 +00:00
d7ca50b387
Multi-cluster dependency mapping, real-time network monitoring, impact analysis, and CI/CD integration capabilities. Made-with: Cursor
230 lines
8.8 KiB
Bash
230 lines
8.8 KiB
Bash
#!/bin/bash
|
||
# ==============================================================================
|
||
# Flowfish Change Detection - Standalone Azure DevOps Task
|
||
# ==============================================================================
|
||
# Bu script ayrı bir bash task olarak çalışır ve değişkenleri set eder.
|
||
# Sonraki task'lar bu değişkenleri kullanabilir.
|
||
#
|
||
# Kullanım (Azure DevOps Classic Pipeline):
|
||
# Task 1: Bu script'i çalıştır
|
||
# Task 2: Build script (değişkenleri kullanır)
|
||
#
|
||
# Set edilen Azure DevOps değişkenleri:
|
||
# BACKEND_CHANGED, FRONTEND_CHANGED, SHARED_CHANGED
|
||
# API_GATEWAY_CHANGED, CLUSTER_MANAGER_CHANGED, ANALYSIS_ORCHESTRATOR_CHANGED
|
||
# GRAPH_WRITER_CHANGED, GRAPH_QUERY_CHANGED, TIMESERIES_WRITER_CHANGED
|
||
# INGESTION_SERVICE_CHANGED
|
||
# ==============================================================================
|
||
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo "🔍 CHANGE DETECTION"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
||
# Son başarılı build'in commit hash'ini al
|
||
get_last_successful_commit() {
|
||
# OAuth token kontrolü
|
||
if [ -z "$SYSTEM_ACCESSTOKEN" ]; then
|
||
echo ""
|
||
return 0
|
||
fi
|
||
|
||
# jq yüklü mü kontrol et
|
||
if ! command -v jq &> /dev/null; then
|
||
echo ""
|
||
return 0
|
||
fi
|
||
|
||
local api_url="${SYSTEM_COLLECTIONURI}${SYSTEM_TEAMPROJECT}/_apis/build/builds?definitions=${SYSTEM_DEFINITIONID}&statusFilter=completed&resultFilter=succeeded&\$top=1&api-version=6.0"
|
||
|
||
local response=$(curl -s -u ":${SYSTEM_ACCESSTOKEN}" "$api_url" 2>/dev/null)
|
||
|
||
if [ -z "$response" ]; then
|
||
echo ""
|
||
return 0
|
||
fi
|
||
|
||
local last_commit=$(echo "$response" | jq -r '.value[0].sourceVersion // empty' 2>/dev/null)
|
||
|
||
echo "$last_commit"
|
||
return 0
|
||
}
|
||
|
||
# İki commit arasındaki değişen dosyaları al
|
||
get_changed_files() {
|
||
local base_commit="$1"
|
||
local current_commit="${BUILD_SOURCEVERSION:-HEAD}"
|
||
|
||
if [ -z "$base_commit" ]; then
|
||
# İlk build - tüm dosyaları değişmiş kabul et
|
||
git ls-files 2>/dev/null || echo ""
|
||
else
|
||
# Değişen dosyaları al
|
||
git diff --name-only "$base_commit" "$current_commit" 2>/dev/null || git ls-files 2>/dev/null || echo ""
|
||
fi
|
||
return 0
|
||
}
|
||
|
||
# Belirli bir path pattern'ine sahip değişiklik var mı kontrol et
|
||
has_changes_in_path() {
|
||
local pattern="$1"
|
||
local changed_files="$2"
|
||
|
||
local count=$(echo "$changed_files" | grep -E "$pattern" 2>/dev/null | wc -l | tr -d ' ' || echo "0")
|
||
|
||
# Boş string kontrolü
|
||
if [ -z "$count" ]; then
|
||
count=0
|
||
fi
|
||
|
||
echo "$count"
|
||
return 0
|
||
}
|
||
|
||
# Azure DevOps variable set etme fonksiyonu
|
||
# Aynı job içindeki sonraki task'lar bu değişkenlere erişebilir
|
||
set_variable() {
|
||
local name="$1"
|
||
local value="$2"
|
||
echo "##vso[task.setvariable variable=$name]$value"
|
||
echo " $name = $value"
|
||
}
|
||
|
||
# ========================================
|
||
# MAIN LOGIC
|
||
# ========================================
|
||
|
||
# Build-all flag kontrolü
|
||
if [ "${BUILD_ALL}" = "true" ]; then
|
||
echo "⚠️ BUILD_ALL=true - Tüm servisler derlenecek"
|
||
echo ""
|
||
echo "📋 Setting Azure DevOps Variables:"
|
||
set_variable "BACKEND_CHANGED" "1"
|
||
set_variable "FRONTEND_CHANGED" "1"
|
||
set_variable "SHARED_CHANGED" "1"
|
||
set_variable "API_GATEWAY_CHANGED" "1"
|
||
set_variable "CLUSTER_MANAGER_CHANGED" "1"
|
||
set_variable "ANALYSIS_ORCHESTRATOR_CHANGED" "1"
|
||
set_variable "GRAPH_WRITER_CHANGED" "1"
|
||
set_variable "GRAPH_QUERY_CHANGED" "1"
|
||
set_variable "TIMESERIES_WRITER_CHANGED" "1"
|
||
set_variable "INGESTION_SERVICE_CHANGED" "1"
|
||
echo ""
|
||
echo "✅ Change detection completed!"
|
||
exit 0
|
||
fi
|
||
|
||
# Son başarılı build commit'ini al
|
||
last_commit=$(get_last_successful_commit)
|
||
|
||
if [ -z "$last_commit" ]; then
|
||
echo "⚠️ İlk build veya API erişimi yok - Tüm servisler derlenecek"
|
||
echo ""
|
||
echo "📋 Setting Azure DevOps Variables:"
|
||
set_variable "BACKEND_CHANGED" "1"
|
||
set_variable "FRONTEND_CHANGED" "1"
|
||
set_variable "SHARED_CHANGED" "1"
|
||
set_variable "API_GATEWAY_CHANGED" "1"
|
||
set_variable "CLUSTER_MANAGER_CHANGED" "1"
|
||
set_variable "ANALYSIS_ORCHESTRATOR_CHANGED" "1"
|
||
set_variable "GRAPH_WRITER_CHANGED" "1"
|
||
set_variable "GRAPH_QUERY_CHANGED" "1"
|
||
set_variable "TIMESERIES_WRITER_CHANGED" "1"
|
||
set_variable "INGESTION_SERVICE_CHANGED" "1"
|
||
echo ""
|
||
echo "✅ Change detection completed!"
|
||
exit 0
|
||
fi
|
||
|
||
echo "📌 Son başarılı build: ${last_commit:0:7}"
|
||
echo "📌 Mevcut commit: ${BUILD_SOURCEVERSION:0:7}"
|
||
|
||
# Değişen dosyaları al
|
||
changed_files=$(get_changed_files "$last_commit")
|
||
|
||
total_changes=$(echo "$changed_files" | grep -v '^$' | wc -l | tr -d ' ')
|
||
total_changes=${total_changes:-0}
|
||
|
||
echo "📊 Toplam değişen dosya: $total_changes"
|
||
echo ""
|
||
|
||
# Değişiklikleri hesapla
|
||
SHARED_CHANGED=$(has_changes_in_path "^(proto/|shared/)" "$changed_files")
|
||
BACKEND_CHANGED=$(has_changes_in_path "^backend/" "$changed_files")
|
||
FRONTEND_CHANGED=$(has_changes_in_path "^frontend/" "$changed_files")
|
||
API_GATEWAY_CHANGED=$(has_changes_in_path "^services/api-gateway/" "$changed_files")
|
||
CLUSTER_MANAGER_CHANGED=$(has_changes_in_path "^services/cluster-manager/" "$changed_files")
|
||
ANALYSIS_ORCHESTRATOR_CHANGED=$(has_changes_in_path "^services/analysis-orchestrator/" "$changed_files")
|
||
GRAPH_WRITER_CHANGED=$(has_changes_in_path "^services/graph-writer/" "$changed_files")
|
||
GRAPH_QUERY_CHANGED=$(has_changes_in_path "^services/graph-query/" "$changed_files")
|
||
TIMESERIES_WRITER_CHANGED=$(has_changes_in_path "^services/timeseries-writer/" "$changed_files")
|
||
INGESTION_SERVICE_CHANGED=$(has_changes_in_path "^services/ingestion-service/" "$changed_files")
|
||
|
||
# Varsayılan değer ataması
|
||
SHARED_CHANGED=${SHARED_CHANGED:-0}
|
||
BACKEND_CHANGED=${BACKEND_CHANGED:-0}
|
||
FRONTEND_CHANGED=${FRONTEND_CHANGED:-0}
|
||
API_GATEWAY_CHANGED=${API_GATEWAY_CHANGED:-0}
|
||
CLUSTER_MANAGER_CHANGED=${CLUSTER_MANAGER_CHANGED:-0}
|
||
ANALYSIS_ORCHESTRATOR_CHANGED=${ANALYSIS_ORCHESTRATOR_CHANGED:-0}
|
||
GRAPH_WRITER_CHANGED=${GRAPH_WRITER_CHANGED:-0}
|
||
GRAPH_QUERY_CHANGED=${GRAPH_QUERY_CHANGED:-0}
|
||
TIMESERIES_WRITER_CHANGED=${TIMESERIES_WRITER_CHANGED:-0}
|
||
INGESTION_SERVICE_CHANGED=${INGESTION_SERVICE_CHANGED:-0}
|
||
|
||
# Proto/shared değişikliği varsa tüm microservices'i etkiler
|
||
if [ "${SHARED_CHANGED:-0}" -gt 0 ] 2>/dev/null; then
|
||
echo "⚠️ Proto/Shared değişikliği - Tüm microservices etkilenecek"
|
||
API_GATEWAY_CHANGED=1
|
||
CLUSTER_MANAGER_CHANGED=1
|
||
ANALYSIS_ORCHESTRATOR_CHANGED=1
|
||
GRAPH_WRITER_CHANGED=1
|
||
GRAPH_QUERY_CHANGED=1
|
||
TIMESERIES_WRITER_CHANGED=1
|
||
INGESTION_SERVICE_CHANGED=1
|
||
# Backend de proto kullanıyor
|
||
BACKEND_CHANGED=1
|
||
fi
|
||
|
||
# Azure DevOps değişkenlerini set et
|
||
echo "📋 Setting Azure DevOps Variables:"
|
||
set_variable "BACKEND_CHANGED" "$BACKEND_CHANGED"
|
||
set_variable "FRONTEND_CHANGED" "$FRONTEND_CHANGED"
|
||
set_variable "SHARED_CHANGED" "$SHARED_CHANGED"
|
||
set_variable "API_GATEWAY_CHANGED" "$API_GATEWAY_CHANGED"
|
||
set_variable "CLUSTER_MANAGER_CHANGED" "$CLUSTER_MANAGER_CHANGED"
|
||
set_variable "ANALYSIS_ORCHESTRATOR_CHANGED" "$ANALYSIS_ORCHESTRATOR_CHANGED"
|
||
set_variable "GRAPH_WRITER_CHANGED" "$GRAPH_WRITER_CHANGED"
|
||
set_variable "GRAPH_QUERY_CHANGED" "$GRAPH_QUERY_CHANGED"
|
||
set_variable "TIMESERIES_WRITER_CHANGED" "$TIMESERIES_WRITER_CHANGED"
|
||
set_variable "INGESTION_SERVICE_CHANGED" "$INGESTION_SERVICE_CHANGED"
|
||
|
||
# Özet yazdır
|
||
echo ""
|
||
echo "┌─────────────────────────────────────────────────┐"
|
||
echo "│ DEĞİŞİKLİK ÖZETİ │"
|
||
echo "├─────────────────────────────────────────────────┤"
|
||
|
||
print_status() {
|
||
local name="$1"
|
||
local value="${2:-0}"
|
||
if [ "$value" -gt 0 ] 2>/dev/null; then
|
||
printf "│ %-25s ✅ BUILD │\n" "$name"
|
||
else
|
||
printf "│ %-25s ⏭️ SKIP │\n" "$name"
|
||
fi
|
||
}
|
||
|
||
print_status "Backend" "$BACKEND_CHANGED"
|
||
print_status "Frontend" "$FRONTEND_CHANGED"
|
||
print_status "API Gateway" "$API_GATEWAY_CHANGED"
|
||
print_status "Cluster Manager" "$CLUSTER_MANAGER_CHANGED"
|
||
print_status "Analysis Orchestrator" "$ANALYSIS_ORCHESTRATOR_CHANGED"
|
||
print_status "Graph Writer" "$GRAPH_WRITER_CHANGED"
|
||
print_status "Graph Query" "$GRAPH_QUERY_CHANGED"
|
||
print_status "Timeseries Writer" "$TIMESERIES_WRITER_CHANGED"
|
||
print_status "Ingestion Service" "$INGESTION_SERVICE_CHANGED"
|
||
|
||
echo "└─────────────────────────────────────────────────┘"
|
||
echo ""
|
||
echo "✅ Change detection completed!"
|