# 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
  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..."
    - python3.8 -m main  # Replace with the exact command to start your app

release:
  stage: release
  when: manual
  variables:
    TWINE_USERNAME: gitlab-ci-token
    TWINE_PASSWORD: $CI_JOB_TOKEN
  script:
    - bash make_openapi_client.sh