49 lines
1.8 KiB
Bash
Executable File
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"
|