| #!/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." |