name: MacOS

on:
  push:
    branches:
    - master
  pull_request:
  schedule:
  # Run every Friday at 18:02 UTC
  - cron: 2 18 * * 5

jobs:
  dev-tools:
    name: Quality Check
    runs-on: macos-latest

    steps:
    # Caches
    - name: pip cache
      uses: actions/cache@v1
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-${{ hashFiles('tools/requirements/tests.txt') }}-${{ hashFiles('tools/requirements/docs.txt') }}-${{ hashFiles('tox.ini') }}
        restore-keys: |
          ${{ runner.os }}-pip-
          ${{ runner.os }}-
    - name: Set PY (for pre-commit cache)
      run: echo "PY=$(python -c 'import hashlib, sys;print(hashlib.sha256(sys.version.encode()+sys.executable.encode()).hexdigest())')" >> $GITHUB_ENV
    - name: pre-commit cache
      uses: actions/cache@v1
      with:
        path: ~/.cache/pre-commit
        key: pre-commit|2020-02-14|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}

    # Setup
    - uses: actions/checkout@v2
    - name: Set up Python 3.8
      uses: actions/setup-python@v2
      with:
        python-version: 3.8

    - name: Install tox
      run: python -m pip install tox

    # Main check
    - run: python -m tox -e "lint,docs"

  packaging:
    name: Packaging
    runs-on: macos-latest

    steps:
    # Caches
    - name: pip cache
      uses: actions/cache@v1
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-${{ hashFiles('tools/requirements/tests.txt') }}-${{ hashFiles('tools/requirements/docs.txt') }}-${{ hashFiles('tox.ini') }}
        restore-keys: |
          ${{ runner.os }}-pip-
          ${{ runner.os }}-
    # Setup
    - name: Set up git credentials
      run: |
        git config --global user.email "pypa-dev@googlegroups.com"
        git config --global user.name "pip"
    - uses: actions/checkout@v2
    - name: Set up Python 3.8
      uses: actions/setup-python@v2
      with:
        python-version: 3.8
    - name: Install tox and nox
      run: python -m pip install tox nox

    # Main check
    - name: Check vendored packages
      run: python -m tox -e "vendoring"

    - name: Prepare dummy release
      run: nox -s prepare-release -- 99.9

    - name: Generate distributions for the dummy release
      run: nox -s build-release -- 99.9

  tests:
    name: Tests / ${{ matrix.python }}
    runs-on: macos-latest

    needs: dev-tools

    strategy:
      fail-fast: false
      matrix:
        python: [2.7, 3.5, 3.6, 3.7, 3.8, 3.9]

    steps:
    # Caches
    - name: pip cache
      uses: actions/cache@v1
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-${{ hashFiles('tools/requirements/tests.txt') }}-${{ hashFiles('tools/requirements/docs.txt') }}-${{ hashFiles('tox.ini') }}
        restore-keys: |
          ${{ runner.os }}-pip-
          ${{ runner.os }}-
    # Setup
    - uses: actions/checkout@v2
    - uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python }}

    - name: Install tox
      run: python -m pip install tox 'virtualenv<20'

    # Main check
    - name: Run unit tests
      run: >-
        python -m tox -e py --
        -m unit
        --verbose
        --numprocesses auto

    - name: Run integration tests
      run: >-
        python -m tox -e py --
        -m integration
        --verbose
        --numprocesses auto
        --durations=5
