From ab8ca8595c24b22ca94c06423866009ef791c782 Mon Sep 17 00:00:00 2001 From: Robert Kaussow Date: Tue, 26 Mar 2024 13:14:33 +0100 Subject: [PATCH] refactor: add helper functions to reduce code duplication --- generate.sh | 129 +++++++++++++++++++++++++++------------------------- 1 file changed, 67 insertions(+), 62 deletions(-) diff --git a/generate.sh b/generate.sh index 1bf0933..cf3e9cb 100755 --- a/generate.sh +++ b/generate.sh @@ -2,6 +2,22 @@ set -eo pipefail shopt -s globstar +prepare() { + mkdir -p "${WORKDIR}" + curl -SsfL -o "${WORKDIR}/${NAME}.crds.yaml" "${SOURCE}" +} + +output() { + TARGET_DIR="$DIST/$API" + mkdir -p "$TARGET_DIR" + + for FILE in "${WORKDIR}"/*.json; do + FILENAME=$(basename "$FILE") + + mv "$FILE" "$TARGET_DIR/$FILENAME" + done +} + generate_all() { export SOURCE=$1 @@ -14,8 +30,18 @@ generate_all() { default_openapi_handler() { printf "Processing %s ...\n" $API - mkdir -p "${WORKDIR}" - curl -SsfL -o "${WORKDIR}/${NAME}.crds.yaml" "${SOURCE}" + prepare + ( + cd "$WORKDIR" + openapi2jsonschema "${NAME}.crds.yaml" >/dev/null + ) + output + generate_all "$TARGET_DIR" +} + +calico_handler() { + printf "Processing %s ...\n" $API + prepare ( cd "$WORKDIR" openapi2jsonschema "${NAME}.crds.yaml" >/dev/null @@ -27,86 +53,65 @@ default_openapi_handler() { for FILE in "${WORKDIR}"/*.json; do FILENAME=$(basename "$FILE") - mv "$FILE" "$TARGET_DIR/$FILENAME" + mv "$FILE" "$TARGET_DIR/${FILENAME//_v1/_v3}" done generate_all "$TARGET_DIR" } +flux_handler() { + printf "Processing %s ...\n" $API + mkdir -p "${WORKDIR}" + curl -SsfL "${SOURCE}" | tar xz -C "${WORKDIR}" + + for FILE in "${WORKDIR}"/*.json; do + FILENAME=$(basename "$FILE") + PREFIX="${FILENAME%%\-*}" + MIDDLE="${FILENAME#*-}" + SUFFIX="${MIDDLE#*-}" + MIDDLE="${MIDDLE%%\-*}" + + TARGET_DIR="$DIST/$MIDDLE.$API" + TARGET_NAME="$TARGET_DIR/$PREFIX""_""$SUFFIX" + + mkdir -p "$TARGET_DIR" + mv "$FILE" "$TARGET_NAME" + + generate_all "$TARGET_DIR" + done +} + +metallb_handler() { + printf "Processing %s ...\n" $API + prepare + ( + cd "$WORKDIR" + yq --inplace 'del(.spec.conversion)' "${NAME}.crds.yaml" + openapi2jsonschema "${NAME}.crds.yaml" >/dev/null + ) + output + generate_all "$TARGET_DIR" +} + ## Calico API=projectcalico.org +NAME=calico WORKDIR="${TMP_CRD_DIR}/calico" SOURCE="https://raw.githubusercontent.com/projectcalico/calico/${CALICO_VERSION}/manifests/calico.yaml" - -printf "Processing %s ...\n" $API -mkdir -p "${WORKDIR}" -curl -SsfL -o "${WORKDIR}/calico.crds.yaml" "${SOURCE}" -( - cd "$WORKDIR" - openapi2jsonschema "calico.crds.yaml" >/dev/null -) - -TARGET_DIR="$DIST/$API" -mkdir -p "$TARGET_DIR" - -for FILE in "${WORKDIR}"/*.json; do - FILENAME=$(basename "$FILE") - - mv "$FILE" "$TARGET_DIR/${FILENAME//_v1/_v3}" -done - -generate_all "$TARGET_DIR" +calico_handler ## Flux2 API=toolkit.fluxcd.io WORKDIR="${TMP_CRD_DIR}/flux" SOURCE="https://github.com/fluxcd/flux2/releases/download/${FLUXCD_VERSION}/crd-schemas.tar.gz" - -printf "Processing %s ...\n" $API -mkdir -p "${WORKDIR}" -curl -SsfL "${SOURCE}" | tar xz -C "${WORKDIR}" - -for FILE in "${WORKDIR}"/*.json; do - FILENAME=$(basename "$FILE") - PREFIX="${FILENAME%%\-*}" - MIDDLE="${FILENAME#*-}" - SUFFIX="${MIDDLE#*-}" - MIDDLE="${MIDDLE%%\-*}" - - TARGET_DIR="$DIST/$MIDDLE.$API" - TARGET_NAME="$TARGET_DIR/$PREFIX""_""$SUFFIX" - - mkdir -p "$TARGET_DIR" - mv "$FILE" "$TARGET_NAME" - - generate_all "$TARGET_DIR" -done +flux_handler ## Metallb API=metallb.io NAME=metallb WORKDIR="${TMP_CRD_DIR}/$NAME" SOURCE="https://raw.githubusercontent.com/metallb/metallb/${METALLB_VERSION}/charts/metallb/charts/crds/templates/crds.yaml" - -printf "Processing %s ...\n" $API -mkdir -p "${WORKDIR}" -curl -SsfL -o "${WORKDIR}/${NAME}.crds.yaml" "${SOURCE}" -( - cd "$WORKDIR" - yq --inplace 'del(.spec.conversion)' "${NAME}.crds.yaml" - openapi2jsonschema "${NAME}.crds.yaml" >/dev/null -) - -TARGET_DIR="$DIST/$API" -mkdir -p "$TARGET_DIR" - -for FILE in "${WORKDIR}"/*.json; do - FILENAME=$(basename "$FILE") - - mv "$FILE" "$TARGET_DIR/$FILENAME" -done - -generate_all "$TARGET_DIR" +metallb_handler ## Cloudnative-PG API=postgresql.cnpg.io -- 2.45.2