#!/usr/bin/env bash set -euo pipefail BASE_URL="${1:-http://127.0.0.1:18080}" VERSION="${OPENAPI_VERSION:-1.0.0}" ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" RAW_FILE="$(mktemp)" NORMALIZED_FILE="$(mktemp)" YAML_FILE="$(mktemp)" OUTPUT_FILE="$(mktemp)" trap 'rm -f "$RAW_FILE" "$NORMALIZED_FILE" "$YAML_FILE" "$OUTPUT_FILE"' EXIT curl --fail --silent --show-error "${BASE_URL%/}/api-docs" -o "$RAW_FILE" jq -S --arg version "$VERSION" \ 'del(.servers) | .info.title = "Kaidi Finance API" | .info.version = $version | .paths |= with_entries( if (.key | test("^/api/v1/archives?(/|$)")) then .value |= with_entries( if (.value.operationId? // "" | test("_1$")) then .value.operationId |= sub("_1$"; "") else . end ) else . end ) # OpenAPI annotations expose allowableValues as strings even for an integer schema. | (.paths["/api/v1/workflow/tasks"].get.parameters[] | select(.name == "size").schema.enum) |= map(tonumber) | (.paths["/api/v1/source/forms"].get.parameters[] | select(.name == "size").schema.enum) |= map(tonumber) | (.paths["/api/v1/audit/logs"].get.parameters[] | select(.name == "size").schema.enum) |= map(tonumber) | (.paths["/api/v1/masterdata/{resource}/{publicId}/versions"].get.parameters[] | select(.name == "size").schema.enum) |= map(tonumber)' \ "$RAW_FILE" > "$NORMALIZED_FILE" ruby -ryaml -rjson -e 'puts JSON.parse(File.read(ARGV[0])).to_yaml' \ "$NORMALIZED_FILE" > "$YAML_FILE" { printf '# Generated from Springdoc /api-docs by scripts/export-openapi.sh. Do not edit manually.\n' cat "$YAML_FILE" } > "$OUTPUT_FILE" "$ROOT_DIR/scripts/check-openapi.sh" "$OUTPUT_FILE" mv "$OUTPUT_FILE" "$ROOT_DIR/openapi.yaml" printf 'Generated %s from %s/api-docs\n' "$ROOT_DIR/openapi.yaml" "$BASE_URL"