tests_task:
  # We only use Cirrus CI for FreeBSD at present; the rest of the task will assume FreeBSD.
  freebsd_instance:
    image_family: freebsd-14-2
    # Cirrus has a concurrency limit of 8 vCPUs for FreeBSD. Allow executing 4 tasks in parallel.
    cpu: 2
    memory: 2G

  env:
    matrix:
      - PYTHON: python3.11
        PYTHON_VERSION: 3.11
        PYTHON_PACKAGE: python311
        SQLITE_PACKAGE: py311-sqlite3
      # FIXME: Python 3.12 is not available in Ports.
      # - PYTHON: python3.12
      #   PYTHON_VERSION: 3.12
      #   PYTHON_PACKAGE: python312
      #   SQLITE_PACKAGE: py312-sqlite3
    # FIXME: use pipx for install. pipx is currently broken in Ports.
    POETRY_HOME: /opt/poetry
    # SHELL is not set by default, and we have tests that depend on it.
    SHELL: sh

  bootstrap_poetry_script:
    - pkg install -y git $PYTHON_PACKAGE $SQLITE_PACKAGE
    - $PYTHON -m venv $POETRY_HOME
    - $POETRY_HOME/bin/pip install poetry
    - echo "PATH=${POETRY_HOME}/bin:${PATH}" >> $CIRRUS_ENV

  setup_environment_script:
    # TODO: caching
    - poetry install
    - poetry env info
    - poetry show

  matrix:
    - alias: pytest
      name: "Tests / FreeBSD (Python ${PYTHON_VERSION}) / pytest"
      skip: "!changesInclude('.cirrus.yml', 'poetry.lock', 'pyproject.toml', 'src/**.py', 'tests/**')"
      pytest_script: poetry run pytest --integration -v --junitxml=junit.xml
      on_failure:
        annotate_failure_artifacts:
          path: junit.xml
          format: junit
          type: text/xml

status_task:
  name: "Tests / FreeBSD Status"

  depends_on:
    - pytest

  container:
    image: alpine:latest
    cpu: 0.5
    memory: 512M

  # No-op the clone.
  clone_script: true
