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.
This commit is contained in:
GotthardG 2024-12-17 11:54:32 +01:00
parent 7d6168a197
commit 8cb2154740
3 changed files with 30 additions and 35 deletions

View File

@ -39,22 +39,19 @@ lint:
exit 0; exit 0;
} }
deploy: deploy:
stage: deploy stage: deploy
only: variables:
- main CI: "true" # Mark this as a CI run
variables: ENVIRONMENT: test # Use test environment settings
CI: "true" # Mark this as a CI run PORT: 8081
ENVIRONMENT: test # Use test environment settings script:
PORT: 8081 - echo "Setting up Python dependencies..."
script: - source $VIRTUAL_ENV/bin/activate
- echo "Setting up Python dependencies..." - pip install -r requirements.txt
- source $VIRTUAL_ENV/bin/activate - echo "Starting the application to test startup with SSL..."
- pip install -r requirements.txt - cd $CI_PROJECT_DIR/backend # Use GitLab-provided dynamic root path
- echo "Starting the application to test startup with SSL..." - python -m main # Run the main module dynamically
- cd backend
- python -m main # App will start, validate, and exit
- echo "Application startup validation completed successfully."
release: release:
stage: release stage: release

View File

@ -2,6 +2,7 @@
import sys import sys
import os import os
import json import json
import tomllib
from pathlib import Path from pathlib import Path
from fastapi import FastAPI from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
@ -25,24 +26,21 @@ from app.database import Base, engine, SessionLocal, load_sample_data
# Utility function to fetch metadata from pyproject.toml # Utility function to fetch metadata from pyproject.toml
def get_project_metadata(): def get_project_metadata():
from pathlib import Path # Start from the current script's directory and search for pyproject.toml
import tomllib script_dir = Path(__file__).resolve().parent
for parent in script_dir.parents:
pyproject_path = parent / "pyproject.toml"
if pyproject_path.exists():
with open(pyproject_path, "rb") as f:
pyproject = tomllib.load(f)
name = pyproject["project"]["name"]
version = pyproject["project"]["version"]
return name, version
# Dynamically resolve the project root folder correctly. # If no pyproject.toml is found, raise FileNotFoundError
# Assume that `pyproject.toml` is located in the heidi-v2 root folder raise FileNotFoundError(
root_dir = Path(__file__).resolve().parent.parent.parent f"pyproject.toml not found in any parent directory of {script_dir}"
pyproject_path = root_dir / "heidi-v2" / "pyproject.toml" )
print(f"Looking for pyproject.toml at: {pyproject_path}") # Debugging output
if not pyproject_path.exists():
raise FileNotFoundError(f"{pyproject_path} not found")
with open(pyproject_path, "rb") as f:
pyproject = tomllib.load(f)
name = pyproject["project"]["name"]
version = pyproject["project"]["version"]
return name, version
# Get project metadata from pyproject.toml # Get project metadata from pyproject.toml

View File

@ -26,8 +26,8 @@ dependencies = [
"mysqlclient~=2.1.1", "mysqlclient~=2.1.1",
"python-multipart~=0.0.6", "python-multipart~=0.0.6",
"uvicorn==0.23.1", "uvicorn==0.23.1",
"python-dateutil~=2.8.2" "python-dateutil~=2.8.2",
"tomli>=2.0.1"
] ]
[tool.pytest.ini_options] [tool.pytest.ini_options]
norecursedirs = ["backend/python-client"] norecursedirs = ["backend/python-client"]