sync-template-version.sh 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/usr/bin/env bash
  2. # Sync Docker image versions to template.yaml metadata
  3. # Triggered by GitHub Actions when Renovate updates dependencies
  4. set -euo pipefail
  5. # Extract version from different file types
  6. extract_version() {
  7. local file="$1"
  8. local filename=$(basename "$file")
  9. case "$filename" in
  10. compose.yaml.j2|*.j2)
  11. # Docker Compose or K8s manifest: extract from image: line
  12. grep -E '^\s*image:\s*[^{]*:[^{}\s]+' "$file" | head -n1 | sed -E 's/.*:([^:]+)$/\1/' | tr -d ' ' || true
  13. ;;
  14. values.yaml|values.yml)
  15. # Helm values: extract from repository + tag
  16. grep -A1 'repository:' "$file" | grep 'tag:' | sed -E 's/.*tag:\s*['\''"]?([^'\''"]+)['\''"]?/\1/' | tr -d ' ' || true
  17. ;;
  18. esac
  19. }
  20. # Update template.yaml if version differs
  21. update_template() {
  22. local template_file="$1"
  23. local new_version="$2"
  24. local current_date=$(date +%Y-%m-%d)
  25. local current_version=$(grep -E '^\s*version:\s*' "$template_file" | sed -E 's/.*version:\s*['\''"]?([^'\''"]+)['\''"]?/\1/' | tr -d ' ' || true)
  26. if [ -n "$current_version" ] && [ "$new_version" != "$current_version" ]; then
  27. echo "✓ Updating $template_file: $current_version → $new_version (date: $current_date)"
  28. sed -i "s/version: .*/version: $new_version/" "$template_file"
  29. sed -i "s/date: .*/date: '$current_date'/" "$template_file"
  30. return 0
  31. fi
  32. return 1
  33. }
  34. # Main processing
  35. updated=0
  36. files=("${@:-$(find library -type f \( -name 'compose.yaml.j2' -o -name 'values.yaml' -o -name 'values.yml' \) 2>/dev/null)}")
  37. for file in "${files[@]}"; do
  38. [ ! -f "$file" ] && continue
  39. template_file="$(dirname "$file")/template.yaml"
  40. [ ! -f "$template_file" ] && continue
  41. version=$(extract_version "$file")
  42. [ -z "$version" ] || [[ "$version" =~ \{\{ ]] && continue
  43. update_template "$template_file" "$version" && ((updated++)) || true
  44. done
  45. echo "Processed ${#files[@]} file(s), updated $updated template(s)"
  46. exit 0