sync-crds.sh 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/bin/bash
  2. set -e
  3. CRD_DIR=${1:-../loco-operator/config/crd/bases}
  4. TEMP_DIR=${2:-.tmp}
  5. sync_crd() {
  6. file=$1
  7. group=$2
  8. kind=$3
  9. version=$4
  10. content=$(cat $file)
  11. name=$(echo "$content" | yq e '.metadata.name' -)
  12. outjson="${TEMP_DIR}/${group}_${kind}_${version}.json"
  13. mkdir -p "src/lib/types/$group/$version"
  14. outts="src/lib/types/${group}/${version}/${kind}.ts"
  15. echo "$content" | yq eval -o=json "
  16. {
  17. \"openapi\": \"3.0.0\",
  18. \"info\": { \"title\": \"$name\", \"version\": \"$version\" },
  19. \"paths\": {},
  20. \"components\": {
  21. \"schemas\": {
  22. \"$kind\": (
  23. .spec.versions[]
  24. | select(.name == \"$version\")
  25. | .schema.openAPIV3Schema
  26. )
  27. }
  28. }
  29. }
  30. " - > "$outjson"
  31. npx openapi-typescript "$outjson" -o "$outts"
  32. }
  33. if [ ! -d "$TEMP_DIR" ]; then
  34. mkdir -p "$TEMP_DIR"
  35. fi
  36. for file in `ls $CRD_DIR/*.yaml`;
  37. do
  38. content=$(cat $file)
  39. group=$(echo "$content" | yq e '.spec.group' -)
  40. kind=$(echo "$content" | yq e '.spec.names.kind' -)
  41. versions=$(echo "$content" | yq e '.spec.versions[].name' -)
  42. echo "Syncing CRD: $file"
  43. echo "Group: $group, Kind: $kind"
  44. for version in $versions
  45. do
  46. echo "Version: $version"
  47. sync_crd $file $group $kind $version
  48. echo "-----------------------------"
  49. done
  50. done