#!/usr/bin/env bash set -euo pipefail root_dir="$(cd -- "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" config="$root_dir/python/config.yaml" spec="${STELLA_OAS_FILE:-}" if [ -z "$spec" ]; then echo "STELLA_OAS_FILE is required (path to OpenAPI spec)" >&2 exit 1 fi compute_sha256() { if command -v sha256sum >/dev/null 2>&1; then sha256sum "$1" | awk '{print $1}' elif command -v shasum >/dev/null 2>&1; then shasum -a 256 "$1" | awk '{print $1}' else echo "No sha256 tool available (install sha256sum or shasum)" >&2 exit 1 fi } spec_hash=$(compute_sha256 "$spec") expected_hash="${STELLA_OAS_EXPECTED_SHA256:-}" if [ -n "$expected_hash" ] && [ "$expected_hash" != "$spec_hash" ]; then echo "Spec hash mismatch: expected $expected_hash but got $spec_hash" >&2 exit 1 fi output_dir="${STELLA_SDK_OUT:-$root_dir/out/python}" mkdir -p "$output_dir" printf "%s %s\n" "$spec_hash" "$(basename "$spec")" > "$output_dir/.oas.sha256" export STELLA_POSTPROCESS_ROOT="$output_dir" export STELLA_POSTPROCESS_LANG="python" jar="${STELLA_OPENAPI_GENERATOR_JAR:-$root_dir/tools/openapi-generator-cli-7.4.0.jar}" if [ ! -f "$jar" ]; then echo "OpenAPI Generator CLI jar not found at $jar" >&2 exit 1 fi # Prefer vendored JDK when java is absent if ! command -v java >/dev/null 2>&1; then vendor_jdk="$root_dir/tools/jdk-21.0.1+12" if [ -d "$vendor_jdk/bin" ]; then export JAVA_HOME="$vendor_jdk" export PATH="$JAVA_HOME/bin:$PATH" fi fi if ! command -v java >/dev/null 2>&1; then echo "java not found; install JDK 21 or provide vendored tools/jdk-21.0.1+12" >&2 exit 1 fi JAVA_OPTS="${JAVA_OPTS:-} -Dorg.openapitools.codegen.utils.postProcessFile=$root_dir/postprocess/postprocess.sh" export JAVA_OPTS java -jar "$jar" generate \ -i "$spec" \ -g python \ -c "$config" \ --skip-validate-spec \ --enable-post-process-file \ --global-property models,apis,supportingFiles \ -o "$output_dir" # Ensure shared helpers are present even if upstream post-process hooks were skipped for some files if [ -f "$output_dir/stellaops_sdk/__init__.py" ]; then "$root_dir/postprocess/postprocess.sh" "$output_dir/stellaops_sdk/__init__.py" fi echo "Python SDK generated at $output_dir"