# GitLab CI/CD Configuration for FastAPI stages: - test - deploy - release variables: PIP_CACHE_DIR: "$CI_PROJECT_DIR/.pip_cache" VIRTUAL_ENV: ".venv" # Cache for dependencies cache: paths: - .pip_cache/ before_script: # common setup for every job - python3.8 -m venv $VIRTUAL_ENV - source $VIRTUAL_ENV/bin/activate - pip install --upgrade pip test: stage: test script: - source $VIRTUAL_ENV/bin/activate - pip install -r requirements.txt - export PYTHONPATH=$PYTHONPATH:/home/gitlab-runner/builds/t3_38ooWt/0/mx/heidi-v2/backend - pytest --cov=app --cov-report=xml # Run tests and generate coverage report lint: stage: test script: - source $VIRTUAL_ENV/bin/activate - pip install pre-commit black flake8 - > pre-commit run --all-files || { echo "Pre-commit formatting failed. Auto-fixing formatting issues with black..." && black backend/ && exit 0; } deploy: stage: deploy only: - main variables: EVIRONMENT: ENVIRONMENT=test script: - echo "Updating repository..." - git pull origin main # Update the repository with the latest code - echo "Setting up Python dependencies..." - source $VIRTUAL_ENV/bin/activate - pip install -r requirements.txt # Install the required Python dependencies - bash ./make_openapi_client.sh # Re-generate OpenAPI client library - echo "Running the application..." - cd backend - python3.8 -m main # Replace with the exact command to start your app release: stage: release when: manual variables: TWINE_USERNAME: gitlab-ci-token # Keep username same TWINE_PASSWORD: $CI_JOB_TOKEN # Use PAT stored in GitLab CI/CD Variables script: - cd backend/python-client # Navigate to the folder where the package was generated - python3 -m venv .venv - source .venv/bin/activate - pip install -U pip twine - twine upload --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/*