name: build

on:
  push:
    branches:
      - main
    tags:
      - "*-[0-9]+.*"
  pull_request:
    branches:
      - main

jobs:
  build-cross-platform:
    name: test ${{matrix.os}} - ${{matrix.python-version}}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [
          ubuntu-latest,
          windows-latest,
          macos-latest
        ]
        python-version: [
          '3.7',
          '3.8',
          '3.9',
          '3.10'
        ]

    steps:
    - uses: actions/checkout@v2

    - uses: actions/setup-python@v3
      with:
        python-version: ${{matrix.python-version}}

    - uses: actions/setup-java@v3
      with:
        java-version: '8'
        distribution: 'zulu'
        cache: 'maven'

    - name: Install ScyJava
      run: |
        python -m pip install --upgrade pip
        python -m pip install -e '.[dev]'

    - name: Test ScyJava
      run: |
        bin/test.sh --color=yes

  ensure-clean-code:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-python@v3

      - name: Lint code
        uses: psf/black@stable

      - name: Flake code
        run: |
          python -m pip install flake8 Flake8-pyproject flake8-typing-imports
          python -m flake8 src tests

      - name: Check import ordering
        uses: isort/isort-action@master
        with:
          configuration: --check-only

      - name: Validate pyproject.toml
        run: |
          python -m pip install validate-pyproject[all]
          python -m validate_pyproject pyproject.toml

  conda-dev-test:
    name: Conda Setup & Code Coverage
    runs-on: ubuntu-latest
    defaults:
      # Steps that rely on the activated environment must be run with this shell setup.
      # See https://github.com/marketplace/actions/setup-miniconda#important
      run:
        shell: bash -l {0}
    steps:
      - uses: actions/checkout@v2
      - name: Cache conda
        uses: actions/cache@v2
        env:
          # Increase this value to reset cache if dev-environment.yml has not changed
          CACHE_NUMBER: 0
        with:
          path: ~/conda_pkgs_dir
          key:
            ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-${{ hashFiles('dev-environment.yml') }}
      - uses: conda-incubator/setup-miniconda@v2
        with:
          # Create env with dev packages
          auto-update-conda: true
          python-version: 3.9
          miniforge-variant: Mambaforge
          environment-file: dev-environment.yml
          # Activate scyjava-dev environment
          activate-environment: scyjava-dev
          auto-activate-base: false
          # Use mamba for faster setup
          use-mamba: true
      - name: Test scyjava
        run: |
          bin/test.sh --cov-report=xml --cov=.
      # We could do this in its own action, but we'd have to setup the environment again.
      - name: Upload Coverage to Codecov
        uses: codecov/codecov-action@v2
