#!/bin/bash set -e CRD_DIR=${1:-../loco-operator/config/crd/bases} TEMP_DIR=${2:-.tmp} sync_crd() { file=$1 group=$2 kind=$3 version=$4 content=$(cat $file) name=$(echo "$content" | yq e '.metadata.name' -) outjson="${TEMP_DIR}/${group}_${kind}_${version}.json" mkdir -p "src/lib/types/$group/$version" outts="src/lib/types/${group}/${version}/${kind}.ts" echo "$content" | yq eval -o=json " { \"openapi\": \"3.0.0\", \"info\": { \"title\": \"$name\", \"version\": \"$version\" }, \"paths\": {}, \"components\": { \"schemas\": { \"$kind\": ( .spec.versions[] | select(.name == \"$version\") | .schema.openAPIV3Schema ) } } } " - > "$outjson" npx openapi-typescript "$outjson" -o "$outts" } if [ ! -d "$TEMP_DIR" ]; then mkdir -p "$TEMP_DIR" fi for file in `ls $CRD_DIR/*.yaml`; do content=$(cat $file) group=$(echo "$content" | yq e '.spec.group' -) kind=$(echo "$content" | yq e '.spec.names.kind' -) versions=$(echo "$content" | yq e '.spec.versions[].name' -) echo "Syncing CRD: $file" echo "Group: $group, Kind: $kind" for version in $versions do echo "Version: $version" sync_crd $file $group $kind $version echo "-----------------------------" done done