Files
kaidi/scripts/export-openapi.sh
T
2026-08-17 14:08:40 +08:00

49 lines
1.8 KiB
Bash
Executable File

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