#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" API_DIR="${SCRIPT_DIR}/.." TMP_DIR="$(mktemp -d)" trap "rm -rf ${TMP_DIR}" EXIT GEN_FILES=() echo "Validating generated code..." echo "Separating generated files from handwritten files..." while IFS= read -r file; do GEN_FILES+=("$file") done < <(grep -rl "// Code generated" "${API_DIR}/types" || true) echo "Copying generated files into temporary folder..." for f in "${GEN_FILES[@]}"; do mkdir -p "${TMP_DIR}/$(dirname "${f#${API_DIR}/}")" cp "$f" "${TMP_DIR}/${f#${API_DIR}/}" done cp "${API_DIR}/swagger.yaml" "${TMP_DIR}/" cp "${API_DIR}/swagger-gen.yaml" "${TMP_DIR}/" cp -r "${API_DIR}/templates" "${TMP_DIR}/" 2> /dev/null || true echo "Generating swagger types in temporary folder..." ( cd "${TMP_DIR}" "${SCRIPT_DIR}/generate-swagger-api.sh" > /dev/null 2>&1 ) echo "Run diff for all generated files..." DIFF_FOUND=false for f in "${GEN_FILES[@]}"; do REL="${f#${API_DIR}/}" if ! diff -q "${TMP_DIR}/${REL}" "${API_DIR}/${REL}" > /dev/null 2>&1; then echo "Difference found in ${REL}" diff -u "${TMP_DIR}/${REL}" "${API_DIR}/${REL}" || true DIFF_FOUND=true fi done if [ "$DIFF_FOUND" = true ]; then echo echo "Swagger validation failed. Please run:" echo " ./scripts/generate-swagger-api.sh" echo "and commit updated generated files." exit 1 fi echo "Swagger file is up to date."