#!/usr/bin/env bash # generate-sdk.sh — Generate the @orchard9/rdev-sdk TypeScript SDK from the embedded OpenAPI spec. # No server, DB, or K8s needed. The spec is exported directly from the Go binary. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT="$SCRIPT_DIR/.." SDK_DIR="$ROOT/sdk" # 1. Check speakeasy is installed if ! command -v speakeasy &>/dev/null; then echo "speakeasy CLI not found. Installing..." if command -v brew &>/dev/null; then brew install speakeasy-api/speakeasy/speakeasy else # Install to ~/.local/bin (no sudo needed) mkdir -p "$HOME/.local/bin" curl -fsSL https://raw.githubusercontent.com/speakeasy-api/speakeasy/main/install.sh \ | INSTALL_DIR="$HOME/.local/bin" sh export PATH="$HOME/.local/bin:$PATH" fi fi # 2. Export the OpenAPI spec (no server needed — pure Go, no external deps) echo "Exporting OpenAPI spec..." go run "$ROOT/cmd/rdev-api" --export-openapi > "$SDK_DIR/openapi.json" echo " -> $SDK_DIR/openapi.json" # 3. Validate the spec echo "Validating spec..." speakeasy validate openapi -s "$SDK_DIR/openapi.json" # 4. Generate the TypeScript SDK echo "Generating TypeScript SDK..." speakeasy generate sdk \ --schema "$SDK_DIR/openapi.json" \ --lang typescript \ --out "$SDK_DIR/typescript" \ --config "$SDK_DIR/.speakeasy/gen.yaml" # 5. Install dependencies and build echo "Building SDK..." cd "$SDK_DIR/typescript" npm install npm run build echo "" echo "Done! SDK generated at sdk/typescript/" echo "Test with: cd sdk/typescript && npm pack --dry-run"