#!/usr/bin/env bash # GitOps ConfigMap Checksum Hook # Automatically updates checksum annotations in kustomization.yaml when ConfigMaps change. # This ensures Flux CD re-deploys the HelmRelease when external ConfigMap sources are modified. # # See: docs/ops-configmap-sync.md set -euo pipefail REPO_ROOT="$(git rev-parse --show-toplevel)" ELEMENT_VALUES="$REPO_ROOT/apps/production/custom-configs/element-values.yaml" SYNAPSE_VALUES="$REPO_ROOT/apps/production/custom-configs/synapse-values.yaml" KUSTOMIZATION="$REPO_ROOT/apps/production/kustomization.yaml" # Function to calculate MD5 hash (handles both GNU md5sum and BSD md5) get_md5() { local file="$1" if command -v md5sum &> /dev/null; then md5sum "$file" | awk '{print $1}' elif command -v md5 &> /dev/null; then md5 -q "$file" else echo "ERROR: Neither md5sum nor md5 found" >&2 exit 1 fi } # Update checksums for ConfigMaps that exist and are staged if git diff --cached --name-only | grep -q "element-values.yaml"; then ELEMENT_HASH=$(get_md5 "$ELEMENT_VALUES") sed -i.bak "s/value: \"[0-9a-f]\{32\}\" *# element-config/value: \"$ELEMENT_HASH\" # element-config/" "$KUSTOMIZATION" rm -f "$KUSTOMIZATION.bak" git add "$KUSTOMIZATION" fi if git diff --cached --name-only | grep -q "synapse-values.yaml"; then SYNAPSE_HASH=$(get_md5 "$SYNAPSE_VALUES") sed -i.bak "s/value: \"[0-9a-f]\{32\}\" *# synapse-config/value: \"$SYNAPSE_HASH\" # synapse-config/" "$KUSTOMIZATION" rm -f "$KUSTOMIZATION.bak" git add "$KUSTOMIZATION" fi