stages:
  - lint
  - test

variables:
  POSTGRES_USER: '{{ cookiecutter.project_slug }}'
  POSTGRES_PASSWORD: ''
  POSTGRES_DB: 'test_{{ cookiecutter.project_slug }}'
  POSTGRES_HOST_AUTH_METHOD: trust
  {%- if cookiecutter.use_celery == 'y' %}
  REDIS_URL: 'redis://redis:6379/0'
  {%- endif %}

precommit:
  stage: lint
  image: python:3.12
  variables:
    PRE_COMMIT_HOME: ${CI_PROJECT_DIR}/.cache/pre-commit
  cache:
    paths:
      - ${PRE_COMMIT_HOME}
  before_script:
    - pip install -q pre-commit
  script:
    - pre-commit run --show-diff-on-failure --color=always --all-files

pytest:
  stage: test
  {%- if cookiecutter.use_docker == 'y' %}
  image: docker:25.0
  services:
    - docker:dind
  before_script:
    - docker compose -f docker-compose.local.yml build
    - docker compose -f docker-compose.docs.yml build
    # Ensure celerybeat does not crash due to non-existent tables
    - docker compose -f docker-compose.local.yml run --rm django python manage.py migrate
    - docker compose -f docker-compose.local.yml up -d
  script:
    - docker compose -f docker-compose.local.yml run django pytest
  {%- else %}
  image: python:3.12
  services:
    - postgres:{{ cookiecutter.postgresql_version }}
  variables:
    DATABASE_URL: pgsql://$POSTGRES_USER:$POSTGRES_PASSWORD@postgres/$POSTGRES_DB
  before_script:
    - pip install -r requirements/local.txt
  script:
    - pytest
  {%- endif %}
