Files
vctp2/scripts/update-swagger-ui.sh
Nathan Coad 7400e08c54
All checks were successful
continuous-integration/drone/push Build is passing
updates
2026-01-14 09:28:30 +11:00

60 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Usage: ./update-swagger-ui.sh [version]
# Example: ./update-swagger-ui.sh v5.17.14
# If no version is provided, defaults below is used.
VERSION="${1:-v5.31.0}"
TARGET_DIR="server/router/swagger-ui-dist"
TARBALL_URL="https://github.com/swagger-api/swagger-ui/archive/refs/tags/${VERSION}.tar.gz"
echo ">> Fetching Swagger UI ${VERSION}"
tmpdir="$(mktemp -d)"
cleanup() { rm -rf "$tmpdir"; }
trap cleanup EXIT
# Requirements check
for cmd in curl tar; do
command -v "$cmd" >/dev/null 2>&1 || { echo "ERROR: $cmd not found"; exit 1; }
done
# Download & unpack
curl -fsSL "$TARBALL_URL" | tar -xz -C "$tmpdir"
SRC_DIR="${tmpdir}/swagger-ui-${VERSION#v}/dist"
if [[ ! -d "$SRC_DIR" ]]; then
echo "ERROR: Unpacked dist not found at $SRC_DIR"
exit 1
fi
# Replace target
rm -rf "$TARGET_DIR"
mkdir -p "$TARGET_DIR"
# Use cp -a for portability (avoids rsync dependency)
cp -a "${SRC_DIR}/." "$TARGET_DIR/"
INDEX="${TARGET_DIR}/swagger-initializer.js"
if [[ ! -f "$INDEX" ]]; then
echo "ERROR: ${INDEX} not found after copy"
exit 1
fi
echo ">> Patching swagger-initializer.js to point at /swagger.json"
if sed --version >/dev/null 2>&1; then
SED_INPLACE=(-i)
else
SED_INPLACE=(-i '')
fi
append_validator=$'/url:[[:space:]]*"[^"]*swagger\\.json"[[:space:]]*,?$/a\\\n validatorUrl: null,'
sed "${SED_INPLACE[@]}" -E \
-e 's#configUrl:[[:space:]]*["'\''"][^"'\''"]*["'\''"]#url: "/swagger.json"#' \
-e 's#url:[[:space:]]*["'\''"][^"'\''"]*["'\''"]#url: "/swagger.json"#' \
-e 's#urls:[[:space:]]*\[[^]]*\]#url: "/swagger.json"#' \
-e "$append_validator" \
"$INDEX"
echo ">> Done. Files are in ${TARGET_DIR}"