# GitLab CI/CD configuration for [[ project_name ]]

stages:
  - lint
  - test
  - security

variables:
  DJANGO_SETTINGS_MODULE: [[ module_name ]].settings.development
  SECRET_KEY: test-secret-key-for-ci
  ALLOWED_HOSTS: localhost
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
  UV_CACHE_DIR: "$CI_PROJECT_DIR/.cache/uv"

cache:
  paths:
    - .cache/pip
    - .cache/uv
    - .venv/

# @IF database_type == 'mysql'
services:
  - mysql:8.0

variables:
  MYSQL_DATABASE: test_db
  MYSQL_ROOT_PASSWORD: test_password
# @ELSE
services:
  - postgres:15

variables:
  POSTGRES_DB: test_db
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: postgres
# @ENDIF

before_script:
  - python --version
  - pip install uv
  - uv sync
# @IF use_vite
  - npm ci
  - npm run build
# @ENDIF

lint:
  stage: lint
  image: python:3.13
  script:
    - uv run ruff check .
    - uv run ruff format --check .
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    - if: $CI_COMMIT_BRANCH == 'develop'

test:
  stage: test
  image: python:3.13
  script:
    - uv run python manage.py check
    - uv run python manage.py test
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    - if: $CI_COMMIT_BRANCH == 'develop'

security:
  stage: security
  image: python:3.13
  script:
    - uv run python manage.py check --deploy
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    - if: $CI_COMMIT_BRANCH == 'develop'
