fix: deploy.sh bash 3 kompatibel (keine assoziativen Arrays)
All checks were successful
CI/CD / go-lint (push) Has been skipped
CI/CD / python-lint (push) Has been skipped
CI/CD / nodejs-lint (push) Has been skipped
CI/CD / test-go-ai-compliance (push) Successful in 32s
CI/CD / test-python-backend-compliance (push) Successful in 30s
CI/CD / test-python-document-crawler (push) Successful in 21s
CI/CD / test-python-dsms-gateway (push) Successful in 16s
CI/CD / validate-canonical-controls (push) Successful in 10s
CI/CD / Deploy (push) Successful in 2s

macOS ships mit bash 3, declare -A wird nicht unterstuetzt.
Ersetzt durch case-Funktion dir_to_service().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-03-25 08:19:38 +01:00
parent 230fbeb490
commit c56bccaedf

View File

@@ -25,18 +25,23 @@ HEALTH_ENDPOINTS=(
HEALTH_INTERVAL=20 HEALTH_INTERVAL=20
HEALTH_TIMEOUT=300 # 5 minutes HEALTH_TIMEOUT=300 # 5 minutes
# Map top-level directories to docker-compose service names # Map top-level directory to docker-compose service name
declare -A DIR_TO_SERVICE=( dir_to_service() {
[admin-compliance]=admin-compliance case "$1" in
[backend-compliance]=backend-compliance admin-compliance) echo "admin-compliance" ;;
[ai-compliance-sdk]=ai-compliance-sdk backend-compliance) echo "backend-compliance" ;;
[developer-portal]=developer-portal ai-compliance-sdk) echo "ai-compliance-sdk" ;;
[compliance-tts-service]=compliance-tts-service developer-portal) echo "developer-portal" ;;
[document-crawler]=document-crawler compliance-tts-service) echo "compliance-tts-service" ;;
[dsms-node]=dsms-node document-crawler) echo "document-crawler" ;;
[dsms-gateway]=dsms-gateway dsms-node) echo "dsms-node" ;;
[docs-src]=docs dsms-gateway) echo "dsms-gateway" ;;
) docs-src) echo "docs" ;;
*) echo "" ;;
esac
}
ALL_SERVICES="admin-compliance backend-compliance ai-compliance-sdk developer-portal compliance-tts-service document-crawler dsms-node dsms-gateway docs"
# --- Helpers --- # --- Helpers ---
info() { printf "\033[1;34m[INFO]\033[0m %s\n" "$*"; } info() { printf "\033[1;34m[INFO]\033[0m %s\n" "$*"; }
@@ -60,10 +65,9 @@ info "Detecting changed services since last deploy..."
REMOTE_HEAD=$(ssh "${MAC_MINI}" "git -C ${PROJECT_DIR} rev-parse HEAD" 2>/dev/null || echo "") REMOTE_HEAD=$(ssh "${MAC_MINI}" "git -C ${PROJECT_DIR} rev-parse HEAD" 2>/dev/null || echo "")
LOCAL_HEAD=$(git rev-parse HEAD) LOCAL_HEAD=$(git rev-parse HEAD)
CHANGED_SERVICES=() CHANGED_SERVICES=""
if [ -z "${REMOTE_HEAD}" ] || [ "${REMOTE_HEAD}" = "${LOCAL_HEAD}" ]; then if [ -z "${REMOTE_HEAD}" ] || [ "${REMOTE_HEAD}" = "${LOCAL_HEAD}" ]; then
# Cannot determine diff or already up to date — check last 1 commit
info "Cannot determine remote HEAD or already equal. Checking last commit diff..." info "Cannot determine remote HEAD or already equal. Checking last commit diff..."
CHANGED_DIRS=$(git diff --name-only HEAD~1 HEAD 2>/dev/null | cut -d'/' -f1 | sort -u) CHANGED_DIRS=$(git diff --name-only HEAD~1 HEAD 2>/dev/null | cut -d'/' -f1 | sort -u)
else else
@@ -71,28 +75,26 @@ else
fi fi
for dir in ${CHANGED_DIRS}; do for dir in ${CHANGED_DIRS}; do
svc="${DIR_TO_SERVICE[${dir}]:-}" svc=$(dir_to_service "${dir}")
if [ -n "${svc}" ]; then if [ -n "${svc}" ]; then
CHANGED_SERVICES+=("${svc}") CHANGED_SERVICES="${CHANGED_SERVICES} ${svc}"
fi fi
done done
# Also check if docker-compose.yml itself changed # Also check if docker-compose.yml itself changed
if echo "${CHANGED_DIRS}" | grep -q "^docker-compose"; then if echo "${CHANGED_DIRS}" | grep -q "^docker-compose"; then
info "docker-compose.yml changed — will rebuild all services." info "docker-compose.yml changed — will rebuild all services."
CHANGED_SERVICES=() CHANGED_SERVICES="${ALL_SERVICES}"
for svc in "${DIR_TO_SERVICE[@]}"; do
CHANGED_SERVICES+=("${svc}")
done
fi fi
if [ ${#CHANGED_SERVICES[@]} -eq 0 ]; then # Deduplicate
CHANGED_SERVICES=$(echo "${CHANGED_SERVICES}" | tr ' ' '\n' | sort -u | tr '\n' ' ' | xargs)
if [ -z "${CHANGED_SERVICES}" ]; then
warn "No service directories changed. Nothing to rebuild on Mac Mini." warn "No service directories changed. Nothing to rebuild on Mac Mini."
info "Coolify will still deploy from the gitea push." info "Coolify will still deploy from the gitea push."
else else
# Deduplicate info "Changed services: ${CHANGED_SERVICES}"
CHANGED_SERVICES=($(printf '%s\n' "${CHANGED_SERVICES[@]}" | sort -u))
info "Changed services: ${CHANGED_SERVICES[*]}"
# --- Step 3: Pull code on Mac Mini --- # --- Step 3: Pull code on Mac Mini ---
info "Pulling latest code on Mac Mini..." info "Pulling latest code on Mac Mini..."
@@ -100,14 +102,12 @@ else
ok "Code pulled on Mac Mini." ok "Code pulled on Mac Mini."
# --- Step 4: Rebuild + restart changed services --- # --- Step 4: Rebuild + restart changed services ---
SERVICES_STR="${CHANGED_SERVICES[*]}" info "Building changed services on Mac Mini: ${CHANGED_SERVICES}"
ssh "${MAC_MINI}" "${DOCKER} compose -f ${COMPOSE_FILE} build ${CHANGED_SERVICES}"
info "Building changed services on Mac Mini: ${SERVICES_STR}"
ssh "${MAC_MINI}" "${DOCKER} compose -f ${COMPOSE_FILE} build ${SERVICES_STR}"
ok "Build complete." ok "Build complete."
info "Restarting changed services on Mac Mini: ${SERVICES_STR}" info "Restarting changed services on Mac Mini: ${CHANGED_SERVICES}"
ssh "${MAC_MINI}" "${DOCKER} compose -f ${COMPOSE_FILE} up -d --no-deps ${SERVICES_STR}" ssh "${MAC_MINI}" "${DOCKER} compose -f ${COMPOSE_FILE} up -d --no-deps ${CHANGED_SERVICES}"
ok "Services restarted on Mac Mini." ok "Services restarted on Mac Mini."
fi fi