name: CI

on:
  # any time someone pushes a new branch to origin
  push:

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:

  mypy:
    name: 'MyPy'
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup python
        uses: actions/setup-python@v2
        with:
          python-version: '3.10'

      - name: Install dependencies
        run: pip install -U . --upgrade-strategy eager -r requirements-test.txt

      - name: Run MyPy check
        run: mypy tractor/ --ignore-missing-imports --show-traceback

  # test that we can generate a software distribution and install it
  # thus avoid missing file issues after packaging.
  sdist-linux:
    name: 'sdist'
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup python
        uses: actions/setup-python@v2
        with:
          python-version: '3.10'

      - name: Build sdist
        run: python setup.py sdist --formats=zip

      - name: Install sdist from .zips
        run: python -m pip install dist/*.zip


  testing-linux:
    name: '${{ matrix.os }} Python ${{ matrix.python }} - ${{ matrix.spawn_backend }}'
    timeout-minutes: 10
    runs-on: ${{ matrix.os }}

    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        python: ['3.10']
        spawn_backend: [
          'trio',
          'mp_spawn',
          'mp_forkserver',
        ]

    steps:

      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup python
        uses: actions/setup-python@v2
        with:
          python-version: '${{ matrix.python }}'

      - name: Install dependencies
        run: pip install -U . -r requirements-test.txt -r requirements-docs.txt --upgrade-strategy eager

      - name: List dependencies
        run: pip list

      - name: Run tests
        run: pytest tests/ --spawn-backend=${{ matrix.spawn_backend }} -rsx

  # We skip 3.10 on windows for now due to not having any collabs to
  # debug the CI failures. Anyone wanting to hack and solve them is very
  # welcome, but our primary user base is not using that OS.

  # TODO: use job filtering to accomplish instead of repeated
  # boilerplate as is above XD:
  # - https://docs.github.com/en/actions/learn-github-actions/managing-complex-workflows
  # - https://docs.github.com/en/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
  # - https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idif
  # testing-windows:
  #   name: '${{ matrix.os }} Python ${{ matrix.python }} - ${{ matrix.spawn_backend }}'
  #   timeout-minutes: 12
  #   runs-on: ${{ matrix.os }}

  #   strategy:
  #     fail-fast: false
  #     matrix:
  #       os: [windows-latest]
  #       python: ['3.10']
  #       spawn_backend: ['trio', 'mp']

  #   steps:

  #     - name: Checkout
  #       uses: actions/checkout@v2

  #     - name: Setup python
  #       uses: actions/setup-python@v2
  #       with:
  #         python-version: '${{ matrix.python }}'

  #     - name: Install dependencies
  #       run: pip install -U . -r requirements-test.txt -r requirements-docs.txt --upgrade-strategy eager

  #     # TODO: pretty sure this solves debugger deps-issues on windows, but it needs to
  #     # be verified by someone with a native setup.
  #     # - name: Force pyreadline3
  #     #   run: pip uninstall pyreadline; pip install -U pyreadline3

  #     - name: List dependencies
  #       run: pip list

  #     - name: Run tests
  #       run: pytest tests/ --spawn-backend=${{ matrix.spawn_backend }} -rsx