aaredb/make_openapi_client.sh
GotthardG d3d87dc9a2 Sync project metadata with pyproject.toml
Updated scripts and backend to dynamically retrieve project name and version from `pyproject.toml`. This ensures consistent metadata across the OpenAPI client generation and the FastAPI application.
2024-12-17 11:08:26 +01:00

67 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
# Extract values from pyproject.toml
PYPROJECT_FILE="$(dirname "$0")/pyproject.toml"
VERSION=$(grep -Po '(?<=version = ")[^"]*' "$PYPROJECT_FILE")
NAME=$(grep -Po '(?<=name = ")[^\"]*' "$PYPROJECT_FILE" | sed 's/[^a-zA-Z0-9_-]//g') # Extract name and sanitize it
if [[ -z "$VERSION" || -z "$NAME" ]]; then
echo "Error: Could not determine version or name from pyproject.toml"
exit 1
fi
# Ensure NAME is valid (no special characters or newlines)
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/'."