#!/bin/bash # Extract values from pyproject.toml PYPROJECT_FILE="$(dirname "$0")/pyproject.toml" # Extract name directly and ignore newlines NAME=$(awk -F'=' '/^name/ { gsub(/"/, "", $2); print $2 }' "$PYPROJECT_FILE" | xargs) VERSION=$(awk -F'=' '/^version/ { gsub(/"/, "", $2); print $2 }' "$PYPROJECT_FILE" | xargs) if [[ -z "$VERSION" || -z "$NAME" ]]; then echo "Error: Could not determine version or name from pyproject.toml" exit 1 fi # Ensure the extracted name is valid (No spaces or unexpected characters) if ! [[ "$NAME" =~ ^[a-zA-Z0-9_-]+$ ]]; then echo "Error: Invalid project name detected: '$NAME'" exit 1 fi echo "Using project name: $NAME" echo "Using version: $VERSION" # Navigate to project root cd "$(dirname "$0")/backend" || exit # Generate OpenAPI JSON file python3 main.py generate-openapi if [[ ! -f openapi.json ]]; then echo "Error: openapi.json file not generated!" exit 1 fi # Download OpenAPI generator CLI if not present OPENAPI_VERSION=7.8.0 if [[ ! -f openapi-generator-cli.jar ]]; then wget "https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/${OPENAPI_VERSION}/openapi-generator-cli-${OPENAPI_VERSION}.jar" -O openapi-generator-cli.jar fi # Run OpenAPI generator with synced name and version java -jar openapi-generator-cli.jar generate \ -i "$(pwd)/openapi.json" \ -o python-client/ \ -g python \ --additional-properties=packageName="${NAME}client",projectName="${NAME}",packageVersion="${VERSION}" \ --additional-properties=authorName="Guillaume Gotthard",authorEmail="guillaume.gotthard@psi.ch" # Check if the generator succeeded if [[ ! -d python-client ]]; then echo "OpenAPI generator failed. Exiting." exit 1 fi # Build Python package echo "Building Python package..." cd python-client || exit python3 -m venv .venv source .venv/bin/activate pip install -U pip build python -m build # Verify build output if [[ ! -d dist || -z "$(ls -A dist)" ]]; then echo "Error: No files generated in 'dist/'. Package build failed." exit 1 fi echo "Python package built successfully in 'dist/'."